├── .eslintrc.js
├── .gitignore
├── .npmignore
├── .travis.yml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── demo
├── arcgis-js-api-demo.html
├── config
│ ├── custom-environment-variables.json
│ └── default.json
├── data
│ ├── pasadena-bus.geojson
│ ├── pasadena-parks.geojson
│ └── trees.geojson
├── index.js
├── mapbox-demo.html
├── package-lock.json
├── package.json
└── server.js
├── package.json
├── src
├── esri-metadata.js
├── esri-rendering-info.js
├── esri-root.js
├── esri-template-metadata.js
├── esri-template-root.js
├── index.js
├── metadata.js
├── serve.js
├── tile-set-config.js
├── tile-sets-cache.js
└── utils.js
└── test
├── esri-metadata.spec.js
├── esri-rendering-info.spec.js
├── esri-root.spec.js
├── fixtures
├── esri-metadata-result.json
└── trees.json
├── metadata.spec.js
├── serve.spec.js
├── tile-sets-cache.spec.js
├── tile-sets-config.spec.js
└── utils.spec.js
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['standard']
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | npm-debug.log
3 | complexity
4 | /lib
5 | /public
6 | test/test.log.**
7 | .flowconfig
8 | .vscode
9 | .idea
10 | dist
11 | package-lock.json
12 | yarn.lock
13 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src
2 | test
3 | demo
4 | .babelrc
5 | .gitignore
6 | node_modules
7 | .travis.yml
8 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "10"
4 | sudo: false
5 | cache:
6 | - node_modules
7 | script:
8 | - npm test
9 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 | All notable changes to this project will be documented in this file.
3 | This project adheres to [Semantic Versioning](http://semver.org/).
4 |
5 | ## [2.2.0] - 2021-12-14
6 | ### Added
7 | * Support for POST requests to tile endpoints
8 |
9 | ## [2.1.1] - 2020-08-17
10 | ### Fixed
11 | * Use baseUrl if there is one
12 |
13 | ## [2.1.0] - 2019-07-02
14 | ### Changed
15 | * Added `rest/services` to routes targeting ArcGIS clients
16 |
17 | ### Added
18 | * trailing slash route - `VectorTileServer/` needed for ArcGIS clients
19 |
20 | ## [2.0.0] - 2019-06-26
21 | ### Breaking Change
22 | * plugin class name (and thus routes) changed to `VectorTileServer` to accomodate ArcGIS requirements
23 |
24 | ### Added
25 | * ArcGIS metadata route
26 | * ArcGIS root.json route
27 |
28 | ## [1.0.1] - 2019-06-21
29 | ### Fixed
30 | * strip undefined properties from tile-config object
31 |
32 | ## [1.0.0] - 2019-06-21
33 | ### Changed
34 | * path to package.json
35 | * refactor into source directory
36 | * update demo
37 |
38 | ### Added
39 | * Unit tests
40 |
41 | ## [0.0.3] - 2019-06-14
42 | ### Added
43 | * Linting and travis build.
44 |
45 | [2.2.0]: https://github.com/koopjs/koop-output-vector-tiles/compare/v2.1.1...v2.2.0
46 | [2.1.1]: https://github.com/koopjs/koop-output-vector-tiles/compare/v2.1.0...v2.1.1
47 | [2.1.0]: https://github.com/koopjs/koop-output-vector-tiles/compare/v2.0.0...v2.1.0
48 | [2.0.0]: https://github.com/koopjs/koop-output-vector-tiles/compare/v1.0.1...v2.0.0
49 | [1.0.1]: https://github.com/koopjs/koop-output-vector-tiles/compare/v1.0.0...v1.0.1
50 | [1.0.0]: https://github.com/koopjs/koop-output-vector-tiles/compare/v0.0.3...v1.0.0
51 | [0.0.3]: https://github.com/koopjs/koop-output-vector-tiles/releases/tag/v0.0.3
52 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # @koopjs/output-vector-tiles
2 |
3 | This output-services plugin converts GeoJSON to `pbf` vector tiles.
4 |
5 | ## Install
6 |
7 | ```bash
8 | npm install --save @koopjs/output-vector-tiles
9 | ```
10 |
11 | ## Usage
12 |
13 | Register this plugin with koop before your plugins to ensure that the `VectorTiles` routes are bound to the providers.
14 |
15 | ```
16 | const tile = require('@koopjs/output-vector-tiles')
17 | koop.register(tiles)
18 |
19 | // Register providers
20 | ```
21 |
22 | After startup, Koop will include `VectorTileServer` routes for each registered provider. For example, if you had registered the Github provider, the following routes would be available:
23 |
24 | ```bash
25 | /github/:id/VectorTileServer/:z([0-9]+)/:x([0-9]+)/:y([0-9]+).pbf GET, POST
26 | /github/rest/services/:id/VectorTileServer/tiles.json GET
27 | /github/rest/services/:id/VectorTileServer GET, POST
28 | /github/rest/services/:id/VectorTileServer/ GET, POST
29 | /github/rest/services/:id/VectorTileServer/resources/styles/root.json GET
30 | ```
31 |
32 | ## Routes
33 | | Route | Method | Description |
34 | | --- | --- | --- |
35 | |`/VectorTileServer/:z([0-9]+)/:x([0-9]+)/:y([0-9]+).pbf`| GET, POST | Get a specific tile. |
36 | |`/VectorTileServer/tiles.json`| GET | Standard vector tile metadata. |
37 | |`/VectorTileServer`| GET, POST | ArcGIS vector tile metadata. |
38 | |`/VectorTileServer/`| GET, POST | ArcGIS vector tile metadata. |
39 | |`/VectorTileServer/resources/styles/root.json`| GET | ArcGIS vector tile styling info. |
40 |
41 |
42 | ## Options and configuration
43 |
44 | ### Using a tile set cache
45 | This output plugin has a built-in in-memory cache for storing generated tile sets for a set period of time. This may improve performance. It is disabled by default. You can use it by setting your Koop config like:
46 |
47 | ```javascript
48 | {
49 | "koopOutputVectorTiles": {
50 | "cache": true,
51 | "cacheExpiration": 3600 // seconds to cache; defaults to 300
52 | }
53 | }
54 | ```
55 |
56 | ### Tile generation settings
57 | This plugin leverages [geojsonvt](https://github.com/mapbox/geojson-vt) to create tiles from GeoJSON. If you want to adjust any of the geojsonvt settings, you can do so in the Config:
58 |
59 | ```javascript
60 | {
61 | "koopOutputVectorTiles": {
62 | "geojsonVT":{
63 | "maxZoom": , // max zoom to preserve detail on; can't be higher than 24
64 | "tolerance": , // simplification tolerance (higher means simpler)
65 | "extent": , // tile extent (both width and height)
66 | "buffer": , // 64 is the original default, using a higher number like 512, 1024 or 2048 gets rid of some geojson artifacts but increases the tilesSetCache size // tile buffer on each side
67 | "debug": , // logging level (0 to disable, 1 or 2)
68 | "lineMetrics": , // whether to enable line metrics tracking for LineString/MultiLineString features
69 | "promoteId": , // name of a feature property to promote to feature.id. Cannot be used with `generateId`
70 | "generateId": , // whether to generate feature ids. Cannot be used with `promoteId`
71 | "indexMaxZoom": , // max zoom in the initial tile index
72 | "indexMaxPoints": // max number of points per tile in the index
73 | }
74 | }
75 | }
76 | ```
77 |
78 | ### ArcGIS tile styling
79 | ArcGIS applications make style requests to the vector tile server at `/VectorTileServer/resources/styles/root.json`. You can control the style served by this endpoint by either (1) setting default values in your config file, or (2) adding styling info to the GeoJSON metadata in your provider.
80 |
81 | #### ArcGIS style via config
82 |
83 | Add `paint` configuration for each `circle`, `line`,and `fill` types:
84 |
85 | ```javascript
86 | {
87 | "koopOutputVectorTiles": {
88 | "circle": {
89 | "paint": {
90 | "circle-radius": 3
91 | }
92 | },
93 | "line": {
94 | "paint": {
95 | "line-width": 7
96 | }
97 | },
98 | "fill": {
99 | "paint": {
100 | "fill-opacity": 0.25
101 | }
102 | }
103 | }
104 | }
105 | ```
106 |
107 | See the [Mapbox style specification](https://docs.mapbox.com/mapbox-gl-js/style-spec/) for additional properties that can be set in `paint`.
108 |
109 | #### ArcGIS style via your provider:
110 | You can modify the GeoJSON metadata of your provider to handle styling:
111 |
112 | ```javascript
113 | // inside your getData function
114 |
115 | geojson.metadata = {}
116 | geojson.metadata.vt = {}
117 | geojson.metadata.vt = {
118 | type: 'circle',
119 | paint: {
120 | 'circle-radius': 4
121 | }
122 | }
123 |
124 | ```
125 |
126 | ## Demos
127 | This repo ships with both MapBoxGL and ArcGIS demo applications that consume Koop vector tiles. To try it out:
128 |
129 | ```bash
130 | # Install plugin dependencies
131 | npm install
132 |
133 | # Move to demo directory
134 | cd demo
135 |
136 | # Install demo dependencies and start Express Koop server
137 | npm install
138 | npm start
139 | ```
140 |
141 | Then open `mapbox-demo/index.html` or `arcgis-js-api-demo.html` in the browser of your choice. You should see vector tile rendered data around the city of Pasadena, CA.
142 |
--------------------------------------------------------------------------------
/demo/arcgis-js-api-demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | VectorTileLayer sample
7 |
8 |
18 |
19 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/demo/config/custom-environment-variables.json:
--------------------------------------------------------------------------------
1 | {
2 | "googlesheets": {
3 | "auth": "GOOGLESHEETS_AUTH"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/demo/config/default.json:
--------------------------------------------------------------------------------
1 | {
2 | "koopOutputVectorTiles": {
3 | "geojsonVT": {
4 | "maxZoom": 14,
5 | "tolerance": 3,
6 | "extent": 4096,
7 | "buffer": 64,
8 | "debug": 0,
9 | "lineMetrics": false,
10 | "promoteId": null,
11 | "generateId": false,
12 | "indexMaxZoom": 5,
13 | "indexMaxPoints": 100000
14 | },
15 | "maxAge": 3600
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/demo/index.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/koopjs/koop-output-vector-tiles/3bf31fba6ca17d2ac812698c9394a468d0b1ee86/demo/index.js
--------------------------------------------------------------------------------
/demo/mapbox-demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
15 |
16 |
17 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/demo/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@esri/proj-codes": {
8 | "version": "2.3.0",
9 | "resolved": "https://registry.npmjs.org/@esri/proj-codes/-/proj-codes-2.3.0.tgz",
10 | "integrity": "sha512-MdHLW52b3UBgr0nPYTARjYnxd77u7sM+8ulq3rQqHzSYS6VLrK91dU/SDmogeRvJlnwSWHlIEJVTifEmNpDPLA=="
11 | },
12 | "@koopjs/logger": {
13 | "version": "2.0.4",
14 | "resolved": "https://registry.npmjs.org/@koopjs/logger/-/logger-2.0.4.tgz",
15 | "integrity": "sha512-jF14sMYNGx0ko8SGcGCwh+RAH/m0IA0Pv3C3PGG6cT7hprNkGMbtL2d94xyudkKWR+ssBKtCV0INVi+s3MO8Rg==",
16 | "requires": {
17 | "winston": "^2.3.1"
18 | }
19 | },
20 | "@koopjs/provider-file-geojson": {
21 | "version": "1.0.1",
22 | "resolved": "https://registry.npmjs.org/@koopjs/provider-file-geojson/-/provider-file-geojson-1.0.1.tgz",
23 | "integrity": "sha512-hBIVPwpSYWhhrD9MKC4KIgicfise25Z9/qqJNZ3bZxIeEvZwuNQ3z4aIxOhE2bWECR7k+6UKni6bttHmnCsotg==",
24 | "requires": {
25 | "koop": "^3.7.0"
26 | }
27 | },
28 | "@mapbox/geojsonhint": {
29 | "version": "3.0.0",
30 | "resolved": "https://registry.npmjs.org/@mapbox/geojsonhint/-/geojsonhint-3.0.0.tgz",
31 | "integrity": "sha512-zHcyh1rDHYnEBd6NvOWoeHLuvazlDkIjvz9MJx4cKwcKTlfrqgxVnTv1QLnVJnsSU5neJnhQJcgscR/Zl4uYgw==",
32 | "requires": {
33 | "concat-stream": "^1.6.1",
34 | "jsonlint-lines": "1.7.1",
35 | "minimist": "1.2.0",
36 | "vfile": "^4.0.0",
37 | "vfile-reporter": "^5.1.1"
38 | }
39 | },
40 | "@turf/bbox-polygon": {
41 | "version": "6.0.1",
42 | "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-6.0.1.tgz",
43 | "integrity": "sha512-f6BK6GOzUNjmJeOYHklk/5LNcQMQbo51gvAM10dTM5IqzKP01KM5bgV88uOKfSZB0HRQVpaRV1tgXk2bg5cPRg==",
44 | "requires": {
45 | "@turf/helpers": "6.x"
46 | }
47 | },
48 | "@turf/centroid": {
49 | "version": "6.0.2",
50 | "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.0.2.tgz",
51 | "integrity": "sha512-auyDauOtC4eddH7GC3CHFTDu2PKhpSeKCRhwhHhXtJqn2dWCJQNIoCeJRmfXRIbzCWhWvgvQafvvhq8HNvmvWw==",
52 | "requires": {
53 | "@turf/helpers": "6.x",
54 | "@turf/meta": "6.x"
55 | }
56 | },
57 | "@turf/helpers": {
58 | "version": "6.1.4",
59 | "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz",
60 | "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g=="
61 | },
62 | "@turf/meta": {
63 | "version": "6.0.2",
64 | "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.0.2.tgz",
65 | "integrity": "sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==",
66 | "requires": {
67 | "@turf/helpers": "6.x"
68 | }
69 | },
70 | "@types/geojson": {
71 | "version": "7946.0.7",
72 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
73 | "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ=="
74 | },
75 | "@types/unist": {
76 | "version": "2.0.3",
77 | "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
78 | "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
79 | },
80 | "JSV": {
81 | "version": "4.0.2",
82 | "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
83 | "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c="
84 | },
85 | "accepts": {
86 | "version": "1.3.7",
87 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
88 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
89 | "requires": {
90 | "mime-types": "~2.1.24",
91 | "negotiator": "0.6.2"
92 | }
93 | },
94 | "acorn": {
95 | "version": "5.7.3",
96 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
97 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
98 | "dev": true
99 | },
100 | "acorn-jsx": {
101 | "version": "3.0.1",
102 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
103 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
104 | "dev": true,
105 | "requires": {
106 | "acorn": "^3.0.4"
107 | },
108 | "dependencies": {
109 | "acorn": {
110 | "version": "3.3.0",
111 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
112 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
113 | "dev": true
114 | }
115 | }
116 | },
117 | "adler-32": {
118 | "version": "1.2.0",
119 | "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz",
120 | "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
121 | "requires": {
122 | "exit-on-epipe": "~1.0.1",
123 | "printj": "~1.1.0"
124 | }
125 | },
126 | "ajv": {
127 | "version": "6.10.0",
128 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
129 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
130 | "requires": {
131 | "fast-deep-equal": "^2.0.1",
132 | "fast-json-stable-stringify": "^2.0.0",
133 | "json-schema-traverse": "^0.4.1",
134 | "uri-js": "^4.2.2"
135 | }
136 | },
137 | "ajv-keywords": {
138 | "version": "1.5.1",
139 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
140 | "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
141 | "dev": true
142 | },
143 | "alasql": {
144 | "version": "0.4.11",
145 | "resolved": "https://registry.npmjs.org/alasql/-/alasql-0.4.11.tgz",
146 | "integrity": "sha512-U1x1+NjIiG24crW34OwB3I8mpl0s0gS8xUcZ6unddLkRWaIWV/R/dqc/zTKwoE0YDwss0yI05WOYg5Psb62VRA==",
147 | "requires": {
148 | "dom-storage": "^2.0.1",
149 | "es6-promise": "^4.2.2",
150 | "lodash": "^4.17.4",
151 | "request": "^2.83.0",
152 | "xlsx": "^0.13.2",
153 | "yargs": "^5.0.0"
154 | }
155 | },
156 | "ansi-escapes": {
157 | "version": "1.4.0",
158 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
159 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
160 | "dev": true
161 | },
162 | "ansi-regex": {
163 | "version": "3.0.0",
164 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
165 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
166 | },
167 | "ansi-styles": {
168 | "version": "3.2.1",
169 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
170 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
171 | "requires": {
172 | "color-convert": "^1.9.0"
173 | }
174 | },
175 | "aproba": {
176 | "version": "1.2.0",
177 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
178 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
179 | "optional": true
180 | },
181 | "are-we-there-yet": {
182 | "version": "1.1.5",
183 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
184 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
185 | "optional": true,
186 | "requires": {
187 | "delegates": "^1.0.0",
188 | "readable-stream": "^2.0.6"
189 | }
190 | },
191 | "argparse": {
192 | "version": "1.0.10",
193 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
194 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
195 | "dev": true,
196 | "requires": {
197 | "sprintf-js": "~1.0.2"
198 | }
199 | },
200 | "array-flatten": {
201 | "version": "1.1.1",
202 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
203 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
204 | },
205 | "array.prototype.find": {
206 | "version": "2.1.0",
207 | "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
208 | "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
209 | "dev": true,
210 | "requires": {
211 | "define-properties": "^1.1.3",
212 | "es-abstract": "^1.13.0"
213 | }
214 | },
215 | "asn1": {
216 | "version": "0.2.4",
217 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
218 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
219 | "requires": {
220 | "safer-buffer": "~2.1.0"
221 | }
222 | },
223 | "assert-plus": {
224 | "version": "1.0.0",
225 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
226 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
227 | },
228 | "asynckit": {
229 | "version": "0.4.0",
230 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
231 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
232 | },
233 | "aws-sign2": {
234 | "version": "0.7.0",
235 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
236 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
237 | },
238 | "aws4": {
239 | "version": "1.8.0",
240 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
241 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
242 | },
243 | "babel-code-frame": {
244 | "version": "6.26.0",
245 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
246 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
247 | "dev": true,
248 | "requires": {
249 | "chalk": "^1.1.3",
250 | "esutils": "^2.0.2",
251 | "js-tokens": "^3.0.2"
252 | },
253 | "dependencies": {
254 | "ansi-regex": {
255 | "version": "2.1.1",
256 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
257 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
258 | "dev": true
259 | },
260 | "ansi-styles": {
261 | "version": "2.2.1",
262 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
263 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
264 | "dev": true
265 | },
266 | "chalk": {
267 | "version": "1.1.3",
268 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
269 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
270 | "dev": true,
271 | "requires": {
272 | "ansi-styles": "^2.2.1",
273 | "escape-string-regexp": "^1.0.2",
274 | "has-ansi": "^2.0.0",
275 | "strip-ansi": "^3.0.0",
276 | "supports-color": "^2.0.0"
277 | }
278 | },
279 | "strip-ansi": {
280 | "version": "3.0.1",
281 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
282 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
283 | "dev": true,
284 | "requires": {
285 | "ansi-regex": "^2.0.0"
286 | }
287 | },
288 | "supports-color": {
289 | "version": "2.0.0",
290 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
291 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
292 | "dev": true
293 | }
294 | }
295 | },
296 | "balanced-match": {
297 | "version": "1.0.0",
298 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
299 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
300 | },
301 | "bbox2extent": {
302 | "version": "1.1.1",
303 | "resolved": "https://registry.npmjs.org/bbox2extent/-/bbox2extent-1.1.1.tgz",
304 | "integrity": "sha1-NRoKCzwBGaIDn42kd2RtGuxPSGw="
305 | },
306 | "bcrypt-pbkdf": {
307 | "version": "1.0.2",
308 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
309 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
310 | "requires": {
311 | "tweetnacl": "^0.14.3"
312 | }
313 | },
314 | "bl": {
315 | "version": "1.2.2",
316 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
317 | "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
318 | "optional": true,
319 | "requires": {
320 | "readable-stream": "^2.3.5",
321 | "safe-buffer": "^5.1.1"
322 | }
323 | },
324 | "body-parser": {
325 | "version": "1.19.0",
326 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
327 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
328 | "requires": {
329 | "bytes": "3.1.0",
330 | "content-type": "~1.0.4",
331 | "debug": "2.6.9",
332 | "depd": "~1.1.2",
333 | "http-errors": "1.7.2",
334 | "iconv-lite": "0.4.24",
335 | "on-finished": "~2.3.0",
336 | "qs": "6.7.0",
337 | "raw-body": "2.4.0",
338 | "type-is": "~1.6.17"
339 | },
340 | "dependencies": {
341 | "qs": {
342 | "version": "6.7.0",
343 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
344 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
345 | }
346 | }
347 | },
348 | "brace-expansion": {
349 | "version": "1.1.11",
350 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
351 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
352 | "requires": {
353 | "balanced-match": "^1.0.0",
354 | "concat-map": "0.0.1"
355 | }
356 | },
357 | "buffer-alloc": {
358 | "version": "1.2.0",
359 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
360 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
361 | "optional": true,
362 | "requires": {
363 | "buffer-alloc-unsafe": "^1.1.0",
364 | "buffer-fill": "^1.0.0"
365 | }
366 | },
367 | "buffer-alloc-unsafe": {
368 | "version": "1.1.0",
369 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
370 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
371 | "optional": true
372 | },
373 | "buffer-fill": {
374 | "version": "1.0.0",
375 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
376 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
377 | "optional": true
378 | },
379 | "buffer-from": {
380 | "version": "1.1.1",
381 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
382 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
383 | },
384 | "builtin-modules": {
385 | "version": "1.1.1",
386 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
387 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
388 | "dev": true
389 | },
390 | "bytes": {
391 | "version": "3.1.0",
392 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
393 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
394 | },
395 | "caller-path": {
396 | "version": "0.1.0",
397 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
398 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
399 | "dev": true,
400 | "requires": {
401 | "callsites": "^0.2.0"
402 | }
403 | },
404 | "callsites": {
405 | "version": "0.2.0",
406 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
407 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
408 | "dev": true
409 | },
410 | "camelcase": {
411 | "version": "3.0.0",
412 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
413 | "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
414 | },
415 | "caseless": {
416 | "version": "0.12.0",
417 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
418 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
419 | },
420 | "cfb": {
421 | "version": "1.0.8",
422 | "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.0.8.tgz",
423 | "integrity": "sha1-d/ITST1pfXVP2cD1UR6rWtctAs8=",
424 | "requires": {
425 | "commander": "^2.14.1",
426 | "printj": "~1.1.2"
427 | }
428 | },
429 | "chalk": {
430 | "version": "2.4.2",
431 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
432 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
433 | "requires": {
434 | "ansi-styles": "^3.2.1",
435 | "escape-string-regexp": "^1.0.5",
436 | "supports-color": "^5.3.0"
437 | }
438 | },
439 | "chownr": {
440 | "version": "1.1.1",
441 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
442 | "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
443 | "optional": true
444 | },
445 | "chroma-js": {
446 | "version": "2.0.4",
447 | "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.0.4.tgz",
448 | "integrity": "sha512-gk71qOrSdBTLbsd0DIUO3QjZL8tTvMwpG1EoXYScy7rI4rcO4EyYH6zGuvCgUDumKumqg0pt6Ua+vWnMJsTYhw=="
449 | },
450 | "circular-json": {
451 | "version": "0.3.3",
452 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
453 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
454 | "dev": true
455 | },
456 | "classybrew": {
457 | "version": "0.0.3",
458 | "resolved": "https://registry.npmjs.org/classybrew/-/classybrew-0.0.3.tgz",
459 | "integrity": "sha1-fbkd9W3XCF8IZI/YL4PU7wMExzs="
460 | },
461 | "cli-cursor": {
462 | "version": "1.0.2",
463 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
464 | "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
465 | "dev": true,
466 | "requires": {
467 | "restore-cursor": "^1.0.1"
468 | }
469 | },
470 | "cli-width": {
471 | "version": "2.2.0",
472 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
473 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
474 | "dev": true
475 | },
476 | "cliui": {
477 | "version": "3.2.0",
478 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
479 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
480 | "requires": {
481 | "string-width": "^1.0.1",
482 | "strip-ansi": "^3.0.1",
483 | "wrap-ansi": "^2.0.0"
484 | },
485 | "dependencies": {
486 | "ansi-regex": {
487 | "version": "2.1.1",
488 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
489 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
490 | },
491 | "is-fullwidth-code-point": {
492 | "version": "1.0.0",
493 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
494 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
495 | "requires": {
496 | "number-is-nan": "^1.0.0"
497 | }
498 | },
499 | "string-width": {
500 | "version": "1.0.2",
501 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
502 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
503 | "requires": {
504 | "code-point-at": "^1.0.0",
505 | "is-fullwidth-code-point": "^1.0.0",
506 | "strip-ansi": "^3.0.0"
507 | }
508 | },
509 | "strip-ansi": {
510 | "version": "3.0.1",
511 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
512 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
513 | "requires": {
514 | "ansi-regex": "^2.0.0"
515 | }
516 | }
517 | }
518 | },
519 | "clone": {
520 | "version": "1.0.4",
521 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
522 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
523 | "optional": true
524 | },
525 | "co": {
526 | "version": "4.6.0",
527 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
528 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
529 | "dev": true
530 | },
531 | "code-point-at": {
532 | "version": "1.1.0",
533 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
534 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
535 | },
536 | "codepage": {
537 | "version": "1.14.0",
538 | "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz",
539 | "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
540 | "requires": {
541 | "commander": "~2.14.1",
542 | "exit-on-epipe": "~1.0.1"
543 | },
544 | "dependencies": {
545 | "commander": {
546 | "version": "2.14.1",
547 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
548 | "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
549 | }
550 | }
551 | },
552 | "color-convert": {
553 | "version": "1.9.3",
554 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
555 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
556 | "requires": {
557 | "color-name": "1.1.3"
558 | }
559 | },
560 | "color-name": {
561 | "version": "1.1.3",
562 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
563 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
564 | },
565 | "colors": {
566 | "version": "1.0.3",
567 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
568 | "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
569 | },
570 | "combined-stream": {
571 | "version": "1.0.8",
572 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
573 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
574 | "requires": {
575 | "delayed-stream": "~1.0.0"
576 | }
577 | },
578 | "commander": {
579 | "version": "2.15.1",
580 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
581 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
582 | },
583 | "compressible": {
584 | "version": "2.0.17",
585 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
586 | "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
587 | "requires": {
588 | "mime-db": ">= 1.40.0 < 2"
589 | }
590 | },
591 | "compression": {
592 | "version": "1.7.4",
593 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
594 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
595 | "requires": {
596 | "accepts": "~1.3.5",
597 | "bytes": "3.0.0",
598 | "compressible": "~2.0.16",
599 | "debug": "2.6.9",
600 | "on-headers": "~1.0.2",
601 | "safe-buffer": "5.1.2",
602 | "vary": "~1.1.2"
603 | },
604 | "dependencies": {
605 | "bytes": {
606 | "version": "3.0.0",
607 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
608 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
609 | }
610 | }
611 | },
612 | "concat-map": {
613 | "version": "0.0.1",
614 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
615 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
616 | },
617 | "concat-stream": {
618 | "version": "1.6.2",
619 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
620 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
621 | "requires": {
622 | "buffer-from": "^1.0.0",
623 | "inherits": "^2.0.3",
624 | "readable-stream": "^2.2.2",
625 | "typedarray": "^0.0.6"
626 | }
627 | },
628 | "config": {
629 | "version": "1.31.0",
630 | "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz",
631 | "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==",
632 | "requires": {
633 | "json5": "^1.0.1"
634 | }
635 | },
636 | "console-control-strings": {
637 | "version": "1.1.0",
638 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
639 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
640 | "optional": true
641 | },
642 | "contains-path": {
643 | "version": "0.1.0",
644 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
645 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
646 | "dev": true
647 | },
648 | "content-disposition": {
649 | "version": "0.5.3",
650 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
651 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
652 | "requires": {
653 | "safe-buffer": "5.1.2"
654 | }
655 | },
656 | "content-type": {
657 | "version": "1.0.4",
658 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
659 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
660 | },
661 | "cookie": {
662 | "version": "0.4.0",
663 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
664 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
665 | },
666 | "cookie-signature": {
667 | "version": "1.0.6",
668 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
669 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
670 | },
671 | "core-util-is": {
672 | "version": "1.0.2",
673 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
674 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
675 | },
676 | "cors": {
677 | "version": "2.8.5",
678 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
679 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
680 | "requires": {
681 | "object-assign": "^4",
682 | "vary": "^1"
683 | }
684 | },
685 | "crc-32": {
686 | "version": "1.2.0",
687 | "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz",
688 | "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==",
689 | "requires": {
690 | "exit-on-epipe": "~1.0.1",
691 | "printj": "~1.1.0"
692 | }
693 | },
694 | "cycle": {
695 | "version": "1.0.3",
696 | "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
697 | "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI="
698 | },
699 | "d": {
700 | "version": "1.0.1",
701 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
702 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
703 | "dev": true,
704 | "requires": {
705 | "es5-ext": "^0.10.50",
706 | "type": "^1.0.1"
707 | }
708 | },
709 | "dashdash": {
710 | "version": "1.14.1",
711 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
712 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
713 | "requires": {
714 | "assert-plus": "^1.0.0"
715 | }
716 | },
717 | "debug": {
718 | "version": "2.6.9",
719 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
720 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
721 | "requires": {
722 | "ms": "2.0.0"
723 | }
724 | },
725 | "debug-log": {
726 | "version": "1.0.1",
727 | "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
728 | "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
729 | "dev": true
730 | },
731 | "decamelize": {
732 | "version": "1.2.0",
733 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
734 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
735 | },
736 | "decompress-response": {
737 | "version": "3.3.0",
738 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
739 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
740 | "optional": true,
741 | "requires": {
742 | "mimic-response": "^1.0.0"
743 | }
744 | },
745 | "deep-extend": {
746 | "version": "0.6.0",
747 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
748 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
749 | "optional": true
750 | },
751 | "deep-is": {
752 | "version": "0.1.3",
753 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
754 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
755 | "dev": true
756 | },
757 | "defaults": {
758 | "version": "1.0.3",
759 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
760 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
761 | "optional": true,
762 | "requires": {
763 | "clone": "^1.0.2"
764 | }
765 | },
766 | "define-properties": {
767 | "version": "1.1.3",
768 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
769 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
770 | "dev": true,
771 | "requires": {
772 | "object-keys": "^1.0.12"
773 | }
774 | },
775 | "deglob": {
776 | "version": "2.1.1",
777 | "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz",
778 | "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
779 | "dev": true,
780 | "requires": {
781 | "find-root": "^1.0.0",
782 | "glob": "^7.0.5",
783 | "ignore": "^3.0.9",
784 | "pkg-config": "^1.1.0",
785 | "run-parallel": "^1.1.2",
786 | "uniq": "^1.0.1"
787 | }
788 | },
789 | "delayed-stream": {
790 | "version": "1.0.0",
791 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
792 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
793 | },
794 | "delegates": {
795 | "version": "1.0.0",
796 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
797 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
798 | "optional": true
799 | },
800 | "depd": {
801 | "version": "1.1.2",
802 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
803 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
804 | },
805 | "destroy": {
806 | "version": "1.0.4",
807 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
808 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
809 | },
810 | "detect-libc": {
811 | "version": "1.0.3",
812 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
813 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
814 | "optional": true
815 | },
816 | "doctrine": {
817 | "version": "2.1.0",
818 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
819 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
820 | "dev": true,
821 | "requires": {
822 | "esutils": "^2.0.2"
823 | }
824 | },
825 | "dom-storage": {
826 | "version": "2.1.0",
827 | "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
828 | "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
829 | },
830 | "easy-table": {
831 | "version": "1.1.1",
832 | "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz",
833 | "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==",
834 | "requires": {
835 | "ansi-regex": "^3.0.0",
836 | "wcwidth": ">=1.0.1"
837 | }
838 | },
839 | "ecc-jsbn": {
840 | "version": "0.1.2",
841 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
842 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
843 | "requires": {
844 | "jsbn": "~0.1.0",
845 | "safer-buffer": "^2.1.0"
846 | }
847 | },
848 | "ee-first": {
849 | "version": "1.1.1",
850 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
851 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
852 | },
853 | "ejs": {
854 | "version": "2.6.2",
855 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz",
856 | "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q=="
857 | },
858 | "encodeurl": {
859 | "version": "1.0.2",
860 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
861 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
862 | },
863 | "end-of-stream": {
864 | "version": "1.4.1",
865 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
866 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
867 | "optional": true,
868 | "requires": {
869 | "once": "^1.4.0"
870 | }
871 | },
872 | "error-ex": {
873 | "version": "1.3.2",
874 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
875 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
876 | "requires": {
877 | "is-arrayish": "^0.2.1"
878 | }
879 | },
880 | "es-abstract": {
881 | "version": "1.13.0",
882 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
883 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
884 | "dev": true,
885 | "requires": {
886 | "es-to-primitive": "^1.2.0",
887 | "function-bind": "^1.1.1",
888 | "has": "^1.0.3",
889 | "is-callable": "^1.1.4",
890 | "is-regex": "^1.0.4",
891 | "object-keys": "^1.0.12"
892 | }
893 | },
894 | "es-to-primitive": {
895 | "version": "1.2.0",
896 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
897 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
898 | "dev": true,
899 | "requires": {
900 | "is-callable": "^1.1.4",
901 | "is-date-object": "^1.0.1",
902 | "is-symbol": "^1.0.2"
903 | }
904 | },
905 | "es5-ext": {
906 | "version": "0.10.50",
907 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz",
908 | "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==",
909 | "dev": true,
910 | "requires": {
911 | "es6-iterator": "~2.0.3",
912 | "es6-symbol": "~3.1.1",
913 | "next-tick": "^1.0.0"
914 | }
915 | },
916 | "es6-iterator": {
917 | "version": "2.0.3",
918 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
919 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
920 | "dev": true,
921 | "requires": {
922 | "d": "1",
923 | "es5-ext": "^0.10.35",
924 | "es6-symbol": "^3.1.1"
925 | }
926 | },
927 | "es6-map": {
928 | "version": "0.1.5",
929 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
930 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
931 | "dev": true,
932 | "requires": {
933 | "d": "1",
934 | "es5-ext": "~0.10.14",
935 | "es6-iterator": "~2.0.1",
936 | "es6-set": "~0.1.5",
937 | "es6-symbol": "~3.1.1",
938 | "event-emitter": "~0.3.5"
939 | }
940 | },
941 | "es6-promise": {
942 | "version": "4.2.8",
943 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
944 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
945 | },
946 | "es6-set": {
947 | "version": "0.1.5",
948 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
949 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
950 | "dev": true,
951 | "requires": {
952 | "d": "1",
953 | "es5-ext": "~0.10.14",
954 | "es6-iterator": "~2.0.1",
955 | "es6-symbol": "3.1.1",
956 | "event-emitter": "~0.3.5"
957 | }
958 | },
959 | "es6-symbol": {
960 | "version": "3.1.1",
961 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
962 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
963 | "dev": true,
964 | "requires": {
965 | "d": "1",
966 | "es5-ext": "~0.10.14"
967 | }
968 | },
969 | "es6-weak-map": {
970 | "version": "2.0.3",
971 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
972 | "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
973 | "dev": true,
974 | "requires": {
975 | "d": "1",
976 | "es5-ext": "^0.10.46",
977 | "es6-iterator": "^2.0.3",
978 | "es6-symbol": "^3.1.1"
979 | }
980 | },
981 | "escape-html": {
982 | "version": "1.0.3",
983 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
984 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
985 | },
986 | "escape-string-regexp": {
987 | "version": "1.0.5",
988 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
989 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
990 | },
991 | "escope": {
992 | "version": "3.6.0",
993 | "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
994 | "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
995 | "dev": true,
996 | "requires": {
997 | "es6-map": "^0.1.3",
998 | "es6-weak-map": "^2.0.1",
999 | "esrecurse": "^4.1.0",
1000 | "estraverse": "^4.1.1"
1001 | }
1002 | },
1003 | "eslint": {
1004 | "version": "3.19.0",
1005 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
1006 | "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
1007 | "dev": true,
1008 | "requires": {
1009 | "babel-code-frame": "^6.16.0",
1010 | "chalk": "^1.1.3",
1011 | "concat-stream": "^1.5.2",
1012 | "debug": "^2.1.1",
1013 | "doctrine": "^2.0.0",
1014 | "escope": "^3.6.0",
1015 | "espree": "^3.4.0",
1016 | "esquery": "^1.0.0",
1017 | "estraverse": "^4.2.0",
1018 | "esutils": "^2.0.2",
1019 | "file-entry-cache": "^2.0.0",
1020 | "glob": "^7.0.3",
1021 | "globals": "^9.14.0",
1022 | "ignore": "^3.2.0",
1023 | "imurmurhash": "^0.1.4",
1024 | "inquirer": "^0.12.0",
1025 | "is-my-json-valid": "^2.10.0",
1026 | "is-resolvable": "^1.0.0",
1027 | "js-yaml": "^3.5.1",
1028 | "json-stable-stringify": "^1.0.0",
1029 | "levn": "^0.3.0",
1030 | "lodash": "^4.0.0",
1031 | "mkdirp": "^0.5.0",
1032 | "natural-compare": "^1.4.0",
1033 | "optionator": "^0.8.2",
1034 | "path-is-inside": "^1.0.1",
1035 | "pluralize": "^1.2.1",
1036 | "progress": "^1.1.8",
1037 | "require-uncached": "^1.0.2",
1038 | "shelljs": "^0.7.5",
1039 | "strip-bom": "^3.0.0",
1040 | "strip-json-comments": "~2.0.1",
1041 | "table": "^3.7.8",
1042 | "text-table": "~0.2.0",
1043 | "user-home": "^2.0.0"
1044 | },
1045 | "dependencies": {
1046 | "ansi-regex": {
1047 | "version": "2.1.1",
1048 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1049 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
1050 | "dev": true
1051 | },
1052 | "ansi-styles": {
1053 | "version": "2.2.1",
1054 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
1055 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
1056 | "dev": true
1057 | },
1058 | "chalk": {
1059 | "version": "1.1.3",
1060 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1061 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
1062 | "dev": true,
1063 | "requires": {
1064 | "ansi-styles": "^2.2.1",
1065 | "escape-string-regexp": "^1.0.2",
1066 | "has-ansi": "^2.0.0",
1067 | "strip-ansi": "^3.0.0",
1068 | "supports-color": "^2.0.0"
1069 | }
1070 | },
1071 | "strip-ansi": {
1072 | "version": "3.0.1",
1073 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1074 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1075 | "dev": true,
1076 | "requires": {
1077 | "ansi-regex": "^2.0.0"
1078 | }
1079 | },
1080 | "strip-bom": {
1081 | "version": "3.0.0",
1082 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
1083 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
1084 | "dev": true
1085 | },
1086 | "supports-color": {
1087 | "version": "2.0.0",
1088 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1089 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1090 | "dev": true
1091 | }
1092 | }
1093 | },
1094 | "eslint-config-standard": {
1095 | "version": "10.2.1",
1096 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz",
1097 | "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=",
1098 | "dev": true
1099 | },
1100 | "eslint-config-standard-jsx": {
1101 | "version": "4.0.2",
1102 | "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz",
1103 | "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==",
1104 | "dev": true
1105 | },
1106 | "eslint-import-resolver-node": {
1107 | "version": "0.2.3",
1108 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz",
1109 | "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=",
1110 | "dev": true,
1111 | "requires": {
1112 | "debug": "^2.2.0",
1113 | "object-assign": "^4.0.1",
1114 | "resolve": "^1.1.6"
1115 | }
1116 | },
1117 | "eslint-module-utils": {
1118 | "version": "2.4.0",
1119 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz",
1120 | "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==",
1121 | "dev": true,
1122 | "requires": {
1123 | "debug": "^2.6.8",
1124 | "pkg-dir": "^2.0.0"
1125 | }
1126 | },
1127 | "eslint-plugin-import": {
1128 | "version": "2.2.0",
1129 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz",
1130 | "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=",
1131 | "dev": true,
1132 | "requires": {
1133 | "builtin-modules": "^1.1.1",
1134 | "contains-path": "^0.1.0",
1135 | "debug": "^2.2.0",
1136 | "doctrine": "1.5.0",
1137 | "eslint-import-resolver-node": "^0.2.0",
1138 | "eslint-module-utils": "^2.0.0",
1139 | "has": "^1.0.1",
1140 | "lodash.cond": "^4.3.0",
1141 | "minimatch": "^3.0.3",
1142 | "pkg-up": "^1.0.0"
1143 | },
1144 | "dependencies": {
1145 | "doctrine": {
1146 | "version": "1.5.0",
1147 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
1148 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
1149 | "dev": true,
1150 | "requires": {
1151 | "esutils": "^2.0.2",
1152 | "isarray": "^1.0.0"
1153 | }
1154 | }
1155 | }
1156 | },
1157 | "eslint-plugin-node": {
1158 | "version": "4.2.3",
1159 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz",
1160 | "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==",
1161 | "dev": true,
1162 | "requires": {
1163 | "ignore": "^3.0.11",
1164 | "minimatch": "^3.0.2",
1165 | "object-assign": "^4.0.1",
1166 | "resolve": "^1.1.7",
1167 | "semver": "5.3.0"
1168 | },
1169 | "dependencies": {
1170 | "semver": {
1171 | "version": "5.3.0",
1172 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
1173 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
1174 | "dev": true
1175 | }
1176 | }
1177 | },
1178 | "eslint-plugin-promise": {
1179 | "version": "3.5.0",
1180 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz",
1181 | "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=",
1182 | "dev": true
1183 | },
1184 | "eslint-plugin-react": {
1185 | "version": "6.10.3",
1186 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz",
1187 | "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=",
1188 | "dev": true,
1189 | "requires": {
1190 | "array.prototype.find": "^2.0.1",
1191 | "doctrine": "^1.2.2",
1192 | "has": "^1.0.1",
1193 | "jsx-ast-utils": "^1.3.4",
1194 | "object.assign": "^4.0.4"
1195 | },
1196 | "dependencies": {
1197 | "doctrine": {
1198 | "version": "1.5.0",
1199 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
1200 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
1201 | "dev": true,
1202 | "requires": {
1203 | "esutils": "^2.0.2",
1204 | "isarray": "^1.0.0"
1205 | }
1206 | }
1207 | }
1208 | },
1209 | "eslint-plugin-standard": {
1210 | "version": "3.0.1",
1211 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
1212 | "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
1213 | "dev": true
1214 | },
1215 | "espree": {
1216 | "version": "3.5.4",
1217 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
1218 | "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
1219 | "dev": true,
1220 | "requires": {
1221 | "acorn": "^5.5.0",
1222 | "acorn-jsx": "^3.0.0"
1223 | }
1224 | },
1225 | "esprima": {
1226 | "version": "4.0.1",
1227 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
1228 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
1229 | "dev": true
1230 | },
1231 | "esquery": {
1232 | "version": "1.0.1",
1233 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
1234 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
1235 | "dev": true,
1236 | "requires": {
1237 | "estraverse": "^4.0.0"
1238 | }
1239 | },
1240 | "esrecurse": {
1241 | "version": "4.2.1",
1242 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
1243 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
1244 | "dev": true,
1245 | "requires": {
1246 | "estraverse": "^4.1.0"
1247 | }
1248 | },
1249 | "esri-extent": {
1250 | "version": "1.1.3",
1251 | "resolved": "https://registry.npmjs.org/esri-extent/-/esri-extent-1.1.3.tgz",
1252 | "integrity": "sha512-NimS0bZmeLwXOVwZ56JPx5gnVZ3pDW7FzqkbgXkBXA4Vy9jKiM8vIOd6uCjzZbg/hbN4qJvsKIelSfOp2EhSXg==",
1253 | "requires": {
1254 | "@types/geojson": "^7946.0.0",
1255 | "bbox2extent": "^1.0.1"
1256 | }
1257 | },
1258 | "estraverse": {
1259 | "version": "4.2.0",
1260 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
1261 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
1262 | "dev": true
1263 | },
1264 | "esutils": {
1265 | "version": "2.0.2",
1266 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
1267 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
1268 | "dev": true
1269 | },
1270 | "etag": {
1271 | "version": "1.8.1",
1272 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1273 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
1274 | },
1275 | "event-emitter": {
1276 | "version": "0.3.5",
1277 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
1278 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
1279 | "dev": true,
1280 | "requires": {
1281 | "d": "1",
1282 | "es5-ext": "~0.10.14"
1283 | }
1284 | },
1285 | "exit-hook": {
1286 | "version": "1.1.1",
1287 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
1288 | "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
1289 | "dev": true
1290 | },
1291 | "exit-on-epipe": {
1292 | "version": "1.0.1",
1293 | "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
1294 | "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
1295 | },
1296 | "expand-template": {
1297 | "version": "1.1.1",
1298 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
1299 | "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==",
1300 | "optional": true
1301 | },
1302 | "express": {
1303 | "version": "4.17.1",
1304 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
1305 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
1306 | "requires": {
1307 | "accepts": "~1.3.7",
1308 | "array-flatten": "1.1.1",
1309 | "body-parser": "1.19.0",
1310 | "content-disposition": "0.5.3",
1311 | "content-type": "~1.0.4",
1312 | "cookie": "0.4.0",
1313 | "cookie-signature": "1.0.6",
1314 | "debug": "2.6.9",
1315 | "depd": "~1.1.2",
1316 | "encodeurl": "~1.0.2",
1317 | "escape-html": "~1.0.3",
1318 | "etag": "~1.8.1",
1319 | "finalhandler": "~1.1.2",
1320 | "fresh": "0.5.2",
1321 | "merge-descriptors": "1.0.1",
1322 | "methods": "~1.1.2",
1323 | "on-finished": "~2.3.0",
1324 | "parseurl": "~1.3.3",
1325 | "path-to-regexp": "0.1.7",
1326 | "proxy-addr": "~2.0.5",
1327 | "qs": "6.7.0",
1328 | "range-parser": "~1.2.1",
1329 | "safe-buffer": "5.1.2",
1330 | "send": "0.17.1",
1331 | "serve-static": "1.14.1",
1332 | "setprototypeof": "1.1.1",
1333 | "statuses": "~1.5.0",
1334 | "type-is": "~1.6.18",
1335 | "utils-merge": "1.0.1",
1336 | "vary": "~1.1.2"
1337 | },
1338 | "dependencies": {
1339 | "qs": {
1340 | "version": "6.7.0",
1341 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1342 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1343 | }
1344 | }
1345 | },
1346 | "extend": {
1347 | "version": "3.0.2",
1348 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1349 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
1350 | },
1351 | "extsprintf": {
1352 | "version": "1.3.0",
1353 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
1354 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
1355 | },
1356 | "eyes": {
1357 | "version": "0.1.8",
1358 | "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
1359 | "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
1360 | },
1361 | "farmhash": {
1362 | "version": "2.1.0",
1363 | "resolved": "https://registry.npmjs.org/farmhash/-/farmhash-2.1.0.tgz",
1364 | "integrity": "sha512-X2cdtc4AxiH3tVdJ/h87dOU22Ojt3JYruw3L0gAp/SJzHqUUoxMcYzX7wnVzSUeEj6CwzOwcY+v6vdfP0KVx2g==",
1365 | "optional": true,
1366 | "requires": {
1367 | "nan": "^2.10.0",
1368 | "prebuild-install": "^2.5.3"
1369 | }
1370 | },
1371 | "fast-deep-equal": {
1372 | "version": "2.0.1",
1373 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
1374 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
1375 | },
1376 | "fast-json-stable-stringify": {
1377 | "version": "2.0.0",
1378 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
1379 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
1380 | },
1381 | "fast-levenshtein": {
1382 | "version": "2.0.6",
1383 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1384 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
1385 | "dev": true
1386 | },
1387 | "featureserver": {
1388 | "version": "2.18.0",
1389 | "resolved": "https://registry.npmjs.org/featureserver/-/featureserver-2.18.0.tgz",
1390 | "integrity": "sha512-Ab/IGILX3Y3/XTF33QnvlBv3m1ln/o7GejbNs7+hCnfhQ5XETeASyljJrln+kMBTSY8rX7cQGy5scK3GiqtpIQ==",
1391 | "requires": {
1392 | "@mapbox/geojsonhint": "^3.0.0",
1393 | "chalk": "^2.4.2",
1394 | "chroma-js": "^2.0.0",
1395 | "classybrew": "0.0.3",
1396 | "esri-extent": "^1.1.1",
1397 | "lodash": "^4.12.0",
1398 | "moment": "^2.13.0",
1399 | "terraformer-arcgis-parser": "^1.0.4",
1400 | "winnow": "^1.16.5"
1401 | }
1402 | },
1403 | "figures": {
1404 | "version": "1.7.0",
1405 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
1406 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
1407 | "dev": true,
1408 | "requires": {
1409 | "escape-string-regexp": "^1.0.5",
1410 | "object-assign": "^4.1.0"
1411 | }
1412 | },
1413 | "file-entry-cache": {
1414 | "version": "2.0.0",
1415 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
1416 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
1417 | "dev": true,
1418 | "requires": {
1419 | "flat-cache": "^1.2.1",
1420 | "object-assign": "^4.0.1"
1421 | }
1422 | },
1423 | "finalhandler": {
1424 | "version": "1.1.2",
1425 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
1426 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
1427 | "requires": {
1428 | "debug": "2.6.9",
1429 | "encodeurl": "~1.0.2",
1430 | "escape-html": "~1.0.3",
1431 | "on-finished": "~2.3.0",
1432 | "parseurl": "~1.3.3",
1433 | "statuses": "~1.5.0",
1434 | "unpipe": "~1.0.0"
1435 | }
1436 | },
1437 | "find-root": {
1438 | "version": "1.1.0",
1439 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
1440 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
1441 | "dev": true
1442 | },
1443 | "find-up": {
1444 | "version": "1.1.2",
1445 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
1446 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
1447 | "requires": {
1448 | "path-exists": "^2.0.0",
1449 | "pinkie-promise": "^2.0.0"
1450 | }
1451 | },
1452 | "flat-cache": {
1453 | "version": "1.3.4",
1454 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
1455 | "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
1456 | "dev": true,
1457 | "requires": {
1458 | "circular-json": "^0.3.1",
1459 | "graceful-fs": "^4.1.2",
1460 | "rimraf": "~2.6.2",
1461 | "write": "^0.2.1"
1462 | }
1463 | },
1464 | "flora-errors": {
1465 | "version": "0.9.1",
1466 | "resolved": "https://registry.npmjs.org/flora-errors/-/flora-errors-0.9.1.tgz",
1467 | "integrity": "sha512-rjZGrqlBFox0g0FQbRyYSntkPW1HZhSqBKEndJ9Rc/R1kWURX/9m0vz5ue6Cj0xC/tnGMK5KpbP07m79uyooww==",
1468 | "requires": {
1469 | "has": "^1.0.1"
1470 | }
1471 | },
1472 | "flora-sql-parser": {
1473 | "version": "0.9.3",
1474 | "resolved": "https://registry.npmjs.org/flora-sql-parser/-/flora-sql-parser-0.9.3.tgz",
1475 | "integrity": "sha512-FoEw89tHxKkftlH9aP7pdlJqWHVcteWM4KALOJ8Qrx5dHqNSNwgKUA99xi4ZTZCAXKfqwZ3mw9dYgAMs5/3Eeg==",
1476 | "requires": {
1477 | "flora-errors": "^0.9.1",
1478 | "has": "^1.0.3"
1479 | }
1480 | },
1481 | "forever-agent": {
1482 | "version": "0.6.1",
1483 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
1484 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
1485 | },
1486 | "form-data": {
1487 | "version": "2.3.3",
1488 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
1489 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
1490 | "requires": {
1491 | "asynckit": "^0.4.0",
1492 | "combined-stream": "^1.0.6",
1493 | "mime-types": "^2.1.12"
1494 | }
1495 | },
1496 | "forwarded": {
1497 | "version": "0.1.2",
1498 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
1499 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
1500 | },
1501 | "frac": {
1502 | "version": "1.1.2",
1503 | "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz",
1504 | "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
1505 | },
1506 | "fresh": {
1507 | "version": "0.5.2",
1508 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1509 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
1510 | },
1511 | "fs-constants": {
1512 | "version": "1.0.0",
1513 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
1514 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
1515 | "optional": true
1516 | },
1517 | "fs.realpath": {
1518 | "version": "1.0.0",
1519 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1520 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
1521 | },
1522 | "function-bind": {
1523 | "version": "1.1.1",
1524 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1525 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
1526 | },
1527 | "gauge": {
1528 | "version": "2.7.4",
1529 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
1530 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
1531 | "optional": true,
1532 | "requires": {
1533 | "aproba": "^1.0.3",
1534 | "console-control-strings": "^1.0.0",
1535 | "has-unicode": "^2.0.0",
1536 | "object-assign": "^4.1.0",
1537 | "signal-exit": "^3.0.0",
1538 | "string-width": "^1.0.1",
1539 | "strip-ansi": "^3.0.1",
1540 | "wide-align": "^1.1.0"
1541 | },
1542 | "dependencies": {
1543 | "ansi-regex": {
1544 | "version": "2.1.1",
1545 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1546 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
1547 | "optional": true
1548 | },
1549 | "is-fullwidth-code-point": {
1550 | "version": "1.0.0",
1551 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
1552 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
1553 | "optional": true,
1554 | "requires": {
1555 | "number-is-nan": "^1.0.0"
1556 | }
1557 | },
1558 | "string-width": {
1559 | "version": "1.0.2",
1560 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1561 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1562 | "optional": true,
1563 | "requires": {
1564 | "code-point-at": "^1.0.0",
1565 | "is-fullwidth-code-point": "^1.0.0",
1566 | "strip-ansi": "^3.0.0"
1567 | }
1568 | },
1569 | "strip-ansi": {
1570 | "version": "3.0.1",
1571 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1572 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1573 | "optional": true,
1574 | "requires": {
1575 | "ansi-regex": "^2.0.0"
1576 | }
1577 | }
1578 | }
1579 | },
1580 | "generate-function": {
1581 | "version": "2.3.1",
1582 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
1583 | "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
1584 | "dev": true,
1585 | "requires": {
1586 | "is-property": "^1.0.2"
1587 | }
1588 | },
1589 | "generate-object-property": {
1590 | "version": "1.2.0",
1591 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
1592 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
1593 | "dev": true,
1594 | "requires": {
1595 | "is-property": "^1.0.0"
1596 | }
1597 | },
1598 | "get-caller-file": {
1599 | "version": "1.0.3",
1600 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
1601 | "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
1602 | },
1603 | "get-stdin": {
1604 | "version": "5.0.1",
1605 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
1606 | "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
1607 | "dev": true
1608 | },
1609 | "getpass": {
1610 | "version": "0.1.7",
1611 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
1612 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
1613 | "requires": {
1614 | "assert-plus": "^1.0.0"
1615 | }
1616 | },
1617 | "github-from-package": {
1618 | "version": "0.0.0",
1619 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
1620 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
1621 | "optional": true
1622 | },
1623 | "glob": {
1624 | "version": "7.1.4",
1625 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
1626 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
1627 | "requires": {
1628 | "fs.realpath": "^1.0.0",
1629 | "inflight": "^1.0.4",
1630 | "inherits": "2",
1631 | "minimatch": "^3.0.4",
1632 | "once": "^1.3.0",
1633 | "path-is-absolute": "^1.0.0"
1634 | }
1635 | },
1636 | "globals": {
1637 | "version": "9.18.0",
1638 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
1639 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
1640 | "dev": true
1641 | },
1642 | "graceful-fs": {
1643 | "version": "4.1.15",
1644 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
1645 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA=="
1646 | },
1647 | "har-schema": {
1648 | "version": "2.0.0",
1649 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1650 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
1651 | },
1652 | "har-validator": {
1653 | "version": "5.1.3",
1654 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
1655 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
1656 | "requires": {
1657 | "ajv": "^6.5.5",
1658 | "har-schema": "^2.0.0"
1659 | }
1660 | },
1661 | "has": {
1662 | "version": "1.0.3",
1663 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1664 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1665 | "requires": {
1666 | "function-bind": "^1.1.1"
1667 | }
1668 | },
1669 | "has-ansi": {
1670 | "version": "2.0.0",
1671 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
1672 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
1673 | "dev": true,
1674 | "requires": {
1675 | "ansi-regex": "^2.0.0"
1676 | },
1677 | "dependencies": {
1678 | "ansi-regex": {
1679 | "version": "2.1.1",
1680 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1681 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
1682 | "dev": true
1683 | }
1684 | }
1685 | },
1686 | "has-color": {
1687 | "version": "0.1.7",
1688 | "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
1689 | "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8="
1690 | },
1691 | "has-flag": {
1692 | "version": "3.0.0",
1693 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1694 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
1695 | },
1696 | "has-symbols": {
1697 | "version": "1.0.0",
1698 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
1699 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
1700 | "dev": true
1701 | },
1702 | "has-unicode": {
1703 | "version": "2.0.1",
1704 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
1705 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
1706 | "optional": true
1707 | },
1708 | "highland": {
1709 | "version": "3.0.0-beta.9",
1710 | "resolved": "https://registry.npmjs.org/highland/-/highland-3.0.0-beta.9.tgz",
1711 | "integrity": "sha512-623vry4wR8hSKY+ne+XHLndi7yw4vUPncCkkPiSAmv/EMDA4qZQoSy4EdV1tRiYbVnvwy04P12TyxQ9clujn5g=="
1712 | },
1713 | "hosted-git-info": {
1714 | "version": "2.7.1",
1715 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
1716 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
1717 | },
1718 | "http-errors": {
1719 | "version": "1.7.2",
1720 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1721 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1722 | "requires": {
1723 | "depd": "~1.1.2",
1724 | "inherits": "2.0.3",
1725 | "setprototypeof": "1.1.1",
1726 | "statuses": ">= 1.5.0 < 2",
1727 | "toidentifier": "1.0.0"
1728 | }
1729 | },
1730 | "http-signature": {
1731 | "version": "1.2.0",
1732 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1733 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1734 | "requires": {
1735 | "assert-plus": "^1.0.0",
1736 | "jsprim": "^1.2.2",
1737 | "sshpk": "^1.7.0"
1738 | }
1739 | },
1740 | "iconv-lite": {
1741 | "version": "0.4.24",
1742 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1743 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1744 | "requires": {
1745 | "safer-buffer": ">= 2.1.2 < 3"
1746 | }
1747 | },
1748 | "ignore": {
1749 | "version": "3.3.10",
1750 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
1751 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
1752 | "dev": true
1753 | },
1754 | "imurmurhash": {
1755 | "version": "0.1.4",
1756 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1757 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1758 | "dev": true
1759 | },
1760 | "inflight": {
1761 | "version": "1.0.6",
1762 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1763 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1764 | "requires": {
1765 | "once": "^1.3.0",
1766 | "wrappy": "1"
1767 | }
1768 | },
1769 | "inherits": {
1770 | "version": "2.0.3",
1771 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1772 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1773 | },
1774 | "ini": {
1775 | "version": "1.3.5",
1776 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
1777 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
1778 | "optional": true
1779 | },
1780 | "inquirer": {
1781 | "version": "0.12.0",
1782 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
1783 | "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
1784 | "dev": true,
1785 | "requires": {
1786 | "ansi-escapes": "^1.1.0",
1787 | "ansi-regex": "^2.0.0",
1788 | "chalk": "^1.0.0",
1789 | "cli-cursor": "^1.0.1",
1790 | "cli-width": "^2.0.0",
1791 | "figures": "^1.3.5",
1792 | "lodash": "^4.3.0",
1793 | "readline2": "^1.0.1",
1794 | "run-async": "^0.1.0",
1795 | "rx-lite": "^3.1.2",
1796 | "string-width": "^1.0.1",
1797 | "strip-ansi": "^3.0.0",
1798 | "through": "^2.3.6"
1799 | },
1800 | "dependencies": {
1801 | "ansi-regex": {
1802 | "version": "2.1.1",
1803 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1804 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
1805 | "dev": true
1806 | },
1807 | "ansi-styles": {
1808 | "version": "2.2.1",
1809 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
1810 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
1811 | "dev": true
1812 | },
1813 | "chalk": {
1814 | "version": "1.1.3",
1815 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1816 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
1817 | "dev": true,
1818 | "requires": {
1819 | "ansi-styles": "^2.2.1",
1820 | "escape-string-regexp": "^1.0.2",
1821 | "has-ansi": "^2.0.0",
1822 | "strip-ansi": "^3.0.0",
1823 | "supports-color": "^2.0.0"
1824 | }
1825 | },
1826 | "is-fullwidth-code-point": {
1827 | "version": "1.0.0",
1828 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
1829 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
1830 | "dev": true,
1831 | "requires": {
1832 | "number-is-nan": "^1.0.0"
1833 | }
1834 | },
1835 | "string-width": {
1836 | "version": "1.0.2",
1837 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1838 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1839 | "dev": true,
1840 | "requires": {
1841 | "code-point-at": "^1.0.0",
1842 | "is-fullwidth-code-point": "^1.0.0",
1843 | "strip-ansi": "^3.0.0"
1844 | }
1845 | },
1846 | "strip-ansi": {
1847 | "version": "3.0.1",
1848 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1849 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1850 | "dev": true,
1851 | "requires": {
1852 | "ansi-regex": "^2.0.0"
1853 | }
1854 | },
1855 | "supports-color": {
1856 | "version": "2.0.0",
1857 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1858 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1859 | "dev": true
1860 | }
1861 | }
1862 | },
1863 | "interpret": {
1864 | "version": "1.2.0",
1865 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
1866 | "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
1867 | "dev": true
1868 | },
1869 | "invert-kv": {
1870 | "version": "1.0.0",
1871 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
1872 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
1873 | },
1874 | "ipaddr.js": {
1875 | "version": "1.9.0",
1876 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
1877 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
1878 | },
1879 | "is-arrayish": {
1880 | "version": "0.2.1",
1881 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1882 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
1883 | },
1884 | "is-buffer": {
1885 | "version": "2.0.3",
1886 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
1887 | "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
1888 | },
1889 | "is-callable": {
1890 | "version": "1.1.4",
1891 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
1892 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
1893 | "dev": true
1894 | },
1895 | "is-date-object": {
1896 | "version": "1.0.1",
1897 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
1898 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
1899 | "dev": true
1900 | },
1901 | "is-fullwidth-code-point": {
1902 | "version": "2.0.0",
1903 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1904 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
1905 | },
1906 | "is-my-ip-valid": {
1907 | "version": "1.0.0",
1908 | "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
1909 | "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
1910 | "dev": true
1911 | },
1912 | "is-my-json-valid": {
1913 | "version": "2.20.0",
1914 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz",
1915 | "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==",
1916 | "dev": true,
1917 | "requires": {
1918 | "generate-function": "^2.0.0",
1919 | "generate-object-property": "^1.1.0",
1920 | "is-my-ip-valid": "^1.0.0",
1921 | "jsonpointer": "^4.0.0",
1922 | "xtend": "^4.0.0"
1923 | }
1924 | },
1925 | "is-property": {
1926 | "version": "1.0.2",
1927 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
1928 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
1929 | "dev": true
1930 | },
1931 | "is-regex": {
1932 | "version": "1.0.4",
1933 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
1934 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
1935 | "dev": true,
1936 | "requires": {
1937 | "has": "^1.0.1"
1938 | }
1939 | },
1940 | "is-resolvable": {
1941 | "version": "1.1.0",
1942 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
1943 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
1944 | "dev": true
1945 | },
1946 | "is-symbol": {
1947 | "version": "1.0.2",
1948 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
1949 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
1950 | "dev": true,
1951 | "requires": {
1952 | "has-symbols": "^1.0.0"
1953 | }
1954 | },
1955 | "is-typedarray": {
1956 | "version": "1.0.0",
1957 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1958 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
1959 | },
1960 | "is-utf8": {
1961 | "version": "0.2.1",
1962 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
1963 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
1964 | },
1965 | "isarray": {
1966 | "version": "1.0.0",
1967 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1968 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1969 | },
1970 | "isstream": {
1971 | "version": "0.1.2",
1972 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1973 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
1974 | },
1975 | "js-tokens": {
1976 | "version": "3.0.2",
1977 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
1978 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
1979 | "dev": true
1980 | },
1981 | "js-yaml": {
1982 | "version": "3.13.1",
1983 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
1984 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
1985 | "dev": true,
1986 | "requires": {
1987 | "argparse": "^1.0.7",
1988 | "esprima": "^4.0.0"
1989 | }
1990 | },
1991 | "jsbn": {
1992 | "version": "0.1.1",
1993 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1994 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
1995 | },
1996 | "json-parse-better-errors": {
1997 | "version": "1.0.2",
1998 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1999 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
2000 | "dev": true
2001 | },
2002 | "json-schema": {
2003 | "version": "0.2.3",
2004 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
2005 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
2006 | },
2007 | "json-schema-traverse": {
2008 | "version": "0.4.1",
2009 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2010 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
2011 | },
2012 | "json-stable-stringify": {
2013 | "version": "1.0.1",
2014 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
2015 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
2016 | "dev": true,
2017 | "requires": {
2018 | "jsonify": "~0.0.0"
2019 | }
2020 | },
2021 | "json-stringify-safe": {
2022 | "version": "5.0.1",
2023 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
2024 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
2025 | },
2026 | "json5": {
2027 | "version": "1.0.1",
2028 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
2029 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
2030 | "requires": {
2031 | "minimist": "^1.2.0"
2032 | }
2033 | },
2034 | "jsonify": {
2035 | "version": "0.0.0",
2036 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
2037 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
2038 | "dev": true
2039 | },
2040 | "jsonlint-lines": {
2041 | "version": "1.7.1",
2042 | "resolved": "https://registry.npmjs.org/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz",
2043 | "integrity": "sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8=",
2044 | "requires": {
2045 | "JSV": ">= 4.0.x",
2046 | "nomnom": ">= 1.5.x"
2047 | }
2048 | },
2049 | "jsonpointer": {
2050 | "version": "4.0.1",
2051 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
2052 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
2053 | "dev": true
2054 | },
2055 | "jsprim": {
2056 | "version": "1.4.1",
2057 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
2058 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
2059 | "requires": {
2060 | "assert-plus": "1.0.0",
2061 | "extsprintf": "1.3.0",
2062 | "json-schema": "0.2.3",
2063 | "verror": "1.10.0"
2064 | }
2065 | },
2066 | "jsx-ast-utils": {
2067 | "version": "1.4.1",
2068 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
2069 | "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
2070 | "dev": true
2071 | },
2072 | "koop": {
2073 | "version": "3.12.2",
2074 | "resolved": "https://registry.npmjs.org/koop/-/koop-3.12.2.tgz",
2075 | "integrity": "sha512-MPa+dPQMYkjEHyVaL57Aw/KsLL/2F8QQx8piSeowVlm32y/WVWvrH7N2jct1S82Rd0pxcA5t884GBpwZSgEN/Q==",
2076 | "requires": {
2077 | "@koopjs/logger": "^2.0.2",
2078 | "body-parser": "^1.16.0",
2079 | "chalk": "^2.4.2",
2080 | "compression": "^1.7.4",
2081 | "config": "^3.0.0",
2082 | "cors": "^2.8.1",
2083 | "easy-table": "^1.1.1",
2084 | "ejs": "^2.3.3",
2085 | "express": "^4.14.1",
2086 | "koop-cache-memory": "^1.0.2",
2087 | "koop-localfs": "^1.1.1",
2088 | "koop-output-geoservices": "^2.0.0",
2089 | "lodash": "^4.17.10"
2090 | },
2091 | "dependencies": {
2092 | "config": {
2093 | "version": "3.1.0",
2094 | "resolved": "https://registry.npmjs.org/config/-/config-3.1.0.tgz",
2095 | "integrity": "sha512-t6oDeNQbsIWa+D/KF4959TANzjSHLv1BA/hvL8tHEA3OUSWgBXELKaONSI6nr9oanbKs0DXonjOWLcrtZ3yTAA==",
2096 | "requires": {
2097 | "json5": "^1.0.1"
2098 | }
2099 | }
2100 | }
2101 | },
2102 | "koop-cache-memory": {
2103 | "version": "1.1.0",
2104 | "resolved": "https://registry.npmjs.org/koop-cache-memory/-/koop-cache-memory-1.1.0.tgz",
2105 | "integrity": "sha1-0A7MF3a16/8YFAPD8MW+IKnwEzM=",
2106 | "requires": {
2107 | "highland": "^3.0.0-beta.2",
2108 | "lodash": "^4.17.4"
2109 | }
2110 | },
2111 | "koop-localfs": {
2112 | "version": "1.1.2",
2113 | "resolved": "https://registry.npmjs.org/koop-localfs/-/koop-localfs-1.1.2.tgz",
2114 | "integrity": "sha512-72mmTTyAKR9Rhc0ckLQW9pg/cbibbVeHNIR4dBSfqkmnkhpzAowwf79+tS7U7xdwem4iZ1jjbG6xZpBsakX5Pw==",
2115 | "requires": {
2116 | "config": "^1.20.1",
2117 | "highland": "^2.7.4",
2118 | "mkdirp": "^0.5.1",
2119 | "rimraf": "^2.5.2"
2120 | },
2121 | "dependencies": {
2122 | "highland": {
2123 | "version": "2.13.4",
2124 | "resolved": "https://registry.npmjs.org/highland/-/highland-2.13.4.tgz",
2125 | "integrity": "sha512-r+YlbnBhCTcrcVzBpzPcrvB0llVjeDWKuXSZVuNBe5WgQJtN2xGUUMZC9WzHCntNIx0rskVernxLoFJUCkmb/Q==",
2126 | "requires": {
2127 | "util-deprecate": "^1.0.2"
2128 | }
2129 | }
2130 | }
2131 | },
2132 | "koop-output-geoservices": {
2133 | "version": "2.0.0",
2134 | "resolved": "https://registry.npmjs.org/koop-output-geoservices/-/koop-output-geoservices-2.0.0.tgz",
2135 | "integrity": "sha512-Z2nHtpQrF6TV6US8QigznVLl73yn3iMhrBEfDnm4PIuUFrigSElUt0arsD5caLSAPxLaZYfhjHuEtk4r8XdqsA==",
2136 | "requires": {
2137 | "featureserver": "^2.15.0"
2138 | }
2139 | },
2140 | "lcid": {
2141 | "version": "1.0.0",
2142 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
2143 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
2144 | "requires": {
2145 | "invert-kv": "^1.0.0"
2146 | }
2147 | },
2148 | "levn": {
2149 | "version": "0.3.0",
2150 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
2151 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
2152 | "dev": true,
2153 | "requires": {
2154 | "prelude-ls": "~1.1.2",
2155 | "type-check": "~0.3.2"
2156 | }
2157 | },
2158 | "load-json-file": {
2159 | "version": "1.1.0",
2160 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
2161 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
2162 | "requires": {
2163 | "graceful-fs": "^4.1.2",
2164 | "parse-json": "^2.2.0",
2165 | "pify": "^2.0.0",
2166 | "pinkie-promise": "^2.0.0",
2167 | "strip-bom": "^2.0.0"
2168 | }
2169 | },
2170 | "locate-path": {
2171 | "version": "2.0.0",
2172 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
2173 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
2174 | "dev": true,
2175 | "requires": {
2176 | "p-locate": "^2.0.0",
2177 | "path-exists": "^3.0.0"
2178 | },
2179 | "dependencies": {
2180 | "path-exists": {
2181 | "version": "3.0.0",
2182 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
2183 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
2184 | "dev": true
2185 | }
2186 | }
2187 | },
2188 | "lodash": {
2189 | "version": "4.17.19",
2190 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
2191 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
2192 | },
2193 | "lodash.assign": {
2194 | "version": "4.2.0",
2195 | "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
2196 | "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
2197 | },
2198 | "lodash.cond": {
2199 | "version": "4.5.2",
2200 | "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
2201 | "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
2202 | "dev": true
2203 | },
2204 | "media-typer": {
2205 | "version": "0.3.0",
2206 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
2207 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
2208 | },
2209 | "merge-descriptors": {
2210 | "version": "1.0.1",
2211 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
2212 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
2213 | },
2214 | "methods": {
2215 | "version": "1.1.2",
2216 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
2217 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
2218 | },
2219 | "mgrs": {
2220 | "version": "1.0.0",
2221 | "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz",
2222 | "integrity": "sha1-+5FYjnjJACVnI5XLQLJffNatGCk="
2223 | },
2224 | "mime": {
2225 | "version": "1.6.0",
2226 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
2227 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
2228 | },
2229 | "mime-db": {
2230 | "version": "1.40.0",
2231 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
2232 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
2233 | },
2234 | "mime-types": {
2235 | "version": "2.1.24",
2236 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
2237 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
2238 | "requires": {
2239 | "mime-db": "1.40.0"
2240 | }
2241 | },
2242 | "mimic-response": {
2243 | "version": "1.0.1",
2244 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
2245 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
2246 | "optional": true
2247 | },
2248 | "minimatch": {
2249 | "version": "3.0.4",
2250 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
2251 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
2252 | "requires": {
2253 | "brace-expansion": "^1.1.7"
2254 | }
2255 | },
2256 | "minimist": {
2257 | "version": "1.2.0",
2258 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
2259 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
2260 | },
2261 | "mkdirp": {
2262 | "version": "0.5.1",
2263 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
2264 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
2265 | "requires": {
2266 | "minimist": "0.0.8"
2267 | },
2268 | "dependencies": {
2269 | "minimist": {
2270 | "version": "0.0.8",
2271 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
2272 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
2273 | }
2274 | }
2275 | },
2276 | "moment": {
2277 | "version": "2.24.0",
2278 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
2279 | "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
2280 | },
2281 | "ms": {
2282 | "version": "2.0.0",
2283 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2284 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
2285 | },
2286 | "mute-stream": {
2287 | "version": "0.0.5",
2288 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
2289 | "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
2290 | "dev": true
2291 | },
2292 | "nan": {
2293 | "version": "2.14.0",
2294 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
2295 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
2296 | "optional": true
2297 | },
2298 | "natural-compare": {
2299 | "version": "1.4.0",
2300 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2301 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
2302 | "dev": true
2303 | },
2304 | "negotiator": {
2305 | "version": "0.6.2",
2306 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
2307 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
2308 | },
2309 | "next-tick": {
2310 | "version": "1.0.0",
2311 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
2312 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
2313 | "dev": true
2314 | },
2315 | "ngeohash": {
2316 | "version": "0.6.3",
2317 | "resolved": "https://registry.npmjs.org/ngeohash/-/ngeohash-0.6.3.tgz",
2318 | "integrity": "sha512-kltF0cOxgx1AbmVzKxYZaoB0aj7mOxZeHaerEtQV0YaqnkXNq26WWqMmJ6lTqShYxVRWZ/mwvvTrNeOwdslWiw=="
2319 | },
2320 | "node-abi": {
2321 | "version": "2.9.0",
2322 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.9.0.tgz",
2323 | "integrity": "sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==",
2324 | "optional": true,
2325 | "requires": {
2326 | "semver": "^5.4.1"
2327 | }
2328 | },
2329 | "nomnom": {
2330 | "version": "1.8.1",
2331 | "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
2332 | "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
2333 | "requires": {
2334 | "chalk": "~0.4.0",
2335 | "underscore": "~1.6.0"
2336 | },
2337 | "dependencies": {
2338 | "ansi-styles": {
2339 | "version": "1.0.0",
2340 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
2341 | "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg="
2342 | },
2343 | "chalk": {
2344 | "version": "0.4.0",
2345 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
2346 | "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
2347 | "requires": {
2348 | "ansi-styles": "~1.0.0",
2349 | "has-color": "~0.1.0",
2350 | "strip-ansi": "~0.1.0"
2351 | }
2352 | }
2353 | }
2354 | },
2355 | "noop-logger": {
2356 | "version": "0.1.1",
2357 | "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
2358 | "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
2359 | "optional": true
2360 | },
2361 | "normalize-package-data": {
2362 | "version": "2.5.0",
2363 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
2364 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
2365 | "requires": {
2366 | "hosted-git-info": "^2.1.4",
2367 | "resolve": "^1.10.0",
2368 | "semver": "2 || 3 || 4 || 5",
2369 | "validate-npm-package-license": "^3.0.1"
2370 | }
2371 | },
2372 | "npmlog": {
2373 | "version": "4.1.2",
2374 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
2375 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
2376 | "optional": true,
2377 | "requires": {
2378 | "are-we-there-yet": "~1.1.2",
2379 | "console-control-strings": "~1.1.0",
2380 | "gauge": "~2.7.3",
2381 | "set-blocking": "~2.0.0"
2382 | }
2383 | },
2384 | "number-is-nan": {
2385 | "version": "1.0.1",
2386 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
2387 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
2388 | },
2389 | "oauth-sign": {
2390 | "version": "0.9.0",
2391 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
2392 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
2393 | },
2394 | "object-assign": {
2395 | "version": "4.1.1",
2396 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2397 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
2398 | },
2399 | "object-keys": {
2400 | "version": "1.1.1",
2401 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
2402 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
2403 | "dev": true
2404 | },
2405 | "object.assign": {
2406 | "version": "4.1.0",
2407 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
2408 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
2409 | "dev": true,
2410 | "requires": {
2411 | "define-properties": "^1.1.2",
2412 | "function-bind": "^1.1.1",
2413 | "has-symbols": "^1.0.0",
2414 | "object-keys": "^1.0.11"
2415 | }
2416 | },
2417 | "on-finished": {
2418 | "version": "2.3.0",
2419 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
2420 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
2421 | "requires": {
2422 | "ee-first": "1.1.1"
2423 | }
2424 | },
2425 | "on-headers": {
2426 | "version": "1.0.2",
2427 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
2428 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
2429 | },
2430 | "once": {
2431 | "version": "1.4.0",
2432 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2433 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
2434 | "requires": {
2435 | "wrappy": "1"
2436 | }
2437 | },
2438 | "onetime": {
2439 | "version": "1.1.0",
2440 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
2441 | "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
2442 | "dev": true
2443 | },
2444 | "optionator": {
2445 | "version": "0.8.2",
2446 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
2447 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
2448 | "dev": true,
2449 | "requires": {
2450 | "deep-is": "~0.1.3",
2451 | "fast-levenshtein": "~2.0.4",
2452 | "levn": "~0.3.0",
2453 | "prelude-ls": "~1.1.2",
2454 | "type-check": "~0.3.2",
2455 | "wordwrap": "~1.0.0"
2456 | }
2457 | },
2458 | "os-homedir": {
2459 | "version": "1.0.2",
2460 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
2461 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
2462 | },
2463 | "os-locale": {
2464 | "version": "1.4.0",
2465 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
2466 | "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
2467 | "requires": {
2468 | "lcid": "^1.0.0"
2469 | }
2470 | },
2471 | "p-limit": {
2472 | "version": "1.3.0",
2473 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
2474 | "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
2475 | "dev": true,
2476 | "requires": {
2477 | "p-try": "^1.0.0"
2478 | }
2479 | },
2480 | "p-locate": {
2481 | "version": "2.0.0",
2482 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
2483 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
2484 | "dev": true,
2485 | "requires": {
2486 | "p-limit": "^1.1.0"
2487 | }
2488 | },
2489 | "p-try": {
2490 | "version": "1.0.0",
2491 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
2492 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
2493 | "dev": true
2494 | },
2495 | "parse-json": {
2496 | "version": "2.2.0",
2497 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
2498 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
2499 | "requires": {
2500 | "error-ex": "^1.2.0"
2501 | }
2502 | },
2503 | "parseurl": {
2504 | "version": "1.3.3",
2505 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
2506 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
2507 | },
2508 | "path-exists": {
2509 | "version": "2.1.0",
2510 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
2511 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
2512 | "requires": {
2513 | "pinkie-promise": "^2.0.0"
2514 | }
2515 | },
2516 | "path-is-absolute": {
2517 | "version": "1.0.1",
2518 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2519 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
2520 | },
2521 | "path-is-inside": {
2522 | "version": "1.0.2",
2523 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
2524 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
2525 | "dev": true
2526 | },
2527 | "path-parse": {
2528 | "version": "1.0.6",
2529 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
2530 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
2531 | },
2532 | "path-to-regexp": {
2533 | "version": "0.1.7",
2534 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
2535 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
2536 | },
2537 | "path-type": {
2538 | "version": "1.1.0",
2539 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
2540 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
2541 | "requires": {
2542 | "graceful-fs": "^4.1.2",
2543 | "pify": "^2.0.0",
2544 | "pinkie-promise": "^2.0.0"
2545 | }
2546 | },
2547 | "performance-now": {
2548 | "version": "2.1.0",
2549 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
2550 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
2551 | },
2552 | "pify": {
2553 | "version": "2.3.0",
2554 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2555 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
2556 | },
2557 | "pinkie": {
2558 | "version": "2.0.4",
2559 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
2560 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
2561 | },
2562 | "pinkie-promise": {
2563 | "version": "2.0.1",
2564 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
2565 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
2566 | "requires": {
2567 | "pinkie": "^2.0.0"
2568 | }
2569 | },
2570 | "pkg-conf": {
2571 | "version": "2.1.0",
2572 | "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
2573 | "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
2574 | "dev": true,
2575 | "requires": {
2576 | "find-up": "^2.0.0",
2577 | "load-json-file": "^4.0.0"
2578 | },
2579 | "dependencies": {
2580 | "find-up": {
2581 | "version": "2.1.0",
2582 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
2583 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
2584 | "dev": true,
2585 | "requires": {
2586 | "locate-path": "^2.0.0"
2587 | }
2588 | },
2589 | "load-json-file": {
2590 | "version": "4.0.0",
2591 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
2592 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
2593 | "dev": true,
2594 | "requires": {
2595 | "graceful-fs": "^4.1.2",
2596 | "parse-json": "^4.0.0",
2597 | "pify": "^3.0.0",
2598 | "strip-bom": "^3.0.0"
2599 | }
2600 | },
2601 | "parse-json": {
2602 | "version": "4.0.0",
2603 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
2604 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
2605 | "dev": true,
2606 | "requires": {
2607 | "error-ex": "^1.3.1",
2608 | "json-parse-better-errors": "^1.0.1"
2609 | }
2610 | },
2611 | "pify": {
2612 | "version": "3.0.0",
2613 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
2614 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
2615 | "dev": true
2616 | },
2617 | "strip-bom": {
2618 | "version": "3.0.0",
2619 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
2620 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
2621 | "dev": true
2622 | }
2623 | }
2624 | },
2625 | "pkg-config": {
2626 | "version": "1.1.1",
2627 | "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
2628 | "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
2629 | "dev": true,
2630 | "requires": {
2631 | "debug-log": "^1.0.0",
2632 | "find-root": "^1.0.0",
2633 | "xtend": "^4.0.1"
2634 | }
2635 | },
2636 | "pkg-dir": {
2637 | "version": "2.0.0",
2638 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
2639 | "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
2640 | "dev": true,
2641 | "requires": {
2642 | "find-up": "^2.1.0"
2643 | },
2644 | "dependencies": {
2645 | "find-up": {
2646 | "version": "2.1.0",
2647 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
2648 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
2649 | "dev": true,
2650 | "requires": {
2651 | "locate-path": "^2.0.0"
2652 | }
2653 | }
2654 | }
2655 | },
2656 | "pkg-up": {
2657 | "version": "1.0.0",
2658 | "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz",
2659 | "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
2660 | "dev": true,
2661 | "requires": {
2662 | "find-up": "^1.0.0"
2663 | }
2664 | },
2665 | "pluralize": {
2666 | "version": "1.2.1",
2667 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
2668 | "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
2669 | "dev": true
2670 | },
2671 | "prebuild-install": {
2672 | "version": "2.5.3",
2673 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz",
2674 | "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==",
2675 | "optional": true,
2676 | "requires": {
2677 | "detect-libc": "^1.0.3",
2678 | "expand-template": "^1.0.2",
2679 | "github-from-package": "0.0.0",
2680 | "minimist": "^1.2.0",
2681 | "mkdirp": "^0.5.1",
2682 | "node-abi": "^2.2.0",
2683 | "noop-logger": "^0.1.1",
2684 | "npmlog": "^4.0.1",
2685 | "os-homedir": "^1.0.1",
2686 | "pump": "^2.0.1",
2687 | "rc": "^1.1.6",
2688 | "simple-get": "^2.7.0",
2689 | "tar-fs": "^1.13.0",
2690 | "tunnel-agent": "^0.6.0",
2691 | "which-pm-runs": "^1.0.0"
2692 | }
2693 | },
2694 | "prelude-ls": {
2695 | "version": "1.1.2",
2696 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
2697 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
2698 | "dev": true
2699 | },
2700 | "printj": {
2701 | "version": "1.1.2",
2702 | "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz",
2703 | "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
2704 | },
2705 | "process-nextick-args": {
2706 | "version": "2.0.1",
2707 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
2708 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
2709 | },
2710 | "progress": {
2711 | "version": "1.1.8",
2712 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
2713 | "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
2714 | "dev": true
2715 | },
2716 | "proj4": {
2717 | "version": "2.5.0",
2718 | "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.5.0.tgz",
2719 | "integrity": "sha512-XZTRT7OPdLzgvtTqL8DG2cEj8lYdovztOwiwpwRSYayOty5Ipf3H68dh/fiL+HKDEyetmQSMhkkMGiJoyziz3w==",
2720 | "requires": {
2721 | "mgrs": "1.0.0",
2722 | "wkt-parser": "^1.2.0"
2723 | }
2724 | },
2725 | "proxy-addr": {
2726 | "version": "2.0.5",
2727 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
2728 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
2729 | "requires": {
2730 | "forwarded": "~0.1.2",
2731 | "ipaddr.js": "1.9.0"
2732 | }
2733 | },
2734 | "psl": {
2735 | "version": "1.1.33",
2736 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz",
2737 | "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw=="
2738 | },
2739 | "pump": {
2740 | "version": "2.0.1",
2741 | "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
2742 | "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
2743 | "optional": true,
2744 | "requires": {
2745 | "end-of-stream": "^1.1.0",
2746 | "once": "^1.3.1"
2747 | }
2748 | },
2749 | "punycode": {
2750 | "version": "2.1.1",
2751 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2752 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
2753 | },
2754 | "qs": {
2755 | "version": "6.5.2",
2756 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
2757 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
2758 | },
2759 | "range-parser": {
2760 | "version": "1.2.1",
2761 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
2762 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
2763 | },
2764 | "raw-body": {
2765 | "version": "2.4.0",
2766 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
2767 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
2768 | "requires": {
2769 | "bytes": "3.1.0",
2770 | "http-errors": "1.7.2",
2771 | "iconv-lite": "0.4.24",
2772 | "unpipe": "1.0.0"
2773 | }
2774 | },
2775 | "rc": {
2776 | "version": "1.2.8",
2777 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
2778 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
2779 | "optional": true,
2780 | "requires": {
2781 | "deep-extend": "^0.6.0",
2782 | "ini": "~1.3.0",
2783 | "minimist": "^1.2.0",
2784 | "strip-json-comments": "~2.0.1"
2785 | }
2786 | },
2787 | "read-pkg": {
2788 | "version": "1.1.0",
2789 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
2790 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
2791 | "requires": {
2792 | "load-json-file": "^1.0.0",
2793 | "normalize-package-data": "^2.3.2",
2794 | "path-type": "^1.0.0"
2795 | }
2796 | },
2797 | "read-pkg-up": {
2798 | "version": "1.0.1",
2799 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
2800 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
2801 | "requires": {
2802 | "find-up": "^1.0.0",
2803 | "read-pkg": "^1.0.0"
2804 | }
2805 | },
2806 | "readable-stream": {
2807 | "version": "2.3.6",
2808 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
2809 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
2810 | "requires": {
2811 | "core-util-is": "~1.0.0",
2812 | "inherits": "~2.0.3",
2813 | "isarray": "~1.0.0",
2814 | "process-nextick-args": "~2.0.0",
2815 | "safe-buffer": "~5.1.1",
2816 | "string_decoder": "~1.1.1",
2817 | "util-deprecate": "~1.0.1"
2818 | }
2819 | },
2820 | "readline2": {
2821 | "version": "1.0.1",
2822 | "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
2823 | "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
2824 | "dev": true,
2825 | "requires": {
2826 | "code-point-at": "^1.0.0",
2827 | "is-fullwidth-code-point": "^1.0.0",
2828 | "mute-stream": "0.0.5"
2829 | },
2830 | "dependencies": {
2831 | "is-fullwidth-code-point": {
2832 | "version": "1.0.0",
2833 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
2834 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
2835 | "dev": true,
2836 | "requires": {
2837 | "number-is-nan": "^1.0.0"
2838 | }
2839 | }
2840 | }
2841 | },
2842 | "rechoir": {
2843 | "version": "0.6.2",
2844 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
2845 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
2846 | "dev": true,
2847 | "requires": {
2848 | "resolve": "^1.1.6"
2849 | }
2850 | },
2851 | "repeat-string": {
2852 | "version": "1.6.1",
2853 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
2854 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
2855 | },
2856 | "replace-ext": {
2857 | "version": "1.0.0",
2858 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
2859 | "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
2860 | },
2861 | "request": {
2862 | "version": "2.88.0",
2863 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
2864 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
2865 | "requires": {
2866 | "aws-sign2": "~0.7.0",
2867 | "aws4": "^1.8.0",
2868 | "caseless": "~0.12.0",
2869 | "combined-stream": "~1.0.6",
2870 | "extend": "~3.0.2",
2871 | "forever-agent": "~0.6.1",
2872 | "form-data": "~2.3.2",
2873 | "har-validator": "~5.1.0",
2874 | "http-signature": "~1.2.0",
2875 | "is-typedarray": "~1.0.0",
2876 | "isstream": "~0.1.2",
2877 | "json-stringify-safe": "~5.0.1",
2878 | "mime-types": "~2.1.19",
2879 | "oauth-sign": "~0.9.0",
2880 | "performance-now": "^2.1.0",
2881 | "qs": "~6.5.2",
2882 | "safe-buffer": "^5.1.2",
2883 | "tough-cookie": "~2.4.3",
2884 | "tunnel-agent": "^0.6.0",
2885 | "uuid": "^3.3.2"
2886 | }
2887 | },
2888 | "require-directory": {
2889 | "version": "2.1.1",
2890 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
2891 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
2892 | },
2893 | "require-main-filename": {
2894 | "version": "1.0.1",
2895 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
2896 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
2897 | },
2898 | "require-uncached": {
2899 | "version": "1.0.3",
2900 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
2901 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
2902 | "dev": true,
2903 | "requires": {
2904 | "caller-path": "^0.1.0",
2905 | "resolve-from": "^1.0.0"
2906 | }
2907 | },
2908 | "resolve": {
2909 | "version": "1.11.0",
2910 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz",
2911 | "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==",
2912 | "requires": {
2913 | "path-parse": "^1.0.6"
2914 | }
2915 | },
2916 | "resolve-from": {
2917 | "version": "1.0.1",
2918 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
2919 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
2920 | "dev": true
2921 | },
2922 | "restore-cursor": {
2923 | "version": "1.0.1",
2924 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
2925 | "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
2926 | "dev": true,
2927 | "requires": {
2928 | "exit-hook": "^1.0.0",
2929 | "onetime": "^1.0.0"
2930 | }
2931 | },
2932 | "rimraf": {
2933 | "version": "2.6.3",
2934 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
2935 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
2936 | "requires": {
2937 | "glob": "^7.1.3"
2938 | }
2939 | },
2940 | "run-async": {
2941 | "version": "0.1.0",
2942 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
2943 | "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
2944 | "dev": true,
2945 | "requires": {
2946 | "once": "^1.3.0"
2947 | }
2948 | },
2949 | "run-parallel": {
2950 | "version": "1.1.9",
2951 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
2952 | "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
2953 | "dev": true
2954 | },
2955 | "rx-lite": {
2956 | "version": "3.1.2",
2957 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
2958 | "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
2959 | "dev": true
2960 | },
2961 | "safe-buffer": {
2962 | "version": "5.1.2",
2963 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2964 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
2965 | },
2966 | "safer-buffer": {
2967 | "version": "2.1.2",
2968 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2969 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2970 | },
2971 | "semver": {
2972 | "version": "5.7.0",
2973 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
2974 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
2975 | },
2976 | "send": {
2977 | "version": "0.17.1",
2978 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
2979 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
2980 | "requires": {
2981 | "debug": "2.6.9",
2982 | "depd": "~1.1.2",
2983 | "destroy": "~1.0.4",
2984 | "encodeurl": "~1.0.2",
2985 | "escape-html": "~1.0.3",
2986 | "etag": "~1.8.1",
2987 | "fresh": "0.5.2",
2988 | "http-errors": "~1.7.2",
2989 | "mime": "1.6.0",
2990 | "ms": "2.1.1",
2991 | "on-finished": "~2.3.0",
2992 | "range-parser": "~1.2.1",
2993 | "statuses": "~1.5.0"
2994 | },
2995 | "dependencies": {
2996 | "ms": {
2997 | "version": "2.1.1",
2998 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
2999 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
3000 | }
3001 | }
3002 | },
3003 | "serve-static": {
3004 | "version": "1.14.1",
3005 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
3006 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
3007 | "requires": {
3008 | "encodeurl": "~1.0.2",
3009 | "escape-html": "~1.0.3",
3010 | "parseurl": "~1.3.3",
3011 | "send": "0.17.1"
3012 | }
3013 | },
3014 | "set-blocking": {
3015 | "version": "2.0.0",
3016 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
3017 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
3018 | },
3019 | "setprototypeof": {
3020 | "version": "1.1.1",
3021 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
3022 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
3023 | },
3024 | "shelljs": {
3025 | "version": "0.7.8",
3026 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
3027 | "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
3028 | "dev": true,
3029 | "requires": {
3030 | "glob": "^7.0.0",
3031 | "interpret": "^1.0.0",
3032 | "rechoir": "^0.6.2"
3033 | }
3034 | },
3035 | "signal-exit": {
3036 | "version": "3.0.2",
3037 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
3038 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
3039 | "optional": true
3040 | },
3041 | "simple-concat": {
3042 | "version": "1.0.0",
3043 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
3044 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
3045 | "optional": true
3046 | },
3047 | "simple-get": {
3048 | "version": "2.8.1",
3049 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
3050 | "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
3051 | "optional": true,
3052 | "requires": {
3053 | "decompress-response": "^3.3.0",
3054 | "once": "^1.3.1",
3055 | "simple-concat": "^1.0.0"
3056 | }
3057 | },
3058 | "simple-statistics": {
3059 | "version": "7.0.2",
3060 | "resolved": "https://registry.npmjs.org/simple-statistics/-/simple-statistics-7.0.2.tgz",
3061 | "integrity": "sha512-wqTjlmbiaL6Fqaw28tSjQrthjxVV17MMfi/H/qvE0jAvtLspB2S7gEtcR27uvhSRAa64LhjhoO169rX8sFW3pg=="
3062 | },
3063 | "slice-ansi": {
3064 | "version": "0.0.4",
3065 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
3066 | "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
3067 | "dev": true
3068 | },
3069 | "spdx-correct": {
3070 | "version": "3.1.0",
3071 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
3072 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
3073 | "requires": {
3074 | "spdx-expression-parse": "^3.0.0",
3075 | "spdx-license-ids": "^3.0.0"
3076 | }
3077 | },
3078 | "spdx-exceptions": {
3079 | "version": "2.2.0",
3080 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
3081 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
3082 | },
3083 | "spdx-expression-parse": {
3084 | "version": "3.0.0",
3085 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
3086 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
3087 | "requires": {
3088 | "spdx-exceptions": "^2.1.0",
3089 | "spdx-license-ids": "^3.0.0"
3090 | }
3091 | },
3092 | "spdx-license-ids": {
3093 | "version": "3.0.4",
3094 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
3095 | "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA=="
3096 | },
3097 | "sprintf-js": {
3098 | "version": "1.0.3",
3099 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
3100 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
3101 | "dev": true
3102 | },
3103 | "ssf": {
3104 | "version": "0.10.2",
3105 | "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz",
3106 | "integrity": "sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==",
3107 | "requires": {
3108 | "frac": "~1.1.2"
3109 | }
3110 | },
3111 | "sshpk": {
3112 | "version": "1.16.1",
3113 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
3114 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
3115 | "requires": {
3116 | "asn1": "~0.2.3",
3117 | "assert-plus": "^1.0.0",
3118 | "bcrypt-pbkdf": "^1.0.0",
3119 | "dashdash": "^1.12.0",
3120 | "ecc-jsbn": "~0.1.1",
3121 | "getpass": "^0.1.1",
3122 | "jsbn": "~0.1.0",
3123 | "safer-buffer": "^2.0.2",
3124 | "tweetnacl": "~0.14.0"
3125 | }
3126 | },
3127 | "stack-trace": {
3128 | "version": "0.0.10",
3129 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
3130 | "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
3131 | },
3132 | "standard": {
3133 | "version": "10.0.3",
3134 | "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz",
3135 | "integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==",
3136 | "dev": true,
3137 | "requires": {
3138 | "eslint": "~3.19.0",
3139 | "eslint-config-standard": "10.2.1",
3140 | "eslint-config-standard-jsx": "4.0.2",
3141 | "eslint-plugin-import": "~2.2.0",
3142 | "eslint-plugin-node": "~4.2.2",
3143 | "eslint-plugin-promise": "~3.5.0",
3144 | "eslint-plugin-react": "~6.10.0",
3145 | "eslint-plugin-standard": "~3.0.1",
3146 | "standard-engine": "~7.0.0"
3147 | }
3148 | },
3149 | "standard-engine": {
3150 | "version": "7.0.0",
3151 | "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz",
3152 | "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=",
3153 | "dev": true,
3154 | "requires": {
3155 | "deglob": "^2.1.0",
3156 | "get-stdin": "^5.0.1",
3157 | "minimist": "^1.1.0",
3158 | "pkg-conf": "^2.0.0"
3159 | }
3160 | },
3161 | "statuses": {
3162 | "version": "1.5.0",
3163 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
3164 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
3165 | },
3166 | "string-hash": {
3167 | "version": "1.1.3",
3168 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
3169 | "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs="
3170 | },
3171 | "string-width": {
3172 | "version": "2.1.1",
3173 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
3174 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
3175 | "requires": {
3176 | "is-fullwidth-code-point": "^2.0.0",
3177 | "strip-ansi": "^4.0.0"
3178 | },
3179 | "dependencies": {
3180 | "strip-ansi": {
3181 | "version": "4.0.0",
3182 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
3183 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
3184 | "requires": {
3185 | "ansi-regex": "^3.0.0"
3186 | }
3187 | }
3188 | }
3189 | },
3190 | "string_decoder": {
3191 | "version": "1.1.1",
3192 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
3193 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
3194 | "requires": {
3195 | "safe-buffer": "~5.1.0"
3196 | }
3197 | },
3198 | "strip-ansi": {
3199 | "version": "0.1.1",
3200 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
3201 | "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE="
3202 | },
3203 | "strip-bom": {
3204 | "version": "2.0.0",
3205 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
3206 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
3207 | "requires": {
3208 | "is-utf8": "^0.2.0"
3209 | }
3210 | },
3211 | "strip-json-comments": {
3212 | "version": "2.0.1",
3213 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
3214 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
3215 | },
3216 | "supports-color": {
3217 | "version": "5.5.0",
3218 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
3219 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
3220 | "requires": {
3221 | "has-flag": "^3.0.0"
3222 | }
3223 | },
3224 | "table": {
3225 | "version": "3.8.3",
3226 | "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
3227 | "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
3228 | "dev": true,
3229 | "requires": {
3230 | "ajv": "^4.7.0",
3231 | "ajv-keywords": "^1.0.0",
3232 | "chalk": "^1.1.1",
3233 | "lodash": "^4.0.0",
3234 | "slice-ansi": "0.0.4",
3235 | "string-width": "^2.0.0"
3236 | },
3237 | "dependencies": {
3238 | "ajv": {
3239 | "version": "4.11.8",
3240 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
3241 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
3242 | "dev": true,
3243 | "requires": {
3244 | "co": "^4.6.0",
3245 | "json-stable-stringify": "^1.0.1"
3246 | }
3247 | },
3248 | "ansi-regex": {
3249 | "version": "2.1.1",
3250 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
3251 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
3252 | "dev": true
3253 | },
3254 | "ansi-styles": {
3255 | "version": "2.2.1",
3256 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
3257 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
3258 | "dev": true
3259 | },
3260 | "chalk": {
3261 | "version": "1.1.3",
3262 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
3263 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
3264 | "dev": true,
3265 | "requires": {
3266 | "ansi-styles": "^2.2.1",
3267 | "escape-string-regexp": "^1.0.2",
3268 | "has-ansi": "^2.0.0",
3269 | "strip-ansi": "^3.0.0",
3270 | "supports-color": "^2.0.0"
3271 | }
3272 | },
3273 | "strip-ansi": {
3274 | "version": "3.0.1",
3275 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
3276 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
3277 | "dev": true,
3278 | "requires": {
3279 | "ansi-regex": "^2.0.0"
3280 | }
3281 | },
3282 | "supports-color": {
3283 | "version": "2.0.0",
3284 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
3285 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
3286 | "dev": true
3287 | }
3288 | }
3289 | },
3290 | "tar-fs": {
3291 | "version": "1.16.3",
3292 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
3293 | "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==",
3294 | "optional": true,
3295 | "requires": {
3296 | "chownr": "^1.0.1",
3297 | "mkdirp": "^0.5.1",
3298 | "pump": "^1.0.0",
3299 | "tar-stream": "^1.1.2"
3300 | },
3301 | "dependencies": {
3302 | "pump": {
3303 | "version": "1.0.3",
3304 | "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
3305 | "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
3306 | "optional": true,
3307 | "requires": {
3308 | "end-of-stream": "^1.1.0",
3309 | "once": "^1.3.1"
3310 | }
3311 | }
3312 | }
3313 | },
3314 | "tar-stream": {
3315 | "version": "1.6.2",
3316 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
3317 | "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
3318 | "optional": true,
3319 | "requires": {
3320 | "bl": "^1.0.0",
3321 | "buffer-alloc": "^1.2.0",
3322 | "end-of-stream": "^1.0.0",
3323 | "fs-constants": "^1.0.0",
3324 | "readable-stream": "^2.3.0",
3325 | "to-buffer": "^1.1.1",
3326 | "xtend": "^4.0.0"
3327 | }
3328 | },
3329 | "terraformer": {
3330 | "version": "1.0.9",
3331 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.9.tgz",
3332 | "integrity": "sha512-YlmQ1fsMWTkKGDGibCRWgmLzrpDRUr63Q025LJ/taYQ6j1Yb8q9McKF7NBi6ACAyUXO6F/bl9w6v4MY307y5Ag==",
3333 | "requires": {
3334 | "@types/geojson": "^1.0.0"
3335 | },
3336 | "dependencies": {
3337 | "@types/geojson": {
3338 | "version": "1.0.6",
3339 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz",
3340 | "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==",
3341 | "optional": true
3342 | }
3343 | }
3344 | },
3345 | "terraformer-arcgis-parser": {
3346 | "version": "1.1.0",
3347 | "resolved": "https://registry.npmjs.org/terraformer-arcgis-parser/-/terraformer-arcgis-parser-1.1.0.tgz",
3348 | "integrity": "sha512-bvxEtpiS22Lz1ciaXP/MMLTlJkrHWLBV/y7VBeTLHtZnz/Ngq4wF3RqrpjzP6ojJjxvcdDlvs+UFs3wicoT1Vg==",
3349 | "requires": {
3350 | "@types/geojson": "^1.0.0",
3351 | "terraformer": "~1.0.4"
3352 | },
3353 | "dependencies": {
3354 | "@types/geojson": {
3355 | "version": "1.0.6",
3356 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz",
3357 | "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w=="
3358 | }
3359 | }
3360 | },
3361 | "text-table": {
3362 | "version": "0.2.0",
3363 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
3364 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
3365 | "dev": true
3366 | },
3367 | "through": {
3368 | "version": "2.3.8",
3369 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
3370 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
3371 | "dev": true
3372 | },
3373 | "to-buffer": {
3374 | "version": "1.1.1",
3375 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
3376 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
3377 | "optional": true
3378 | },
3379 | "toidentifier": {
3380 | "version": "1.0.0",
3381 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
3382 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
3383 | },
3384 | "tough-cookie": {
3385 | "version": "2.4.3",
3386 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
3387 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
3388 | "requires": {
3389 | "psl": "^1.1.24",
3390 | "punycode": "^1.4.1"
3391 | },
3392 | "dependencies": {
3393 | "punycode": {
3394 | "version": "1.4.1",
3395 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
3396 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
3397 | }
3398 | }
3399 | },
3400 | "tunnel-agent": {
3401 | "version": "0.6.0",
3402 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
3403 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
3404 | "requires": {
3405 | "safe-buffer": "^5.0.1"
3406 | }
3407 | },
3408 | "tweetnacl": {
3409 | "version": "0.14.5",
3410 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
3411 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
3412 | },
3413 | "type": {
3414 | "version": "1.0.1",
3415 | "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz",
3416 | "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==",
3417 | "dev": true
3418 | },
3419 | "type-check": {
3420 | "version": "0.3.2",
3421 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
3422 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
3423 | "dev": true,
3424 | "requires": {
3425 | "prelude-ls": "~1.1.2"
3426 | }
3427 | },
3428 | "type-is": {
3429 | "version": "1.6.18",
3430 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
3431 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
3432 | "requires": {
3433 | "media-typer": "0.3.0",
3434 | "mime-types": "~2.1.24"
3435 | }
3436 | },
3437 | "typedarray": {
3438 | "version": "0.0.6",
3439 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
3440 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
3441 | },
3442 | "underscore": {
3443 | "version": "1.6.0",
3444 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
3445 | "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
3446 | },
3447 | "uniq": {
3448 | "version": "1.0.1",
3449 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
3450 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
3451 | "dev": true
3452 | },
3453 | "unist-util-stringify-position": {
3454 | "version": "2.0.1",
3455 | "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz",
3456 | "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==",
3457 | "requires": {
3458 | "@types/unist": "^2.0.2"
3459 | }
3460 | },
3461 | "unpipe": {
3462 | "version": "1.0.0",
3463 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
3464 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
3465 | },
3466 | "uri-js": {
3467 | "version": "4.2.2",
3468 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
3469 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
3470 | "requires": {
3471 | "punycode": "^2.1.0"
3472 | }
3473 | },
3474 | "user-home": {
3475 | "version": "2.0.0",
3476 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
3477 | "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
3478 | "dev": true,
3479 | "requires": {
3480 | "os-homedir": "^1.0.0"
3481 | }
3482 | },
3483 | "util-deprecate": {
3484 | "version": "1.0.2",
3485 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3486 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
3487 | },
3488 | "utils-merge": {
3489 | "version": "1.0.1",
3490 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
3491 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
3492 | },
3493 | "uuid": {
3494 | "version": "3.3.2",
3495 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
3496 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
3497 | },
3498 | "validate-npm-package-license": {
3499 | "version": "3.0.4",
3500 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
3501 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
3502 | "requires": {
3503 | "spdx-correct": "^3.0.0",
3504 | "spdx-expression-parse": "^3.0.0"
3505 | }
3506 | },
3507 | "vary": {
3508 | "version": "1.1.2",
3509 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
3510 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
3511 | },
3512 | "verror": {
3513 | "version": "1.10.0",
3514 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
3515 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
3516 | "requires": {
3517 | "assert-plus": "^1.0.0",
3518 | "core-util-is": "1.0.2",
3519 | "extsprintf": "^1.2.0"
3520 | }
3521 | },
3522 | "vfile": {
3523 | "version": "4.0.1",
3524 | "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz",
3525 | "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==",
3526 | "requires": {
3527 | "@types/unist": "^2.0.0",
3528 | "is-buffer": "^2.0.0",
3529 | "replace-ext": "1.0.0",
3530 | "unist-util-stringify-position": "^2.0.0",
3531 | "vfile-message": "^2.0.0"
3532 | }
3533 | },
3534 | "vfile-message": {
3535 | "version": "2.0.1",
3536 | "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz",
3537 | "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==",
3538 | "requires": {
3539 | "@types/unist": "^2.0.2",
3540 | "unist-util-stringify-position": "^2.0.0"
3541 | }
3542 | },
3543 | "vfile-reporter": {
3544 | "version": "5.1.2",
3545 | "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-5.1.2.tgz",
3546 | "integrity": "sha512-b15sTuss1wOPWVlyWOvu+n6wGJ/eTYngz3uqMLimQvxZ+Q5oFQGYZZP1o3dR9sk58G5+wej0UPCZSwQBX/mzrQ==",
3547 | "requires": {
3548 | "repeat-string": "^1.5.0",
3549 | "string-width": "^2.0.0",
3550 | "supports-color": "^5.0.0",
3551 | "unist-util-stringify-position": "^2.0.0",
3552 | "vfile-sort": "^2.1.2",
3553 | "vfile-statistics": "^1.1.0"
3554 | }
3555 | },
3556 | "vfile-sort": {
3557 | "version": "2.2.1",
3558 | "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.1.tgz",
3559 | "integrity": "sha512-5dt7xEhC44h0uRQKhbM2JAe0z/naHphIZlMOygtMBM9Nn0pZdaX5fshhwWit9wvsuP8t/wp43nTDRRErO1WK8g=="
3560 | },
3561 | "vfile-statistics": {
3562 | "version": "1.1.3",
3563 | "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.3.tgz",
3564 | "integrity": "sha512-CstaK/ebTz1W3Qp41Bt9Lj/2DmumFsCwC2sKahDNSPh0mPh7/UyMLCoU8ZBX34CRU0d61B4W41yIFsV0NKMZeA=="
3565 | },
3566 | "wcwidth": {
3567 | "version": "1.0.1",
3568 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
3569 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
3570 | "optional": true,
3571 | "requires": {
3572 | "defaults": "^1.0.3"
3573 | }
3574 | },
3575 | "which-module": {
3576 | "version": "1.0.0",
3577 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
3578 | "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
3579 | },
3580 | "which-pm-runs": {
3581 | "version": "1.0.0",
3582 | "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
3583 | "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
3584 | "optional": true
3585 | },
3586 | "wide-align": {
3587 | "version": "1.1.3",
3588 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
3589 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
3590 | "optional": true,
3591 | "requires": {
3592 | "string-width": "^1.0.2 || 2"
3593 | }
3594 | },
3595 | "window-size": {
3596 | "version": "0.2.0",
3597 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
3598 | "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU="
3599 | },
3600 | "winnow": {
3601 | "version": "1.16.7",
3602 | "resolved": "https://registry.npmjs.org/winnow/-/winnow-1.16.7.tgz",
3603 | "integrity": "sha512-a/hMymkGYQJn34R1thro4PJP8xjSJ0tltJJBoXjaPhDhM3HNer4z6hWR0/3ltTHQCCT1/PnaM+ZoyUsxB+agYw==",
3604 | "requires": {
3605 | "@esri/proj-codes": "^2.2.0",
3606 | "@turf/bbox-polygon": "^6.0.1",
3607 | "@turf/centroid": "^6.0.0",
3608 | "alasql": "^0.4.0",
3609 | "classybrew": "0.0.3",
3610 | "farmhash": "^2.1.0",
3611 | "flora-sql-parser": "^0.9.3",
3612 | "highland": "^3.0.0-beta.3",
3613 | "lodash": "^4.17.4",
3614 | "moment": "^2.18.1",
3615 | "ngeohash": "^0.6.3",
3616 | "proj4": "^2.3.17",
3617 | "simple-statistics": "^7.0.0",
3618 | "string-hash": "^1.1.3",
3619 | "terraformer": "^1.0.7",
3620 | "wkt-parser": "^1.2.2"
3621 | }
3622 | },
3623 | "winston": {
3624 | "version": "2.4.4",
3625 | "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz",
3626 | "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==",
3627 | "requires": {
3628 | "async": "~1.0.0",
3629 | "colors": "1.0.x",
3630 | "cycle": "1.0.x",
3631 | "eyes": "0.1.x",
3632 | "isstream": "0.1.x",
3633 | "stack-trace": "0.0.x"
3634 | },
3635 | "dependencies": {
3636 | "async": {
3637 | "version": "1.0.0",
3638 | "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
3639 | "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
3640 | }
3641 | }
3642 | },
3643 | "wkt-parser": {
3644 | "version": "1.2.3",
3645 | "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.2.3.tgz",
3646 | "integrity": "sha512-s7zrOedGuHbbzMaQOuf8HacuCYp3LmmrHjkkN//7UEAzsYz7xJ6J+j/84ZWZkQcrRqi3xXyuc4odPHj7PEB0bw=="
3647 | },
3648 | "wordwrap": {
3649 | "version": "1.0.0",
3650 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
3651 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
3652 | "dev": true
3653 | },
3654 | "wrap-ansi": {
3655 | "version": "2.1.0",
3656 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
3657 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
3658 | "requires": {
3659 | "string-width": "^1.0.1",
3660 | "strip-ansi": "^3.0.1"
3661 | },
3662 | "dependencies": {
3663 | "ansi-regex": {
3664 | "version": "2.1.1",
3665 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
3666 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
3667 | },
3668 | "is-fullwidth-code-point": {
3669 | "version": "1.0.0",
3670 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
3671 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
3672 | "requires": {
3673 | "number-is-nan": "^1.0.0"
3674 | }
3675 | },
3676 | "string-width": {
3677 | "version": "1.0.2",
3678 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
3679 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
3680 | "requires": {
3681 | "code-point-at": "^1.0.0",
3682 | "is-fullwidth-code-point": "^1.0.0",
3683 | "strip-ansi": "^3.0.0"
3684 | }
3685 | },
3686 | "strip-ansi": {
3687 | "version": "3.0.1",
3688 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
3689 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
3690 | "requires": {
3691 | "ansi-regex": "^2.0.0"
3692 | }
3693 | }
3694 | }
3695 | },
3696 | "wrappy": {
3697 | "version": "1.0.2",
3698 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3699 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
3700 | },
3701 | "write": {
3702 | "version": "0.2.1",
3703 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
3704 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
3705 | "dev": true,
3706 | "requires": {
3707 | "mkdirp": "^0.5.1"
3708 | }
3709 | },
3710 | "xlsx": {
3711 | "version": "0.13.5",
3712 | "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.13.5.tgz",
3713 | "integrity": "sha512-AQo8Anyuv8ZxegAH2EUJ9ZauLf3lIDPfmV7OpJi79LNW6jO4gsviJyQCjNCJY7Deu1SLCrr7LY6rM9N91ixaDQ==",
3714 | "requires": {
3715 | "adler-32": "~1.2.0",
3716 | "cfb": "~1.0.8",
3717 | "codepage": "~1.14.0",
3718 | "commander": "~2.15.1",
3719 | "crc-32": "~1.2.0",
3720 | "exit-on-epipe": "~1.0.1",
3721 | "ssf": "~0.10.2"
3722 | }
3723 | },
3724 | "xtend": {
3725 | "version": "4.0.1",
3726 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
3727 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
3728 | },
3729 | "y18n": {
3730 | "version": "3.2.1",
3731 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
3732 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
3733 | },
3734 | "yargs": {
3735 | "version": "5.0.0",
3736 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-5.0.0.tgz",
3737 | "integrity": "sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4=",
3738 | "requires": {
3739 | "cliui": "^3.2.0",
3740 | "decamelize": "^1.1.1",
3741 | "get-caller-file": "^1.0.1",
3742 | "lodash.assign": "^4.2.0",
3743 | "os-locale": "^1.4.0",
3744 | "read-pkg-up": "^1.0.1",
3745 | "require-directory": "^2.1.1",
3746 | "require-main-filename": "^1.0.1",
3747 | "set-blocking": "^2.0.0",
3748 | "string-width": "^1.0.2",
3749 | "which-module": "^1.0.0",
3750 | "window-size": "^0.2.0",
3751 | "y18n": "^3.2.1",
3752 | "yargs-parser": "^3.2.0"
3753 | },
3754 | "dependencies": {
3755 | "ansi-regex": {
3756 | "version": "2.1.1",
3757 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
3758 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
3759 | },
3760 | "is-fullwidth-code-point": {
3761 | "version": "1.0.0",
3762 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
3763 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
3764 | "requires": {
3765 | "number-is-nan": "^1.0.0"
3766 | }
3767 | },
3768 | "string-width": {
3769 | "version": "1.0.2",
3770 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
3771 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
3772 | "requires": {
3773 | "code-point-at": "^1.0.0",
3774 | "is-fullwidth-code-point": "^1.0.0",
3775 | "strip-ansi": "^3.0.0"
3776 | }
3777 | },
3778 | "strip-ansi": {
3779 | "version": "3.0.1",
3780 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
3781 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
3782 | "requires": {
3783 | "ansi-regex": "^2.0.0"
3784 | }
3785 | }
3786 | }
3787 | },
3788 | "yargs-parser": {
3789 | "version": "3.2.0",
3790 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-3.2.0.tgz",
3791 | "integrity": "sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8=",
3792 | "requires": {
3793 | "camelcase": "^3.0.0",
3794 | "lodash.assign": "^4.1.0"
3795 | }
3796 | }
3797 | }
3798 | }
3799 |
--------------------------------------------------------------------------------
/demo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "Daniel Fenton ",
10 | "license": "ISC",
11 | "devDependencies": {
12 | "standard": "^10.0.3"
13 | },
14 | "dependencies": {
15 | "@koopjs/provider-file-geojson": "^1.0.0"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/demo/server.js:
--------------------------------------------------------------------------------
1 | const Koop = require('koop')
2 | const koop = new Koop()
3 | const vectorTiles = require('../src')
4 | const files = require('@koopjs/provider-file-geojson')
5 | koop.register(vectorTiles)
6 | koop.register(files)
7 | koop.server.listen(8085)
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@koopjs/output-vector-tiles",
3 | "version": "2.2.0",
4 | "description": "Koop output-plugin for generating Vector-tiles from GeoJSON",
5 | "main": "dist/index.js",
6 | "directories": {
7 | "test": "test"
8 | },
9 | "scripts": {
10 | "clean": "rm -rf dist",
11 | "compile": "buble -i src -o dist",
12 | "package": "npm run clean && npm run compile",
13 | "start": "node server.js",
14 | "test": "standard && tape test/*.js | tap-spec"
15 | },
16 | "author": "Daniel Fenton ",
17 | "license": "Apache-2.0",
18 | "repository": {
19 | "type": "git",
20 | "url": "git+https://github.com/koopjs/koop-output-vector-tiles.git"
21 | },
22 | "bugs": {
23 | "url": "https://github.com/koopjs/koop-output-vector-tiles/issues"
24 | },
25 | "homepage": "https://github.com/koopjs/koop-output-vector-tiles#readme",
26 | "dependencies": {
27 | "@koopjs/logger": "^2.0.4",
28 | "config": "^3.1.0",
29 | "esri-extent": "^1.1.3",
30 | "geojson-vt": "^3.2.1",
31 | "lodash": "^4.17.11",
32 | "proj4": "^2.5.0",
33 | "vt-pbf": "^3.1.1",
34 | "winnow": "^1.16.8"
35 | },
36 | "devDependencies": {
37 | "buble": "^0.19.7",
38 | "proxyquire": "^2.1.0",
39 | "standard": "^10.0.3",
40 | "tap-spec": "^5.0.0",
41 | "tape": "^4.10.2"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/esri-metadata.js:
--------------------------------------------------------------------------------
1 | const _ = require('lodash')
2 | const esriExtent = require('esri-extent')
3 | const proj4 = require('proj4')
4 | const template = require('./esri-template-metadata')
5 |
6 | /**
7 | * Generate a Esri extent object (web mercator) from GeoJSON data
8 | * @param {object} geojson
9 | */
10 | function esriExtentWebMercator (geojson) {
11 | const extentWgs84 = esriExtent(geojson)
12 | const mins = proj4('EPSG:4326', 'EPSG:3857', [extentWgs84.xmin, extentWgs84.ymin])
13 | const maxs = proj4('EPSG:4326', 'EPSG:3857', [extentWgs84.xmax, extentWgs84.ymax])
14 | return {
15 | xmin: mins[0],
16 | ymin: mins[1],
17 | xmax: maxs[0],
18 | ymax: maxs[1],
19 | spatialReference: {
20 | cs: 'pcs',
21 | wkid: 102100
22 | }
23 | }
24 | }
25 |
26 | module.exports = function (req, res) {
27 | // Adjust layer specific properties
28 | this.model.pull(req, (e, geojson) => {
29 | if (e) return res.status(500).json(e)
30 | if (!geojson) return res.status(404).send()
31 |
32 | // Process metadata through Winnow so we get a data extent
33 | const { metadata = {} } = geojson
34 | const extent = metadata.extent || esriExtentWebMercator(geojson)
35 |
36 | const body = _.cloneDeep(template)
37 | if (metadata.name) body.name = metadata.name
38 | body.initialExtent = extent
39 | body.fullExtent = extent
40 |
41 | res.status(200).json(body)
42 | })
43 | }
44 |
--------------------------------------------------------------------------------
/src/esri-rendering-info.js:
--------------------------------------------------------------------------------
1 | const _ = require('lodash')
2 | const config = require('config')
3 |
4 | // Get configured paint properties and overwrite hardcoded properties
5 | const linePaint = Object.assign({ 'line-width': 2, 'line-color': '#FF0000' }, _.get(config, 'koopOutputVectorTiles.line.paint'))
6 | const fillPaint = Object.assign({ 'fill-opacity': 0.5, 'fill-color': '#008000' }, _.get(config, 'koopOutputVectorTiles.fill.paint'))
7 | const circlePaint = Object.assign({ 'circle-radius': 3, 'circle-color': '#007cbf' }, _.get(config, 'koopOutputVectorTiles.circle.paint'))
8 |
9 | function getRenderingInfo (type, paint = {}) {
10 | let result
11 | switch (type) {
12 | case 'LineString':
13 | case 'MultiLineString':
14 | case 'line':
15 | result = {
16 | type: 'line',
17 | paint: Object.assign({}, linePaint, paint)
18 | }
19 | break
20 | case 'Polygon':
21 | case 'MultiPolygon':
22 | case 'fill':
23 | result = {
24 | type: 'fill',
25 | paint: Object.assign({}, fillPaint, paint)
26 | }
27 | break
28 | case 'Point':
29 | case 'circle':
30 | default:
31 | result = {
32 | type: 'circle',
33 | paint: Object.assign({}, circlePaint, paint)
34 | }
35 | }
36 | return result
37 | }
38 |
39 | module.exports = function (type, paint) {
40 | return getRenderingInfo(type, paint)
41 | }
42 |
--------------------------------------------------------------------------------
/src/esri-root.js:
--------------------------------------------------------------------------------
1 | const _ = require('lodash')
2 | const Utils = require('./utils')
3 | const template = require('./esri-template-root')
4 | const esriRenderingInfo = require('./esri-rendering-info')
5 |
6 | module.exports = function (req, res) {
7 | this.model.pull(req, (e, geojson) => {
8 | if (e) return res.status(500).json(e)
9 | if (!geojson) return res.status(404).send()
10 |
11 | // clone the root.json template
12 | const body = _.cloneDeep(template)
13 |
14 | // extract geojson metadata property
15 | const { metadata = {} } = geojson
16 |
17 | // compose the layer id from request parameters
18 | const id = Utils.getTileSetKey(req.params.host, req.params.id)
19 |
20 | // Fetch the vector-tile feature type if set in metadata; otherwise use geometry type
21 | const metadataType = _.get(metadata, 'vt.type', metadata.geometryType)
22 |
23 | // Fetch the vector-tile paint object if set in metadata
24 | const metadataPaint = _.get(metadata, 'vt.paint')
25 |
26 | // compose the rendering type and paint object
27 | const { type, paint } = esriRenderingInfo(metadataType, metadataPaint)
28 |
29 | // add the composed layer properties to the response body
30 | Object.assign(body.layers[0], { id, 'source-layer': id, type, paint })
31 |
32 | // set the tile url
33 | body.sources.esri.url = `${req.protocol}://${req.headers.host || req.host}${req.baseUrl || ''}${req.path.replace('resources/styles/root.json', '')}`
34 |
35 | res.status(200).json(body)
36 | })
37 | }
38 |
--------------------------------------------------------------------------------
/src/esri-template-metadata.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | 'currentVersion': 10.61,
3 | 'name': 'Koop Tiles',
4 | 'capabilities': 'TilesOnly',
5 | 'type': 'indexedVector',
6 | 'defaultStyles': '/resources/styles',
7 | 'tiles': [
8 | '/{z}/{x}/{y}.pbf'
9 | ],
10 | 'exportTilesAllowed': true,
11 | 'initialExtent': {
12 | 'xmin': -20037507.067161843,
13 | 'ymin': -20037507.067161843,
14 | 'xmax': 20037507.067161843,
15 | 'ymax': 20037507.067161843,
16 | 'spatialReference': {
17 | 'cs': 'pcs',
18 | 'wkid': 102100
19 | }
20 | },
21 | 'fullExtent': {
22 | 'xmin': -20037507.067161843,
23 | 'ymin': -20037507.067161843,
24 | 'xmax': 20037507.067161843,
25 | 'ymax': 20037507.067161843,
26 | 'spatialReference': {
27 | 'cs': 'pcs',
28 | 'wkid': 102100
29 | }
30 | },
31 | 'minScale': 0,
32 | 'maxScale': 0,
33 | 'tileInfo': {
34 | 'rows': 512,
35 | 'cols': 512,
36 | 'dpi': 96,
37 | 'format': 'pbf',
38 | 'origin': {
39 | 'x': -20037508.342787,
40 | 'y': 20037508.342787
41 | },
42 | 'spatialReference': {
43 | 'wkid': 102100,
44 | 'latestWkid': 3857
45 | },
46 | 'lods': [
47 | {
48 | 'level': 0,
49 | 'resolution': 78271.51696399994,
50 | 'scale': 295828763.795777
51 | },
52 | {
53 | 'level': 1,
54 | 'resolution': 39135.75848200009,
55 | 'scale': 147914381.897889
56 | },
57 | {
58 | 'level': 2,
59 | 'resolution': 19567.87924099992,
60 | 'scale': 73957190.948944
61 | },
62 | {
63 | 'level': 3,
64 | 'resolution': 9783.93962049996,
65 | 'scale': 36978595.474472
66 | },
67 | {
68 | 'level': 4,
69 | 'resolution': 4891.96981024998,
70 | 'scale': 18489297.737236
71 | },
72 | {
73 | 'level': 5,
74 | 'resolution': 2445.98490512499,
75 | 'scale': 9244648.868618
76 | },
77 | {
78 | 'level': 6,
79 | 'resolution': 1222.992452562495,
80 | 'scale': 4622324.434309
81 | },
82 | {
83 | 'level': 7,
84 | 'resolution': 611.4962262813797,
85 | 'scale': 2311162.217155
86 | },
87 | {
88 | 'level': 8,
89 | 'resolution': 305.74811314055756,
90 | 'scale': 1155581.108577
91 | },
92 | {
93 | 'level': 9,
94 | 'resolution': 152.87405657041106,
95 | 'scale': 577790.554289
96 | },
97 | {
98 | 'level': 10,
99 | 'resolution': 76.43702828507324,
100 | 'scale': 288895.277144
101 | },
102 | {
103 | 'level': 11,
104 | 'resolution': 38.21851414253662,
105 | 'scale': 144447.638572
106 | },
107 | {
108 | 'level': 12,
109 | 'resolution': 19.10925707126831,
110 | 'scale': 72223.819286
111 | },
112 | {
113 | 'level': 13,
114 | 'resolution': 9.554628535634155,
115 | 'scale': 36111.909643
116 | },
117 | {
118 | 'level': 14,
119 | 'resolution': 4.77731426794937,
120 | 'scale': 18055.954822
121 | },
122 | {
123 | 'level': 15,
124 | 'resolution': 2.388657133974685,
125 | 'scale': 9027.977411
126 | },
127 | {
128 | 'level': 16,
129 | 'resolution': 1.1943285668550503,
130 | 'scale': 4513.988705
131 | },
132 | {
133 | 'level': 17,
134 | 'resolution': 0.5971642835598172,
135 | 'scale': 2256.994353
136 | },
137 | {
138 | 'level': 18,
139 | 'resolution': 0.29858214164761665,
140 | 'scale': 1128.497176
141 | },
142 | {
143 | 'level': 19,
144 | 'resolution': 0.14929107082380833,
145 | 'scale': 564.248588
146 | },
147 | {
148 | 'level': 20,
149 | 'resolution': 0.07464553541190416,
150 | 'scale': 282.124294
151 | },
152 | {
153 | 'level': 21,
154 | 'resolution': 0.03732276770595208,
155 | 'scale': 141.062147
156 | },
157 | {
158 | 'level': 22,
159 | 'resolution': 0.01866138385297604,
160 | 'scale': 70.5310735
161 | }
162 | ]
163 | },
164 | 'resourceInfo': {
165 | 'styleVersion': 8,
166 | 'tileCompression': 'gzip',
167 | 'cacheInfo': {
168 | 'storageInfo': {
169 | 'packetSize': 128,
170 | 'storageFormat': 'compactV2'
171 | }
172 | }
173 | },
174 | 'serviceItemId': 'na',
175 | 'minLOD': 0,
176 | 'maxLOD': 16,
177 | 'maxExportTilesCount': 10000
178 | }
179 |
--------------------------------------------------------------------------------
/src/esri-template-root.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | 'version': 8,
3 | 'sources': {
4 | 'esri': {
5 | 'type': 'vector'
6 | }
7 | },
8 | 'layers': [
9 | {
10 | 'source': 'esri',
11 | 'source-layer': 'trees',
12 | 'minzoom': 0,
13 | 'layout': {}
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | const serve = require('./serve')
2 | const metadata = require('./metadata')
3 | const esriMetadata = require('./esri-metadata')
4 | const esriRoot = require('./esri-root')
5 |
6 | function VectorTileServer () {}
7 | VectorTileServer.version = require('../package.json').version
8 | VectorTileServer.type = 'output'
9 | VectorTileServer.routes = [
10 | {
11 | path: 'VectorTileServer/:z([0-9]+)/:x([0-9]+)/:y([0-9]+).pbf',
12 | methods: ['get', 'post'],
13 | handler: 'serve'
14 | },
15 | {
16 | path: 'VectorTileServer/tiles.json',
17 | methods: ['get'],
18 | handler: 'metadata'
19 | },
20 | {
21 | path: '$namespace/rest/services/$providerParams/VectorTileServer/:z([0-9]+)/:x([0-9]+)/:y([0-9]+).pbf',
22 | methods: ['get', 'post'],
23 | handler: 'serve'
24 | },
25 | {
26 | path: '$namespace/rest/services/$providerParams/VectorTileServer',
27 | methods: ['get', 'post'],
28 | handler: 'esriMetadata'
29 | },
30 | {
31 | path: '$namespace/rest/services/$providerParams/VectorTileServer/',
32 | methods: ['get', 'post'],
33 | handler: 'esriMetadata'
34 | },
35 | {
36 | path: '$namespace/rest/services/$providerParams/VectorTileServer/resources/styles/root.json',
37 | methods: ['get'],
38 | handler: 'esriRoot'
39 | }
40 | ]
41 |
42 | VectorTileServer.prototype.serve = serve
43 |
44 | VectorTileServer.prototype.metadata = metadata
45 |
46 | VectorTileServer.prototype.esriMetadata = esriMetadata
47 |
48 | VectorTileServer.prototype.esriRoot = esriRoot
49 |
50 | module.exports = VectorTileServer
51 |
--------------------------------------------------------------------------------
/src/metadata.js:
--------------------------------------------------------------------------------
1 | const esriExtent = require('esri-extent')
2 | const Winnow = require('winnow')
3 | const { getTileSetKey } = require('./utils')
4 |
5 | /**
6 | * Create "center" value for metadata
7 | * @param {object} extent
8 | */
9 | function center (extent) {
10 | const x = (extent.xmax - extent.xmin) / 2
11 | const y = (extent.ymax - extent.ymin) / 2
12 | return `${x},${y},10` // @TODO - calculate best zoom level for this extent
13 | }
14 |
15 | module.exports = function (req, res) {
16 | const tileSetKey = getTileSetKey(req.params.host, req.params.id)
17 | this.model.pull(req, (e, geojson) => {
18 | if (e) return res.status(500).json(e)
19 | if (!geojson) return res.status(404).send()
20 | const metadata = Winnow.query(geojson).metadata
21 | const extent = esriExtent(geojson)
22 |
23 | const json = {
24 | attribution: metadata.attribution,
25 | bounds: `${extent.xmin},${extent.ymin},${extent.xmax},${extent.ymax}`,
26 | center: center(extent),
27 | created: metadata.created,
28 | description: metadata.description,
29 | filesize: 0,
30 | fillzoom: 8,
31 | format: 'pbf',
32 | id: metadata.name || tileSetKey,
33 | name: metadata.name || tileSetKey,
34 | private: false,
35 | scheme: 'zxy',
36 | tilejson: '2.2.0',
37 | tiles: [ `${req.protocol}://${req.headers.host || req.host}${req.path.replace('tiles.json', '{z}/{x}/{y}.pbf')}` ],
38 | vector_layers: [
39 | {
40 | description: metadata.descriptions,
41 | fields: formatFields(metadata.fields),
42 | id: tileSetKey,
43 | source: metadata.source,
44 | source_name: metadata.source
45 | }
46 | ],
47 | webpage: metadata.webpage
48 | }
49 | res.status(200).json(json)
50 | })
51 | }
52 |
53 | function formatFields (inFields) {
54 | return inFields.reduce((fields, field) => {
55 | fields[field.name] = field.description || field.type
56 | return fields
57 | }, {})
58 | }
59 |
--------------------------------------------------------------------------------
/src/serve.js:
--------------------------------------------------------------------------------
1 | const _ = require('lodash')
2 | const geojsonVT = require('geojson-vt')
3 | const vtpbf = require('vt-pbf')
4 | const Logger = require('@koopjs/logger')
5 | const config = require('config')
6 | const tileSetConfig = require('./tile-set-config')
7 | const log = new Logger()
8 | const Utils = require('./utils')
9 | const TileSetsCache = require('./tile-sets-cache')
10 |
11 | const useTileSetCache = _.get(config, 'koopOutputVectorTiles.cache', true)
12 |
13 | // Tile response headers
14 | const responseHeaders = {
15 | 'Content-Type': _.get(config, 'koopOutputVectorTiles.contentType', 'application/x-protobuf'),
16 | 'Cache-Control': `public, max-age: ${_.get(config, 'koopOutputVectorTiles.maxAge', 3600)}`
17 | }
18 |
19 | const tileSetsCache = new TileSetsCache({ ttl: _.get(config, 'koopOutputVectorTiles.cacheExpiration') })
20 |
21 | function getPbfTile (key, data, z, y, x, options = {}) {
22 | let tileSet
23 |
24 | // Use in-memory tileset cache if configured, otherwise generate tile set on-the-fly
25 | if (useTileSetCache) {
26 | tileSet = tileSetsCache.retrieve(key)
27 | if (!tileSet) tileSet = tileSetsCache.upsert(key, data)
28 | } else tileSet = geojsonVT(data, tileSetConfig)
29 |
30 | // Get tile from tile set
31 | const tile = tileSet.getTile(z, x, y)
32 |
33 | if (!tile) return
34 |
35 | // Make pbf
36 | return Buffer.from(vtpbf.fromGeojsonVt({
37 | [key]: tile
38 | }))
39 | }
40 |
41 | module.exports = function (req, res) {
42 | this.model.pull(req, (e, data) => {
43 | if (!data) return res.status(404).send()
44 |
45 | const start = Date.now()
46 |
47 | // Error from provider
48 | if (e) return res.status(e.code || 500).json({ error: e.message })
49 |
50 | // Extract Tile indicies
51 | const { z, x, y } = _.chain(req.params)
52 | .pick(['z', 'y', 'x'])
53 | .mapValues(index => { return Number(index) })
54 | .value()
55 |
56 | // Make key for the cached tile layer
57 | const key = Utils.getTileSetKey(req.params.host, req.params.id)
58 |
59 | // Get PBF
60 | const pbfTile = getPbfTile(key, data, z, y, x)
61 |
62 | if (!pbfTile) return res.status(204).send()
63 |
64 | log.debug(`output=vector-tiles: ${key}, tile=${z},${x},${y} features=${data.features.length} duration=${(Date.now() - start) / 1000} seconds`)
65 | res.set(responseHeaders).status(200).send(pbfTile)
66 | })
67 | }
68 |
--------------------------------------------------------------------------------
/src/tile-set-config.js:
--------------------------------------------------------------------------------
1 | const _ = require('lodash')
2 | const config = require('config')
3 | // geojson-vt options; anything undefined will use geojsonVT defaults
4 | const settings = {
5 | maxZoom: _.get(config, 'koopOutputVectorTiles.geojsonVT.maxZoom'), // max zoom to preserve detail on; can't be higher than 24
6 | tolerance: _.get(config, 'koopOutputVectorTiles.geojsonVT.tolerance'), // simplification tolerance (higher means simpler)
7 | extent: _.get(config, 'koopOutputVectorTiles.geojsonVT.extent'), // tile extent (both width and height)
8 | buffer: _.get(config, 'koopOutputVectorTiles.geojsonVT.buffer'), // 64 is the original default, using a higher number like 512, 1024 or 2048 gets rid of some geojson artifacts but increases the tilesSetCache size // tile buffer on each side
9 | debug: _.get(config, 'koopOutputVectorTiles.geojsonVT.debug'), // logging level (0 to disable, 1 or 2)
10 | lineMetrics: _.get(config, 'koopOutputVectorTiles.geojsonVT.lineMetrics'), // whether to enable line metrics tracking for LineString/MultiLineString features
11 | promoteId: _.get(config, 'koopOutputVectorTiles.geojsonVT.promoteId'), // name of a feature property to promote to feature.id. Cannot be used with `generateId`
12 | generateId: _.get(config, 'koopOutputVectorTiles.geojsonVT.generateId'), // whether to generate feature ids. Cannot be used with `promoteId`
13 | indexMaxZoom: _.get(config, 'koopOutputVectorTiles.geojsonVT.indexMaxZoom'), // max zoom in the initial tile index
14 | indexMaxPoints: _.get(config, 'koopOutputVectorTiles.geojsonVT.indexMaxPoints') // max number of points per tile in the index
15 | }
16 |
17 | module.exports = _.omitBy(settings, _.isUndefined)
18 |
--------------------------------------------------------------------------------
/src/tile-sets-cache.js:
--------------------------------------------------------------------------------
1 | const geojsonVT = require('geojson-vt')
2 | const tileSetConfig = require('./tile-set-config')
3 |
4 | // In-memory cache for geojsonVT results
5 | class TileSetCache {
6 | constructor (options = {}) {
7 | this.tileSetTtl = (options.ttl || 300) * 1000
8 | this.tileSets = new Map()
9 | }
10 |
11 | /**
12 | * Upsert data to cache
13 | * @param {string} key
14 | * @param {object} geojson
15 | */
16 | upsert (key, geojson) {
17 | const tileSet = geojsonVT(geojson, tileSetConfig)
18 | this.tileSets.set(key, {
19 | data: tileSet,
20 | expirationTimestamp: Date.now() + this.tileSetTtl
21 | })
22 | return tileSet
23 | }
24 |
25 | /**
26 | * Retrieve data from cache
27 | * @param {string} key
28 | */
29 | retrieve (key) {
30 | const tileSet = this.tileSets.get(key)
31 | if (tileSet && tileSet.expirationTimestamp > Date.now()) return tileSet.data
32 | }
33 | }
34 |
35 | module.exports = TileSetCache
36 |
--------------------------------------------------------------------------------
/src/utils.js:
--------------------------------------------------------------------------------
1 | const Utils = {}
2 |
3 | /**
4 | * Generate a tile set key/id from Koop host and id parameters
5 | */
6 | Utils.getTileSetKey = function getTileSetKey (host, id) {
7 | const fragments = []
8 | if (host) fragments.push(host)
9 | if (id) fragments.push(id)
10 | if (fragments.length > 0) return fragments.join('-')
11 | return '_'
12 | }
13 |
14 | module.exports = Utils
15 |
--------------------------------------------------------------------------------
/test/esri-metadata.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const _ = require('lodash')
3 | const esriMetadata = require('../src/esri-metadata')
4 | const fixtureGeojson = _.cloneDeep(require('./fixtures/trees.json'))
5 | const fixtureEsriMetadataResult = require('./fixtures/esri-metadata-result.json')
6 |
7 | fixtureGeojson.metadata = {
8 | title: 'Koop File GeoJSON',
9 | id: 'trees',
10 | name: 'Test data'
11 | }
12 |
13 | let callbackErr = null
14 | let callbackData = fixtureGeojson
15 |
16 | function TestModel () {
17 | this.model = {
18 | pull: function (req, callback) {
19 | callback(callbackErr, callbackData)
20 | }
21 | }
22 | }
23 |
24 | TestModel.prototype.esriMetadata = esriMetadata
25 |
26 | const testModel = new TestModel()
27 |
28 | test('esriMetadata - success', t => {
29 | const req = {
30 | params: { z: 0, x: 0, y: 0 },
31 | headers: {},
32 | path: '/test/VectorTileServer',
33 | protocol: 'http',
34 | host: 'example.com'
35 | }
36 | const res = {
37 | status: (code) => {
38 | t.equals(code, 200, 'correct status code')
39 | return res
40 | },
41 | json: (data) => {
42 | t.deepEquals(data, fixtureEsriMetadataResult, 'esriMetadata is sent')
43 | return res
44 | }
45 | }
46 | testModel.esriMetadata(req, res)
47 | t.end()
48 | })
49 |
50 | test('esriMetadata - error handling', t => {
51 | const req = {
52 | params: { id: 'test' }
53 | }
54 | const res = {
55 | status: (code) => {
56 | t.equals(code, 500, 'correct status code')
57 | return res
58 | },
59 | json: (data) => {
60 | t.equals(data.message, 'Internal server error', 'has error message')
61 | return res
62 | }
63 | }
64 | callbackErr = new Error('Internal server error')
65 | testModel.esriMetadata(req, res)
66 | t.end()
67 | })
68 |
69 | test('esriMetadata - 404 handling', t => {
70 | const req = {
71 | params: { id: 'test' }
72 | }
73 | const res = {
74 | status: (code) => {
75 | t.equals(code, 404, 'correct status code')
76 | return res
77 | },
78 | send: () => {
79 | t.pass('404 sent')
80 | return res
81 | }
82 | }
83 | callbackErr = null
84 | callbackData = null
85 | testModel.esriMetadata(req, res)
86 | t.end()
87 | })
88 |
--------------------------------------------------------------------------------
/test/esri-rendering-info.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const proxyquire = require('proxyquire')
3 | const modulePath = '../src/esri-rendering-info'
4 | const configStub = {}
5 | const esriRenderingInfo = proxyquire(modulePath, {
6 | 'config': configStub
7 | })
8 |
9 | test('esriRenderingInfo - types "circle" and "Point" should return defaults', t => {
10 | t.plan(2)
11 | t.deepEquals(esriRenderingInfo('Point'), { type: 'circle', paint: { 'circle-radius': 3, 'circle-color': '#007cbf' } }, 'returns default rendering info')
12 | t.deepEquals(esriRenderingInfo('circle'), { type: 'circle', paint: { 'circle-radius': 3, 'circle-color': '#007cbf' } }, 'returns default rendering info')
13 | })
14 |
15 | test('esriRenderingInfo - types "line", "LineString", and "MultiLineString" should return defaults', t => {
16 | t.plan(3)
17 | t.deepEquals(esriRenderingInfo('MultiLineString'), { type: 'line', paint: { 'line-width': 2, 'line-color': '#FF0000' } }, 'returns default rendering info')
18 | t.deepEquals(esriRenderingInfo('LineString'), { type: 'line', paint: { 'line-width': 2, 'line-color': '#FF0000' } }, 'returns default rendering info')
19 | t.deepEquals(esriRenderingInfo('line'), { type: 'line', paint: { 'line-width': 2, 'line-color': '#FF0000' } }, 'returns default rendering info')
20 | })
21 |
22 | test('esriRenderingInfo - types "fill", "Polygon", and "MultiPolygon" should return defaults', t => {
23 | t.plan(3)
24 | t.deepEquals(esriRenderingInfo('MultiPolygon'), { type: 'fill', paint: { 'fill-opacity': 0.5, 'fill-color': '#008000' } }, 'returns default rendering info')
25 | t.deepEquals(esriRenderingInfo('Polygon'), { type: 'fill', paint: { 'fill-opacity': 0.5, 'fill-color': '#008000' } }, 'returns default rendering info')
26 | t.deepEquals(esriRenderingInfo('fill'), { type: 'fill', paint: { 'fill-opacity': 0.5, 'fill-color': '#008000' } }, 'returns default rendering info')
27 | })
28 |
29 | test('esriRenderingInfo - point types should return configured properties', t => {
30 | t.plan(1)
31 | const esriRenderingInfo = proxyquire(modulePath, {
32 | 'config': {
33 | koopOutputVectorTiles: {
34 | circle: { paint: { 'circle-radius': 7 } }
35 | }
36 | }
37 | })
38 | t.deepEquals(esriRenderingInfo('Point'), { type: 'circle', paint: { 'circle-radius': 7, 'circle-color': '#007cbf' } }, 'returns configured rendering info')
39 | })
40 |
41 | test('esriRenderingInfo - line types should return passed in properties', t => {
42 | t.plan(1)
43 | const esriRenderingInfo = proxyquire(modulePath, {
44 | 'config': {
45 | koopOutputVectorTiles: {
46 | line: { paint: { 'line-width': 7 } }
47 | }
48 | }
49 | })
50 | t.deepEquals(esriRenderingInfo('LineString'), { type: 'line', paint: { 'line-width': 7, 'line-color': '#FF0000' } }, 'returns configured rendering info')
51 | })
52 |
53 | test('esriRenderingInfo - polygon types should return passed in properties', t => {
54 | t.plan(1)
55 | const esriRenderingInfo = proxyquire(modulePath, {
56 | 'config': {
57 | koopOutputVectorTiles: {
58 | fill: { paint: { 'fill-opacity': 0.25 } }
59 | }
60 | }
61 | })
62 | t.deepEquals(esriRenderingInfo('Polygon'), { type: 'fill', paint: { 'fill-opacity': 0.25, 'fill-color': '#008000' } }, 'returns configured rendering info')
63 | })
64 |
65 | test('esriRenderingInfo - point types should return passed in properties', t => {
66 | t.plan(2)
67 | t.deepEquals(esriRenderingInfo('Point', { 'circle-radius': 6 }), { type: 'circle', paint: { 'circle-radius': 6, 'circle-color': '#007cbf' } }, 'returns combined rendering info')
68 | t.deepEquals(esriRenderingInfo('Point', {'circle-color': '#000000'}), { type: 'circle', paint: { 'circle-radius': 3, 'circle-color': '#000000' } }, 'returns combined rendering info')
69 | })
70 |
71 | test('esriRenderingInfo - line types should return passed in properties', t => {
72 | t.plan(2)
73 | t.deepEquals(esriRenderingInfo('LineString', { 'line-width': 4 }), { type: 'line', paint: { 'line-width': 4, 'line-color': '#FF0000' } }, 'returns combined rendering info')
74 | t.deepEquals(esriRenderingInfo('LineString', { 'line-color': '#000000' }), { type: 'line', paint: { 'line-width': 2, 'line-color': '#000000' } }, 'returns combined rendering info')
75 | })
76 |
77 | test('esriRenderingInfo - polygon types should return passed in properties', t => {
78 | t.plan(2)
79 | t.deepEquals(esriRenderingInfo('Polygon', { 'fill-opacity': 1 }), { type: 'fill', paint: { 'fill-opacity': 1, 'fill-color': '#008000' } }, 'returns combined rendering info')
80 | t.deepEquals(esriRenderingInfo('Polygon', {'fill-color': '#000000'}), { type: 'fill', paint: { 'fill-opacity': 0.5, 'fill-color': '#000000' } }, 'returns combined rendering info')
81 | })
82 |
--------------------------------------------------------------------------------
/test/esri-root.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const _ = require('lodash')
3 | const esriRoot = require('../src/esri-root')
4 | const fixtureGeojson = _.cloneDeep(require('./fixtures/trees.json'))
5 | fixtureGeojson.metadata = {
6 | title: 'Koop File GeoJSON',
7 | id: 'trees',
8 | name: 'Test data',
9 | vt: {
10 | type: 'circle',
11 | paint: {
12 | 'circle-radius': 8
13 | }
14 | }
15 | }
16 | let callbackErr = null
17 | let callbackData = fixtureGeojson
18 |
19 | function TestModel () {
20 | this.model = {
21 | pull: function (req, callback) {
22 | callback(callbackErr, callbackData)
23 | }
24 | }
25 | }
26 |
27 | TestModel.prototype.esriRoot = esriRoot
28 |
29 | const testModel = new TestModel()
30 |
31 | test('esriRoot - success', t => {
32 | const req = {
33 | params: { id: 'test', z: 0, x: 0, y: 0 },
34 | headers: {},
35 | path: '/test/VectorTileServer/resources/styles/root.json',
36 | protocol: 'http',
37 | host: 'example.com'
38 | }
39 | const res = {
40 | status: (code) => {
41 | t.equals(code, 200, 'correct status code')
42 | return res
43 | },
44 | json: (data) => {
45 | t.deepEquals(data, {
46 | version: 8,
47 | sources: {
48 | esri: {
49 | type: 'vector',
50 | url: 'http://example.com/test/VectorTileServer/'
51 | }
52 | },
53 | layers: [{
54 | source: 'esri',
55 | 'source-layer': 'test',
56 | minzoom: 0,
57 | layout: {},
58 | id: 'test',
59 | type: 'circle',
60 | paint: {
61 | 'circle-radius': 8,
62 | 'circle-color': '#007cbf'
63 | }
64 | }]
65 | }, 'root.json data is sent')
66 | return res
67 | }
68 | }
69 | testModel.esriRoot(req, res)
70 | t.end()
71 | })
72 |
73 | test('esriRoot - error handling', t => {
74 | const req = {
75 | params: { id: 'test', z: 0, x: 0, y: 0 }
76 | }
77 | const res = {
78 | status: (code) => {
79 | t.equals(code, 500, 'correct status code')
80 | return res
81 | },
82 | json: (data) => {
83 | t.equals(data.message, 'Internal server error', 'has error message')
84 | return res
85 | }
86 | }
87 | callbackErr = new Error('Internal server error')
88 | testModel.esriRoot(req, res)
89 | t.end()
90 | })
91 |
92 | test('esriRoot - 404 handling', t => {
93 | const req = {
94 | params: { id: 'test', z: 0, x: 0, y: 0 }
95 | }
96 | const res = {
97 | status: (code) => {
98 | t.equals(code, 404, 'correct status code')
99 | return res
100 | },
101 | send: () => {
102 | t.pass('404 sent')
103 | return res
104 | }
105 | }
106 | callbackErr = null
107 | callbackData = null
108 | testModel.esriRoot(req, res)
109 | t.end()
110 | })
111 |
--------------------------------------------------------------------------------
/test/fixtures/esri-metadata-result.json:
--------------------------------------------------------------------------------
1 | {
2 | "currentVersion": 10.61,
3 | "name": "Test data",
4 | "capabilities": "TilesOnly",
5 | "type": "indexedVector",
6 | "defaultStyles": "/resources/styles",
7 | "tiles": [
8 | "/{z}/{x}/{y}.pbf"
9 | ],
10 | "exportTilesAllowed": true,
11 | "initialExtent": {
12 | "xmin": -13156344.910207387,
13 | "ymin": 4044663.9691695776,
14 | "xmax": -13143281.94615243,
15 | "ymax": 4056192.3525933097,
16 | "spatialReference": {
17 | "cs": "pcs",
18 | "wkid": 102100
19 | }
20 | },
21 | "fullExtent": {
22 | "xmin": -13156344.910207387,
23 | "ymin": 4044663.9691695776,
24 | "xmax": -13143281.94615243,
25 | "ymax": 4056192.3525933097,
26 | "spatialReference": {
27 | "cs": "pcs",
28 | "wkid": 102100
29 | }
30 | },
31 | "minScale": 0,
32 | "maxScale": 0,
33 | "tileInfo": {
34 | "rows": 512,
35 | "cols": 512,
36 | "dpi": 96,
37 | "format": "pbf",
38 | "origin": {
39 | "x": -20037508.342787,
40 | "y": 20037508.342787
41 | },
42 | "spatialReference": {
43 | "wkid": 102100,
44 | "latestWkid": 3857
45 | },
46 | "lods": [
47 | {
48 | "level": 0,
49 | "resolution": 78271.51696399994,
50 | "scale": 295828763.795777
51 | },
52 | {
53 | "level": 1,
54 | "resolution": 39135.75848200009,
55 | "scale": 147914381.897889
56 | },
57 | {
58 | "level": 2,
59 | "resolution": 19567.87924099992,
60 | "scale": 73957190.948944
61 | },
62 | {
63 | "level": 3,
64 | "resolution": 9783.93962049996,
65 | "scale": 36978595.474472
66 | },
67 | {
68 | "level": 4,
69 | "resolution": 4891.96981024998,
70 | "scale": 18489297.737236
71 | },
72 | {
73 | "level": 5,
74 | "resolution": 2445.98490512499,
75 | "scale": 9244648.868618
76 | },
77 | {
78 | "level": 6,
79 | "resolution": 1222.992452562495,
80 | "scale": 4622324.434309
81 | },
82 | {
83 | "level": 7,
84 | "resolution": 611.4962262813797,
85 | "scale": 2311162.217155
86 | },
87 | {
88 | "level": 8,
89 | "resolution": 305.74811314055756,
90 | "scale": 1155581.108577
91 | },
92 | {
93 | "level": 9,
94 | "resolution": 152.87405657041106,
95 | "scale": 577790.554289
96 | },
97 | {
98 | "level": 10,
99 | "resolution": 76.43702828507324,
100 | "scale": 288895.277144
101 | },
102 | {
103 | "level": 11,
104 | "resolution": 38.21851414253662,
105 | "scale": 144447.638572
106 | },
107 | {
108 | "level": 12,
109 | "resolution": 19.10925707126831,
110 | "scale": 72223.819286
111 | },
112 | {
113 | "level": 13,
114 | "resolution": 9.554628535634155,
115 | "scale": 36111.909643
116 | },
117 | {
118 | "level": 14,
119 | "resolution": 4.77731426794937,
120 | "scale": 18055.954822
121 | },
122 | {
123 | "level": 15,
124 | "resolution": 2.388657133974685,
125 | "scale": 9027.977411
126 | },
127 | {
128 | "level": 16,
129 | "resolution": 1.1943285668550503,
130 | "scale": 4513.988705
131 | },
132 | {
133 | "level": 17,
134 | "resolution": 0.5971642835598172,
135 | "scale": 2256.994353
136 | },
137 | {
138 | "level": 18,
139 | "resolution": 0.29858214164761665,
140 | "scale": 1128.497176
141 | },
142 | {
143 | "level": 19,
144 | "resolution": 0.14929107082380833,
145 | "scale": 564.248588
146 | },
147 | {
148 | "level": 20,
149 | "resolution": 0.07464553541190416,
150 | "scale": 282.124294
151 | },
152 | {
153 | "level": 21,
154 | "resolution": 0.03732276770595208,
155 | "scale": 141.062147
156 | },
157 | {
158 | "level": 22,
159 | "resolution": 0.01866138385297604,
160 | "scale": 70.5310735
161 | }
162 | ]
163 | },
164 | "resourceInfo": {
165 | "styleVersion": 8,
166 | "tileCompression": "gzip",
167 | "cacheInfo": {
168 | "storageInfo": {
169 | "packetSize": 128,
170 | "storageFormat": "compactV2"
171 | }
172 | }
173 | },
174 | "serviceItemId": "na",
175 | "minLOD": 0,
176 | "maxLOD": 16,
177 | "maxExportTilesCount": 10000
178 | }
--------------------------------------------------------------------------------
/test/metadata.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const metadata = require('../src/metadata')
3 | const fixture = require('./fixtures/trees.json')
4 | fixture.metadata = {
5 | title: 'Koop File GeoJSON',
6 | id: 'trees',
7 | name: 'Test data',
8 | description: 'Test data description',
9 | attribution: 'Give some credit here',
10 | bounds: 'Bounds from metadata',
11 | source: 'Source from metadata',
12 | webpage: 'Webpage from metadata'
13 |
14 | }
15 | let callbackErr = null
16 | let callbackData = fixture
17 |
18 | function TestModel () {
19 | this.model = {
20 | pull: function (req, callback) {
21 | callback(callbackErr, callbackData)
22 | }
23 | }
24 | }
25 |
26 | TestModel.prototype.metadata = metadata
27 |
28 | const testModel = new TestModel()
29 |
30 | test('metadata - success', t => {
31 | const req = {
32 | params: { z: 0, x: 0, y: 0 },
33 | headers: {},
34 | path: '/test/VectorTileServer/tiles.json',
35 | protocol: 'http',
36 | host: 'example.com'
37 | }
38 | const res = {
39 | status: (code) => {
40 | t.equals(code, 200, 'correct status code')
41 | return res
42 | },
43 | json: (data) => {
44 | t.deepEquals(data, {
45 | attribution: 'Give some credit here',
46 | bounds: '-118.18545715987369,34.11804759286581,-118.06811055720897,34.20374076923347',
47 | center: '0.05867330133236237,0.04284658818383136,10',
48 | created: undefined,
49 | description: 'Test data description',
50 | filesize: 0,
51 | fillzoom: 8,
52 | format: 'pbf',
53 | id: 'Test data',
54 | name: 'Test data',
55 | private: false,
56 | scheme: 'zxy',
57 | tilejson: '2.2.0',
58 | tiles: ['http://example.com/test/VectorTileServer/{z}/{x}/{y}.pbf'],
59 | vector_layers: [{
60 | description: undefined,
61 | fields: {
62 | OBJECTID: 'Integer',
63 | Common_Name: 'String',
64 | Genus: 'String',
65 | Species: 'String',
66 | House_Number: 'Integer',
67 | Street_Direction: 'String',
68 | Street_Name: 'String',
69 | Street_Type: 'String',
70 | Street_Suffix: 'String',
71 | Trunk_Diameter: 'Integer',
72 | Longitude: 'Double',
73 | Latitude: 'Double'
74 | },
75 | id: '_',
76 | source: 'Source from metadata',
77 | source_name: 'Source from metadata'
78 | }],
79 | webpage: 'Webpage from metadata'
80 | }, 'metadata is sent')
81 | return res
82 | }
83 | }
84 | testModel.metadata(req, res)
85 | t.end()
86 | })
87 |
88 | test('metadata - error handling', t => {
89 | const req = {
90 | params: { id: 'test' }
91 | }
92 | const res = {
93 | status: (code) => {
94 | t.equals(code, 500, 'correct status code')
95 | return res
96 | },
97 | json: (data) => {
98 | t.equals(data.message, 'Internal server error', 'has error message')
99 | return res
100 | }
101 | }
102 | callbackErr = new Error('Internal server error')
103 | testModel.metadata(req, res)
104 | t.end()
105 | })
106 |
107 | test('metadata - 404 handling', t => {
108 | const req = {
109 | params: { id: 'test' }
110 | }
111 | const res = {
112 | status: (code) => {
113 | t.equals(code, 404, 'correct status code')
114 | return res
115 | },
116 | send: () => {
117 | t.pass('404 sent')
118 | return res
119 | }
120 | }
121 | callbackErr = null
122 | callbackData = null
123 | testModel.metadata(req, res)
124 | t.end()
125 | })
126 |
--------------------------------------------------------------------------------
/test/serve.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const serve = require('../src/serve')
3 | const fixture = require('./fixtures/trees.json')
4 |
5 | function TestModel () {
6 | this.model = {
7 | pull: function (req, callback) {
8 | callback(null, fixture)
9 | }
10 | }
11 | }
12 |
13 | TestModel.prototype.serve = serve
14 |
15 | const testModel = new TestModel()
16 |
17 | test('serve', t => {
18 | const req = {
19 | params: { z: 0, x: 0, y: 0 }
20 | }
21 | const res = {
22 | status: (code) => {
23 | t.equals(code, 200, 'correct status code')
24 | return res
25 | },
26 | send: (data) => {
27 | t.equals(data instanceof Buffer, true, 'buffer is sent')
28 | t.ok(data.length, true, 'buffer is not empty')
29 | return res
30 | },
31 | set: (headers) => {
32 | t.deepEquals(headers, {
33 | 'Content-Type': 'application/x-protobuf',
34 | 'Cache-Control': `public, max-age: 3600`
35 | }, 'includes expected headers')
36 | return res
37 | }
38 | }
39 | testModel.serve(req, res)
40 | t.end()
41 | })
42 |
43 | test('serve no content', t => {
44 | const req = {
45 | params: { z: 10, x: 0, y: 0 }
46 | }
47 | const res = {
48 | status: (code) => {
49 | t.equals(code, 204, 'correct status code')
50 | return res
51 | },
52 | send: (data) => {
53 | t.notOk(data, 'nothing sent')
54 | return res
55 | }
56 | }
57 | testModel.serve(req, res)
58 | t.end()
59 | })
60 |
--------------------------------------------------------------------------------
/test/tile-sets-cache.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const TileSetsCache = require('../src/tile-sets-cache')
3 | const fixture = require('./fixtures/trees.json')
4 |
5 | test('should upsert geojson as tile set', t => {
6 | t.plan(1)
7 | const tileSetsCache = new TileSetsCache()
8 | const tileSet = tileSetsCache.upsert('key', fixture)
9 | const retrieved = tileSetsCache.retrieve('key')
10 | t.deepEquals(tileSet, retrieved, 'upsert equals retrieved')
11 | })
12 |
13 | test('should return undefined for expired TileSet', t => {
14 | t.plan(1)
15 | const tileSetsCache = new TileSetsCache({ ttl: -1000 })
16 | tileSetsCache.upsert('key', fixture)
17 | const retrieved = tileSetsCache.retrieve('key')
18 | t.notOk(retrieved, 'retrieve returns undefined')
19 | })
20 |
--------------------------------------------------------------------------------
/test/tile-sets-config.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const _ = require('lodash')
3 | const proxyquire = require('proxyquire')
4 | const modulePath = '../src/tile-set-config'
5 | const configStub = {}
6 |
7 | test('tileSetConfig should contain no undefined properties', t => {
8 | t.plan(1)
9 | const tileSetConfig = proxyquire(modulePath, {
10 | 'config': configStub
11 | })
12 | const undefinedKeys = Object.keys(_.pickBy(tileSetConfig, _.isUndefined))
13 | t.equals(undefinedKeys.length, 0, 'no undefinedKeys')
14 | })
15 |
16 | test('tileSetConfig should contain any defined properties', t => {
17 | t.plan(1)
18 | _.set(configStub, 'koopOutputVectorTiles.geojsonVT.maxZoom', 10)
19 | const tileSetConfig = proxyquire(modulePath, {
20 | 'config': configStub
21 | })
22 | const definedKeys = Object.keys(_.omitBy(tileSetConfig, _.isUndefined))
23 | t.equals(definedKeys[0], 'maxZoom', 'has defined keys')
24 | })
25 |
--------------------------------------------------------------------------------
/test/utils.spec.js:
--------------------------------------------------------------------------------
1 | const test = require('tape')
2 | const Utils = require('../src/utils')
3 |
4 | test('Utils.getTileSetKey, with defined host and id args', t => {
5 | t.plan(1)
6 | const result = Utils.getTileSetKey('host_param', 'id_param')
7 | t.equals(result, 'host_param-id_param', 'correct key')
8 | })
9 |
10 | test('Utils.getTileSetKey, with defined host and undefined id args', t => {
11 | t.plan(1)
12 | const result = Utils.getTileSetKey('host_param', undefined)
13 | t.equals(result, 'host_param', 'correct key')
14 | })
15 |
16 | test('Utils.getTileSetKey, with undefined host and defined id args', t => {
17 | t.plan(1)
18 | const result = Utils.getTileSetKey(undefined, 'id_param')
19 | t.equals(result, 'id_param', 'correct key')
20 | })
21 |
22 | test('Utils.getTileSetKey, with undefined host and undefined id args', t => {
23 | t.plan(1)
24 | const result = Utils.getTileSetKey(undefined, undefined)
25 | t.equals(result, '_', 'correct key')
26 | })
27 |
--------------------------------------------------------------------------------