├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github └── workflows │ └── test.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── .prettierrc.js ├── LICENSE ├── README.md ├── doc-files ├── README.md.tmpl ├── featureToH3Set.png ├── h3SetToFeature.png └── h3SetToFeatureCollection.png ├── index.js ├── package.json ├── src └── geojson2h3.js ├── test ├── benchmarks.js ├── geojson2h3.spec.js └── index.js ├── types.d.ts └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "es2015", 4 | "stage-2" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig: http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | indent_style = space 7 | indent_size = 4 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | dist/* 3 | coverage/* 4 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | "prettier" 4 | ], 5 | "extends": [ 6 | "eslint-config-uber-es2015", 7 | "prettier" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | jobs: 10 | tests: 11 | name: Test Node ${{ matrix.node_version }} 12 | runs-on: ubuntu-latest 13 | 14 | strategy: 15 | matrix: 16 | node_version: [10, 12, 14] 17 | 18 | steps: 19 | - uses: actions/checkout@v2.1.1 20 | 21 | - uses: actions/setup-node@v2 22 | with: 23 | node-version: '${{ matrix.node_version }}' 24 | 25 | - name: Tests 26 | run: | 27 | yarn 28 | yarn run dist-test 29 | yarn test-ci 30 | yarn cover 31 | 32 | - uses: coverallsapp/github-action@master 33 | with: 34 | path-to-lcov: ./coverage/lcov.info 35 | github-token: ${{ secrets.GITHUB_TOKEN }} 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.tmp 3 | .DS_Store 4 | coverage/ 5 | node_modules/ 6 | dist/ 7 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .* 2 | *.log 3 | src/ 4 | test/ 5 | coverage/ 6 | node_modules/ 7 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | registry = https://registry.npmjs.org 2 | always-auth = false 3 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 100, 3 | semi: true, 4 | singleQuote: true, 5 | trailingComma: 'none', 6 | bracketSpacing: false 7 | }; 8 | -------------------------------------------------------------------------------- /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 | 3 | 4 | # geojson2h3 5 | 6 | [![test](https://github.com/uber/geojson2h3/workflows/test/badge.svg)](https://github.com/uber/geojson2h3/actions) 7 | [![Coverage Status](https://coveralls.io/repos/github/uber/geojson2h3/badge.svg?branch=master)](https://coveralls.io/github/uber/geojson2h3?branch=master) 8 | [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) 9 | [![npm version](https://badge.fury.io/js/geojson2h3.svg)](https://badge.fury.io/js/geojson2h3) 10 | 11 | The `geojson2h3` library includes a set of utilities for conversion between GeoJSON polygons and [H3 hexagon indexes](https://h3geo.org), using [h3-js](https://github.com/uber/h3-js). 12 | 13 | - Post **bug reports or feature requests** to the [Github Issues page](https://github.com/uber/geojson2h3/issues) 14 | - Ask **questions** by posting to the [H3 tag on StackOverflow](https://stackoverflow.com/questions/tagged/h3) 15 | 16 | ## Installation 17 | 18 | ``` 19 | npm install geojson2h3 20 | ``` 21 | 22 | ## Example Usage 23 | 24 | ```javascript 25 | import geojson2h3 from 'geojson2h3'; 26 | 27 | const polygon = { 28 | type: 'Feature', 29 | geometry: { 30 | type: 'Polygon', 31 | coordinates: [[ 32 | [-122.47485823276713, 37.85878356045377], 33 | [-122.47504834087829, 37.86196795698972], 34 | [-122.47845104316997, 37.86010614563313], 35 | [-122.47485823276713, 37.85878356045377] 36 | ]] 37 | } 38 | }; 39 | 40 | const hexagons = geojson2h3.featureToH3Set(polygon, 10); 41 | // -> ['8a2830855047fff', '8a2830855077fff', '8a283085505ffff', '8a283085506ffff'] 42 | 43 | const feature = geojson2h3.h3SetToFeature(hexagons); 44 | // -> {type: 'Feature', properties: {}, geometry: {type: 'Polygon', coordinates: [...]}} 45 | ``` 46 | 47 | ## API Reference 48 | 49 | 50 | 51 | ## geojson2h3 52 | 53 | * [geojson2h3](#module_geojson2h3) 54 | * [.featureToH3Set(feature, resolution, [options])](#module_geojson2h3.featureToH3Set) ⇒ Array.<String> 55 | * [.h3ToFeature(hexAddress, [properties])](#module_geojson2h3.h3ToFeature) ⇒ Feature 56 | * [.h3SetToFeature(hexagons, [properties])](#module_geojson2h3.h3SetToFeature) ⇒ Feature 57 | * [.h3SetToMultiPolygonFeature(hexagons, [properties])](#module_geojson2h3.h3SetToMultiPolygonFeature) ⇒ Feature 58 | * [.h3SetToFeatureCollection(hexagons, [getProperties])](#module_geojson2h3.h3SetToFeatureCollection) ⇒ FeatureCollection 59 | 60 | 61 | * * * 62 | 63 | 64 | 65 | ### geojson2h3.featureToH3Set(feature, resolution, [options]) ⇒ Array.<String> 66 | Convert a GeoJSON feature to a set of hexagons. *Only hexagons whose centers 67 | fall within the feature will be included.* Note that conversion from GeoJSON 68 | is lossy; the resulting hexagon set only approximately describes the original 69 | shape, at a level of precision determined by the hexagon resolution. 70 | 71 | If the polygon is small in comparison with the chosen resolution, there may be 72 | no cell whose center lies within it, resulting in an empty set. To fall back 73 | to a single H3 cell representing the centroid of the polygon in this case, use 74 | the `ensureOutput` option. 75 | 76 | ![featureToH3Set](./doc-files/featureToH3Set.png) 77 | 78 | **Kind**: static method of [geojson2h3](#module_geojson2h3) 79 | **Returns**: Array.<String> - H3 indexes 80 | 81 | | Param | Type | Description | 82 | | --- | --- | --- | 83 | | feature | Object | Input GeoJSON: type must be either `Feature` or `FeatureCollection`, and geometry type must be either `Polygon` or `MultiPolygon` | 84 | | resolution | Number | Resolution of hexagons, between 0 and 15 | 85 | | [options] | Object | Options | 86 | | [options.ensureOutput] | Boolean | Whether to ensure that at least one cell is returned in the set | 87 | 88 | 89 | * * * 90 | 91 | 92 | 93 | ### geojson2h3.h3ToFeature(hexAddress, [properties]) ⇒ Feature 94 | Convert a single H3 hexagon to a `Polygon` feature 95 | 96 | **Kind**: static method of [geojson2h3](#module_geojson2h3) 97 | **Returns**: Feature - GeoJSON Feature object 98 | 99 | | Param | Type | Description | 100 | | --- | --- | --- | 101 | | hexAddress | String | Hexagon address | 102 | | [properties] | Object | Optional feature properties | 103 | 104 | 105 | * * * 106 | 107 | 108 | 109 | ### geojson2h3.h3SetToFeature(hexagons, [properties]) ⇒ Feature 110 | Convert a set of hexagons to a GeoJSON `Feature` with the set outline(s). The 111 | feature's geometry type will be either `Polygon` or `MultiPolygon` depending on 112 | the number of outlines required for the set. 113 | 114 | ![h3SetToFeature](./doc-files/h3SetToFeature.png) 115 | 116 | **Kind**: static method of [geojson2h3](#module_geojson2h3) 117 | **Returns**: Feature - GeoJSON Feature object 118 | 119 | | Param | Type | Description | 120 | | --- | --- | --- | 121 | | hexagons | Array.<String> | Hexagon addresses | 122 | | [properties] | Object | Optional feature properties | 123 | 124 | 125 | * * * 126 | 127 | 128 | 129 | ### geojson2h3.h3SetToMultiPolygonFeature(hexagons, [properties]) ⇒ Feature 130 | Convert a set of hexagons to a GeoJSON `MultiPolygon` feature with the 131 | outlines of each individual hexagon. 132 | 133 | ![h3SetToMultiPolygonFeature](./doc-files/h3SetToFeatureCollection.png) 134 | 135 | **Kind**: static method of [geojson2h3](#module_geojson2h3) 136 | **Returns**: Feature - GeoJSON Feature object 137 | 138 | | Param | Type | Description | 139 | | --- | --- | --- | 140 | | hexagons | Array.<String> | Hexagon addresses | 141 | | [properties] | Object | Optional feature properties | 142 | 143 | 144 | * * * 145 | 146 | 147 | 148 | ### geojson2h3.h3SetToFeatureCollection(hexagons, [getProperties]) ⇒ FeatureCollection 149 | Convert a set of hexagons to a GeoJSON `FeatureCollection` with each hexagon 150 | in a separate `Polygon` feature with optional properties. 151 | 152 | ![h3SetToFeatureCollection](./doc-files/h3SetToFeatureCollection.png) 153 | 154 | **Kind**: static method of [geojson2h3](#module_geojson2h3) 155 | **Returns**: FeatureCollection - GeoJSON FeatureCollection object 156 | 157 | | Param | Type | Description | 158 | | --- | --- | --- | 159 | | hexagons | Array.<String> | Hexagon addresses | 160 | | [getProperties] | function | Optional function returning properties for a hexagon: f(h3Index) => Object | 161 | 162 | 163 | * * * 164 | 165 | 166 | ## Development 167 | 168 | The `geojson2h3` library uses `yarn` as the preferred package manager. To install the dev dependencies, just run: 169 | 170 | yarn 171 | 172 | To run the tests in both native ES6 (requires Node >= 6) and transpiled ES5: 173 | 174 | yarn test 175 | 176 | To format the code: 177 | 178 | yarn prettier 179 | 180 | To rebuild the API documentation in the README file: 181 | 182 | yarn build-docs 183 | 184 | ## Contributing 185 | 186 | Pull requests and [Github issues](https://github.com/uber/geojson2h3/issues) are welcome. Please include tests for new work, and keep the library test coverage at 100%. Before we can merge your changes, you must agree to the [Uber Contributor License Agreement](http://cla-assistant.io/uber/geojson2h3). 187 | 188 | ## Legal and Licensing 189 | 190 | The `geojson2h3` library is licensed under the [Apache 2.0 License](https://github.com/uber/geojson2h3/blob/master/LICENSE). 191 | -------------------------------------------------------------------------------- /doc-files/README.md.tmpl: -------------------------------------------------------------------------------- 1 | 3 | 4 | # geojson2h3 5 | 6 | [![test](https://github.com/uber/geojson2h3/workflows/test/badge.svg)](https://github.com/uber/geojson2h3/actions) 7 | [![Coverage Status](https://coveralls.io/repos/github/uber/geojson2h3/badge.svg?branch=master)](https://coveralls.io/github/uber/geojson2h3?branch=master) 8 | [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) 9 | [![npm version](https://badge.fury.io/js/geojson2h3.svg)](https://badge.fury.io/js/geojson2h3) 10 | 11 | The `geojson2h3` library includes a set of utilities for conversion between GeoJSON polygons and [H3 hexagon indexes](https://h3geo.org), using [h3-js](https://github.com/uber/h3-js). 12 | 13 | - Post **bug reports or feature requests** to the [Github Issues page](https://github.com/uber/geojson2h3/issues) 14 | - Ask **questions** by posting to the [H3 tag on StackOverflow](https://stackoverflow.com/questions/tagged/h3) 15 | 16 | ## Installation 17 | 18 | ``` 19 | npm install geojson2h3 20 | ``` 21 | 22 | ## Example Usage 23 | 24 | ```javascript 25 | import geojson2h3 from 'geojson2h3'; 26 | 27 | const polygon = { 28 | type: 'Feature', 29 | geometry: { 30 | type: 'Polygon', 31 | coordinates: [[ 32 | [-122.47485823276713, 37.85878356045377], 33 | [-122.47504834087829, 37.86196795698972], 34 | [-122.47845104316997, 37.86010614563313], 35 | [-122.47485823276713, 37.85878356045377] 36 | ]] 37 | } 38 | }; 39 | 40 | const hexagons = geojson2h3.featureToH3Set(polygon, 10); 41 | // -> ['8a2830855047fff', '8a2830855077fff', '8a283085505ffff', '8a283085506ffff'] 42 | 43 | const feature = geojson2h3.h3SetToFeature(hexagons); 44 | // -> {type: 'Feature', properties: {}, geometry: {type: 'Polygon', coordinates: [...]}} 45 | ``` 46 | 47 | ## API Reference 48 | 49 | {{>main}} 50 | 51 | ## Development 52 | 53 | The `geojson2h3` library uses `yarn` as the preferred package manager. To install the dev dependencies, just run: 54 | 55 | yarn 56 | 57 | To run the tests in both native ES6 (requires Node >= 6) and transpiled ES5: 58 | 59 | yarn test 60 | 61 | To format the code: 62 | 63 | yarn prettier 64 | 65 | To rebuild the API documentation in the README file: 66 | 67 | yarn build-docs 68 | 69 | ## Contributing 70 | 71 | Pull requests and [Github issues](https://github.com/uber/geojson2h3/issues) are welcome. Please include tests for new work, and keep the library test coverage at 100%. Before we can merge your changes, you must agree to the [Uber Contributor License Agreement](http://cla-assistant.io/uber/geojson2h3). 72 | 73 | ## Legal and Licensing 74 | 75 | The `geojson2h3` library is licensed under the [Apache 2.0 License](https://github.com/uber/geojson2h3/blob/master/LICENSE). 76 | -------------------------------------------------------------------------------- /doc-files/featureToH3Set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uber/geojson2h3/eada4ab9db3ff04a6fb029d29e669deda5b203e0/doc-files/featureToH3Set.png -------------------------------------------------------------------------------- /doc-files/h3SetToFeature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uber/geojson2h3/eada4ab9db3ff04a6fb029d29e669deda5b203e0/doc-files/h3SetToFeature.png -------------------------------------------------------------------------------- /doc-files/h3SetToFeatureCollection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uber/geojson2h3/eada4ab9db3ff04a6fb029d29e669deda5b203e0/doc-files/h3SetToFeatureCollection.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 Uber Technologies, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module.exports = require('./dist/src/geojson2h3'); 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "geojson2h3", 3 | "description": "Conversion utilities between H3 indexes and GeoJSON", 4 | "version": "1.2.0", 5 | "author": "Nick Rabinowitz ", 6 | "keywords": [ 7 | "h3", 8 | "hexagon", 9 | "geojson" 10 | ], 11 | "license": "Apache-2.0", 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/uber/geojson2h3.git" 15 | }, 16 | "main": "index.js", 17 | "es2015": "lib/geojson2h3.js", 18 | "types": "dist/types.d.ts", 19 | "dependencies": { 20 | "h3-js": "^3.6.1" 21 | }, 22 | "devDependencies": { 23 | "@types/geojson": "^7946.0.7", 24 | "benchmark": "^2.1.4", 25 | "buble": "^0.19.3", 26 | "eslint": "^4.19.1", 27 | "eslint-config-prettier": "^2.9.0", 28 | "eslint-config-uber-es2015": "^3.1.2", 29 | "eslint-plugin-prettier": "^2.6.0", 30 | "faucet": "^0.0.1", 31 | "istanbul": "^0.4.3", 32 | "jsdoc": "^3.6.6", 33 | "jsdoc-to-markdown": "^6.0.1", 34 | "prettier": "^1.19.1", 35 | "tape": "^4.8.0", 36 | "typescript": "^4.1.5" 37 | }, 38 | "scripts": { 39 | "lint": "eslint src test", 40 | "cover": "istanbul cover --report lcov --report html -- test/index.js", 41 | "test": "yarn dist-test && yarn lint && yarn test-es6 && yarn test-dist", 42 | "test-raw": "node test/index.js", 43 | "test-es6": "yarn test-raw | faucet", 44 | "test-dist": "node dist/test/index.js | faucet", 45 | "test-ci": "yarn lint && yarn run test-es6 && yarn run test-dist && yarn run check-prettier && yarn run check-docs && yarn run check-types", 46 | "check-prettier": "yarn prettier && git diff --exit-code", 47 | "check-types": "tsc --strict --noEmit types.d.ts", 48 | "check-docs": "yarn build-docs && git diff --exit-code", 49 | "build-docs": "jsdoc2md --no-cache --global-index-format grouped --separators --template doc-files/README.md.tmpl src/geojson2h3.js > README.md", 50 | "dist": "yarn dist-clean && buble -i src -o dist/src && cp types.d.ts dist", 51 | "dist-clean": "rm -rf dist && mkdir dist", 52 | "dist-test": "yarn dist && buble -i test -o dist/test", 53 | "benchmarks": "yarn dist-test && node dist/test/benchmarks.js", 54 | "prepublish": "yarn dist", 55 | "prettier": "prettier --write 'src/**/*.js' 'test/**/*.js' '*.d.ts'" 56 | }, 57 | "engines": { 58 | "node": ">=4", 59 | "npm": ">=3", 60 | "yarn": ">=1.3.0" 61 | }, 62 | "volta": { 63 | "node": "12.19.0", 64 | "yarn": "1.22.10" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/geojson2h3.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 Uber Technologies, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * @module geojson2h3 19 | */ 20 | 21 | const h3 = require('h3-js'); 22 | 23 | const FEATURE = 'Feature'; 24 | const FEATURE_COLLECTION = 'FeatureCollection'; 25 | const POLYGON = 'Polygon'; 26 | const MULTI_POLYGON = 'MultiPolygon'; 27 | 28 | // ---------------------------------------------------------------------------- 29 | // Private utilities 30 | 31 | /** 32 | * Utility for efficient flattening of arrays. This mutates input, 33 | * flattening into the first array in the list. 34 | * @private 35 | * @param {String[][]} arrays Arrays to flatten 36 | * @return {String} Single array with all values from all input arrays 37 | */ 38 | function flatten(arrays) { 39 | let out = null; 40 | for (let i = 0; i < arrays.length; i++) { 41 | if (out !== null) { 42 | for (let j = 0; j < arrays[i].length; j++) { 43 | out.push(arrays[i][j]); 44 | } 45 | } else { 46 | out = arrays[i]; 47 | } 48 | } 49 | return Array.from(new Set(out)); 50 | } 51 | 52 | /** 53 | * Utility to compute the centroid of a polygon, based on @turf/centroid 54 | * @private 55 | * @param {Number[][][]} polygon Polygon, as an array of loops 56 | * @return {Number[]} lngLat Lng/lat centroid 57 | */ 58 | function centroid(polygon) { 59 | let lngSum = 0; 60 | let latSum = 0; 61 | let count = 0; 62 | const loop = polygon[0]; 63 | for (let i = 0; i < loop.length; i++) { 64 | lngSum += loop[i][0]; 65 | latSum += loop[i][1]; 66 | count++; 67 | } 68 | return [lngSum / count, latSum / count]; 69 | } 70 | 71 | /** 72 | * Convert a GeoJSON feature collection to a set of hexagons. Only hexagons whose centers 73 | * fall within the features will be included. 74 | * @private 75 | * @param {Object} feature GeoJSON FeatureCollection 76 | * @param {Number} resolution Resolution of hexagons, between 0 and 15 77 | * @return {String[]} H3 indexes 78 | */ 79 | function featureCollectionToH3Set(featureCollection, resolution) { 80 | const {features} = featureCollection; 81 | if (!features) { 82 | throw new Error('No features found'); 83 | } 84 | return flatten(features.map(feature => featureToH3Set(feature, resolution))); 85 | } 86 | 87 | // ---------------------------------------------------------------------------- 88 | // Public API functions 89 | 90 | /** 91 | * Convert a GeoJSON feature to a set of hexagons. *Only hexagons whose centers 92 | * fall within the feature will be included.* Note that conversion from GeoJSON 93 | * is lossy; the resulting hexagon set only approximately describes the original 94 | * shape, at a level of precision determined by the hexagon resolution. 95 | * 96 | * If the polygon is small in comparison with the chosen resolution, there may be 97 | * no cell whose center lies within it, resulting in an empty set. To fall back 98 | * to a single H3 cell representing the centroid of the polygon in this case, use 99 | * the `ensureOutput` option. 100 | * 101 | * ![featureToH3Set](./doc-files/featureToH3Set.png) 102 | * @static 103 | * @param {Object} feature Input GeoJSON: type must be either `Feature` or 104 | * `FeatureCollection`, and geometry type must be 105 | * either `Polygon` or `MultiPolygon` 106 | * @param {Number} resolution Resolution of hexagons, between 0 and 15 107 | * @param {Object} [options] Options 108 | * @param {Boolean} [options.ensureOutput] Whether to ensure that at least one 109 | * cell is returned in the set 110 | * @return {String[]} H3 indexes 111 | */ 112 | function featureToH3Set(feature, resolution, options = {}) { 113 | const {type, geometry} = feature; 114 | const geometryType = geometry && geometry.type; 115 | 116 | if (type === FEATURE_COLLECTION) { 117 | return featureCollectionToH3Set(feature, resolution); 118 | } 119 | 120 | if (type !== FEATURE) { 121 | throw new Error(`Unhandled type: ${type}`); 122 | } 123 | if (geometryType !== POLYGON && geometryType !== MULTI_POLYGON) { 124 | throw new Error(`Unhandled geometry type: ${geometryType}`); 125 | } 126 | 127 | // Normalize to MultiPolygon 128 | const polygons = geometryType === POLYGON ? [geometry.coordinates] : geometry.coordinates; 129 | 130 | // Polyfill each polygon and flatten the results 131 | return flatten( 132 | polygons.map(polygon => { 133 | const result = h3.polyfill(polygon, resolution, true); 134 | if (result.length || !options.ensureOutput) { 135 | return result; 136 | } 137 | // If we got no results, index the centroid 138 | const [lng, lat] = centroid(polygon); 139 | return [h3.geoToH3(lat, lng, resolution)]; 140 | }) 141 | ); 142 | } 143 | 144 | /** 145 | * Convert a single H3 hexagon to a `Polygon` feature 146 | * @static 147 | * @param {String} hexAddress Hexagon address 148 | * @param {Object} [properties] Optional feature properties 149 | * @return {Feature} GeoJSON Feature object 150 | */ 151 | function h3ToFeature(h3Index, properties = {}) { 152 | // Wrap in an array for a single-loop polygon 153 | const coordinates = [h3.h3ToGeoBoundary(h3Index, true)]; 154 | return { 155 | type: FEATURE, 156 | id: h3Index, 157 | properties, 158 | geometry: { 159 | type: POLYGON, 160 | coordinates 161 | } 162 | }; 163 | } 164 | 165 | /** 166 | * Convert a set of hexagons to a GeoJSON `Feature` with the set outline(s). The 167 | * feature's geometry type will be either `Polygon` or `MultiPolygon` depending on 168 | * the number of outlines required for the set. 169 | * 170 | * ![h3SetToFeature](./doc-files/h3SetToFeature.png) 171 | * @static 172 | * @param {String[]} hexagons Hexagon addresses 173 | * @param {Object} [properties] Optional feature properties 174 | * @return {Feature} GeoJSON Feature object 175 | */ 176 | function h3SetToFeature(hexagons, properties = {}) { 177 | const polygons = h3.h3SetToMultiPolygon(hexagons, true); 178 | // See if we can unwrap to a simple Polygon. 179 | const isMultiPolygon = polygons.length > 1; 180 | const type = isMultiPolygon ? MULTI_POLYGON : POLYGON; 181 | // MultiPolygon, single polygon, or empty array for an empty hex set 182 | const coordinates = isMultiPolygon ? polygons : polygons[0] || []; 183 | return { 184 | type: FEATURE, 185 | properties, 186 | geometry: { 187 | type, 188 | coordinates 189 | } 190 | }; 191 | } 192 | 193 | /** 194 | * Convert a set of hexagons to a GeoJSON `MultiPolygon` feature with the 195 | * outlines of each individual hexagon. 196 | * 197 | * ![h3SetToMultiPolygonFeature](./doc-files/h3SetToFeatureCollection.png) 198 | * @static 199 | * @param {String[]} hexagons Hexagon addresses 200 | * @param {Object} [properties] Optional feature properties 201 | * @return {Feature} GeoJSON Feature object 202 | */ 203 | function h3SetToMultiPolygonFeature(hexagons, properties = {}) { 204 | const coordinates = hexagons.map(h3Index => 205 | // Wrap in an array for a single-loop polygon 206 | [h3.h3ToGeoBoundary(h3Index, {geoJson: true})] 207 | ); 208 | return { 209 | type: FEATURE, 210 | properties, 211 | geometry: { 212 | type: MULTI_POLYGON, 213 | coordinates 214 | } 215 | }; 216 | } 217 | 218 | /** 219 | * Convert a set of hexagons to a GeoJSON `FeatureCollection` with each hexagon 220 | * in a separate `Polygon` feature with optional properties. 221 | * 222 | * ![h3SetToFeatureCollection](./doc-files/h3SetToFeatureCollection.png) 223 | * @static 224 | * @param {String[]} hexagons Hexagon addresses 225 | * @param {Function} [getProperties] Optional function returning properties 226 | * for a hexagon: f(h3Index) => Object 227 | * @return {FeatureCollection} GeoJSON FeatureCollection object 228 | */ 229 | function h3SetToFeatureCollection(hexagons, getProperties) { 230 | const features = []; 231 | for (let i = 0; i < hexagons.length; i++) { 232 | const h3Index = hexagons[i]; 233 | const properties = getProperties ? getProperties(h3Index) : {}; 234 | features.push(h3ToFeature(h3Index, properties)); 235 | } 236 | return { 237 | type: FEATURE_COLLECTION, 238 | features 239 | }; 240 | } 241 | 242 | module.exports = { 243 | featureToH3Set, 244 | h3ToFeature, 245 | h3SetToFeature, 246 | h3SetToMultiPolygonFeature, 247 | h3SetToFeatureCollection 248 | }; 249 | -------------------------------------------------------------------------------- /test/benchmarks.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 Uber Technologies, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* eslint-env node */ 18 | /* eslint-disable no-console */ 19 | const Benchmark = require('benchmark'); 20 | const h3 = require('h3-js'); 21 | const geojson2h3 = require('../src/geojson2h3'); 22 | 23 | const suite = new Benchmark.Suite(); 24 | 25 | // fixtures 26 | 27 | const h3Index = '89283080ddbffff'; 28 | const ring50 = h3.kRing(h3Index, 50); 29 | const ring50Feature = geojson2h3.h3SetToFeature(ring50, 9); 30 | const ring50Donuts = h3 31 | .kRing(h3Index, 10) 32 | .concat(h3.kRing(h3, 20)) 33 | .concat(h3.kRing(h3, 30)) 34 | .concat(h3.kRing(h3, 40)) 35 | .concat(h3.kRing(h3, 50)); 36 | const ring50DonutsFeature = geojson2h3.h3SetToFeature(ring50Donuts, 9); 37 | 38 | // add tests 39 | 40 | suite.add('h3SetToFeature - ring50', () => { 41 | geojson2h3.h3SetToFeature(ring50); 42 | }); 43 | 44 | suite.add('h3SetToFeature - ring50Donuts', () => { 45 | geojson2h3.h3SetToFeature(ring50Donuts); 46 | }); 47 | 48 | suite.add('featureToH3Set - ring50', () => { 49 | geojson2h3.featureToH3Set(ring50Feature, 9); 50 | }); 51 | 52 | suite.add('featureToH3Set - ring50Donuts', () => { 53 | geojson2h3.featureToH3Set(ring50DonutsFeature, 9); 54 | }); 55 | 56 | // add listeners 57 | suite 58 | .on('cycle', event => { 59 | console.log(String(event.target)); 60 | }) 61 | // run async 62 | .run({async: true}); 63 | -------------------------------------------------------------------------------- /test/geojson2h3.spec.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 Uber Technologies, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | const test = require('tape'); 18 | const h3 = require('h3-js'); 19 | const geojson2h3 = require('../src/geojson2h3'); 20 | 21 | const DEFAULT_RES = 9; 22 | 23 | const { 24 | featureToH3Set, 25 | h3ToFeature, 26 | h3SetToFeature, 27 | h3SetToMultiPolygonFeature, 28 | h3SetToFeatureCollection 29 | } = geojson2h3; 30 | 31 | const GEO_PRECISION = 12; 32 | 33 | // 89283085507ffff 34 | const HEX_OUTLINE_1 = [ 35 | [ 36 | [-122.47485823276713, 37.85878356045377], 37 | [-122.47378734444064, 37.860465621984154], 38 | [-122.47504834087829, 37.86196795698972], 39 | [-122.47738022442019, 37.861788207189115], 40 | [-122.47845104316997, 37.86010614563313], 41 | [-122.4771900479571, 37.85860383390307], 42 | [-122.47485823276713, 37.85878356045377] 43 | ] 44 | ]; 45 | 46 | // 892830855b3ffff 47 | const HEX_OUTLINE_2 = [ 48 | [ 49 | [-122.48147295617736, 37.85187534491365], 50 | [-122.48040229236011, 37.85355749750206], 51 | [-122.48166324644575, 37.85505983954851], 52 | [-122.48399486310532, 37.85488000572598], 53 | [-122.48506545734224, 37.85319785312151], 54 | [-122.48380450450253, 37.851695534355315], 55 | [-122.48147295617736, 37.85187534491365] 56 | ] 57 | ]; 58 | 59 | const POLYGON = [ 60 | [ 61 | [-122.26184837431902, 37.8346695948541], 62 | [-122.26299146613795, 37.8315769200876], 63 | [-122.26690391101923, 37.830681442651134], 64 | [-122.2696734085486, 37.83287856171719], 65 | [-122.26853055028259, 37.835971208076515], 66 | [-122.26461796082103, 37.83686676365336], 67 | [-122.26184837431902, 37.8346695948541] 68 | ] 69 | ]; 70 | const POLYGON_CONTIGUOUS = [ 71 | [ 72 | [-122.25793560913665, 37.835564941293676], 73 | [-122.26184837431902, 37.8346695948541], 74 | [-122.26299146613795, 37.8315769200876], 75 | [-122.26022202614566, 37.82937956347423], 76 | [-122.25630940542779, 37.830274831952494], 77 | [-122.25516608024519, 37.83336753500189], 78 | [-122.25793560913665, 37.835564941293676] 79 | ] 80 | ]; 81 | const POLYGON_NONCONTIGUOUS = [ 82 | [ 83 | [-122.23511849129424, 37.829458676659385], 84 | [-122.23788784659696, 37.831656795184344], 85 | [-122.24180113856318, 37.83076207598435], 86 | [-122.24294493056115, 37.827669316312495], 87 | [-122.24017566397347, 37.825471247577006], 88 | [-122.2362625166653, 37.82636588872747], 89 | [-122.23511849129424, 37.829458676659385] 90 | ] 91 | ]; 92 | 93 | function toLowPrecision(maybeNumber) { 94 | if (typeof maybeNumber === 'number') { 95 | return Number(maybeNumber.toPrecision(GEO_PRECISION)); 96 | } 97 | if (Array.isArray(maybeNumber)) { 98 | return maybeNumber.map(toLowPrecision); 99 | } 100 | if (typeof maybeNumber === 'object') { 101 | /* eslint-disable guard-for-in */ 102 | for (const key in maybeNumber) { 103 | maybeNumber[key] = toLowPrecision(maybeNumber[key]); 104 | } 105 | } 106 | return maybeNumber; 107 | } 108 | 109 | function assertEqualFeatures(assert, feature1, feature2, msg) { 110 | assert.deepEqual( 111 | toLowPrecision(feature1), 112 | toLowPrecision(feature2), 113 | msg || 'Features are equivalent' 114 | ); 115 | } 116 | 117 | function assertSymmetrical(assert, feature, hexagons) { 118 | assert.deepEqual( 119 | featureToH3Set(feature, DEFAULT_RES).sort(), 120 | hexagons.sort(), 121 | 'featureToH3Set matches expected' 122 | ); 123 | assertEqualFeatures( 124 | assert, 125 | h3SetToFeature(hexagons), 126 | feature, 127 | 'h3SetToFeature matches expected' 128 | ); 129 | // not sure this adds anything, but it makes me feel good 130 | assert.deepEqual( 131 | featureToH3Set(h3SetToFeature(hexagons), DEFAULT_RES).sort(), 132 | hexagons.sort(), 133 | 'featureToH3Set round-trip matches expected' 134 | ); 135 | assertEqualFeatures( 136 | assert, 137 | h3SetToFeature(featureToH3Set(feature, DEFAULT_RES).sort()), 138 | feature, 139 | 'h3SetToFeature round-trip matches expected' 140 | ); 141 | } 142 | 143 | test('Symmetrical - Empty', assert => { 144 | const feature = { 145 | type: 'Feature', 146 | properties: {}, 147 | geometry: { 148 | type: 'Polygon', 149 | coordinates: [] 150 | } 151 | }; 152 | const hexagons = []; 153 | 154 | assertSymmetrical(assert, feature, hexagons); 155 | 156 | assert.end(); 157 | }); 158 | 159 | test('Symmetrical - One hexagon', assert => { 160 | const hexagons = ['89283082837ffff']; 161 | const vertices = h3.h3ToGeoBoundary(hexagons[0], true); 162 | const feature = { 163 | type: 'Feature', 164 | properties: {}, 165 | geometry: { 166 | type: 'Polygon', 167 | coordinates: [ 168 | // Note that this is a little brittle; iterating from any 169 | // starting vertex would be correct 170 | [...vertices] 171 | ] 172 | } 173 | }; 174 | 175 | assertSymmetrical(assert, feature, hexagons); 176 | 177 | assert.end(); 178 | }); 179 | 180 | test('Symmetrical - Two hexagons', assert => { 181 | const feature = { 182 | type: 'Feature', 183 | properties: {}, 184 | geometry: { 185 | type: 'Polygon', 186 | coordinates: [ 187 | [ 188 | [-122.42778275313196, 37.775989518837726], 189 | [-122.42652309807923, 37.77448508566524], 190 | [-122.42419231791126, 37.7746633251758], 191 | [-122.42312112449315, 37.776346021077586], 192 | [-122.42438078060647, 37.77785047757876], 193 | [-122.42671162907993, 37.777672214849176], 194 | [-122.42797132395157, 37.7791765946462], 195 | [-122.4303021418057, 37.778998255103545], 196 | [-122.4313731964829, 37.77731555898803], 197 | [-122.43011350268344, 37.77581120251896], 198 | [-122.42778275313196, 37.775989518837726] 199 | ] 200 | ] 201 | } 202 | }; 203 | 204 | const hexagons = ['89283082833ffff', '89283082837ffff']; 205 | 206 | assertSymmetrical(assert, feature, hexagons); 207 | 208 | assert.end(); 209 | }); 210 | 211 | test('featureToH3Set - one contained hex', assert => { 212 | const hexagons = ['89283085507ffff']; 213 | 214 | const feature = { 215 | type: 'Feature', 216 | properties: {}, 217 | geometry: { 218 | type: 'MultiPolygon', 219 | coordinates: HEX_OUTLINE_1 220 | } 221 | }; 222 | 223 | assert.deepEqual( 224 | featureToH3Set(feature, DEFAULT_RES), 225 | hexagons, 226 | 'featureToH3Set matches expected' 227 | ); 228 | 229 | assert.end(); 230 | }); 231 | 232 | const SMALL_POLY = { 233 | type: 'Feature', 234 | properties: {}, 235 | geometry: { 236 | type: 'Polygon', 237 | coordinates: [ 238 | [ 239 | [-122.26985598997341, 37.83598006884068], 240 | [-122.26836960154117, 37.83702107154188], 241 | [-122.26741606933939, 37.835426338014386], 242 | [-122.26985598997341, 37.83598006884068] 243 | ] 244 | ] 245 | } 246 | }; 247 | 248 | test('featureToH3Set - no contained hex centers', assert => { 249 | assert.deepEqual(featureToH3Set(SMALL_POLY, 8), [], 'featureToH3Set matches expected'); 250 | assert.end(); 251 | }); 252 | 253 | test('featureToH3Set - no contained hex centers, ensureOutput', assert => { 254 | const hexagons = ['8828308137fffff']; 255 | assert.deepEqual( 256 | featureToH3Set(SMALL_POLY, 8, {ensureOutput: true}), 257 | hexagons, 258 | 'featureToH3Set matches expected' 259 | ); 260 | assert.end(); 261 | }); 262 | 263 | test('featureToH3Set - Polygon', assert => { 264 | const feature = { 265 | type: 'Feature', 266 | properties: {}, 267 | geometry: { 268 | type: 'Polygon', 269 | coordinates: POLYGON 270 | } 271 | }; 272 | 273 | const hexagons = ['89283081347ffff', '89283081343ffff', '8928308134fffff', '8928308137bffff']; 274 | 275 | assert.deepEqual( 276 | featureToH3Set(feature, DEFAULT_RES).sort(), 277 | hexagons.sort(), 278 | 'featureToH3Set matches expected' 279 | ); 280 | 281 | assert.end(); 282 | }); 283 | 284 | test('featureToH3Set - MultiPolygon, duplicates', assert => { 285 | const feature = { 286 | type: 'Feature', 287 | properties: {}, 288 | geometry: { 289 | type: 'MultiPolygon', 290 | coordinates: [POLYGON, POLYGON] 291 | } 292 | }; 293 | 294 | const hexagons = ['89283081347ffff', '89283081343ffff', '8928308134fffff', '8928308137bffff']; 295 | 296 | assert.deepEqual( 297 | featureToH3Set(feature, DEFAULT_RES).sort(), 298 | hexagons.sort(), 299 | 'featureToH3Set matches expected' 300 | ); 301 | 302 | assert.end(); 303 | }); 304 | 305 | test('featureToH3Set - MultiPolygon, contiguous', assert => { 306 | const feature = { 307 | type: 'Feature', 308 | properties: {}, 309 | geometry: { 310 | type: 'MultiPolygon', 311 | coordinates: [POLYGON, POLYGON_CONTIGUOUS] 312 | } 313 | }; 314 | 315 | const hexagons = [ 316 | '89283081347ffff', 317 | '89283081343ffff', 318 | '8928308134fffff', 319 | '8928308137bffff', 320 | '8928308134bffff', 321 | '8928308ac97ffff', 322 | '8928308135bffff' 323 | ]; 324 | 325 | assert.deepEqual( 326 | featureToH3Set(feature, DEFAULT_RES).sort(), 327 | hexagons.sort(), 328 | 'featureToH3Set matches expected' 329 | ); 330 | 331 | assert.end(); 332 | }); 333 | 334 | test('featureToH3Set - MultiPolygon, non-contiguous', assert => { 335 | const feature = { 336 | type: 'Feature', 337 | properties: {}, 338 | geometry: { 339 | type: 'MultiPolygon', 340 | coordinates: [POLYGON, POLYGON_NONCONTIGUOUS] 341 | } 342 | }; 343 | 344 | const hexagons = [ 345 | '89283081347ffff', 346 | '89283081343ffff', 347 | '8928308134fffff', 348 | '8928308137bffff', 349 | '8928308a1b7ffff' 350 | ]; 351 | 352 | assert.deepEqual( 353 | featureToH3Set(feature, DEFAULT_RES).sort(), 354 | hexagons.sort(), 355 | 'featureToH3Set matches expected' 356 | ); 357 | 358 | assert.end(); 359 | }); 360 | 361 | test('featureToH3Set - FeatureCollection', assert => { 362 | const feature = { 363 | type: 'FeatureCollection', 364 | features: [ 365 | { 366 | type: 'Feature', 367 | geometry: { 368 | type: 'Polygon', 369 | coordinates: POLYGON 370 | } 371 | }, 372 | { 373 | type: 'Feature', 374 | geometry: { 375 | type: 'Polygon', 376 | coordinates: POLYGON_CONTIGUOUS 377 | } 378 | } 379 | ] 380 | }; 381 | 382 | const hexagons = [ 383 | '89283081347ffff', 384 | '89283081343ffff', 385 | '8928308134fffff', 386 | '8928308137bffff', 387 | '8928308134bffff', 388 | '8928308ac97ffff', 389 | '8928308135bffff' 390 | ]; 391 | 392 | assert.deepEqual( 393 | featureToH3Set(feature, DEFAULT_RES).sort(), 394 | hexagons.sort(), 395 | 'featureToH3Set matches expected' 396 | ); 397 | 398 | assert.end(); 399 | }); 400 | 401 | test('featureToH3Set - resolution 10', assert => { 402 | const parentHex = '89283082837ffff'; 403 | const vertices = h3.h3ToGeoBoundary(parentHex, true); 404 | const feature = { 405 | type: 'Feature', 406 | properties: {}, 407 | geometry: { 408 | type: 'Polygon', 409 | coordinates: [ 410 | [ 411 | vertices[2], 412 | vertices[3], 413 | vertices[4], 414 | vertices[5], 415 | vertices[0], 416 | vertices[1], 417 | vertices[2] 418 | ] 419 | ] 420 | } 421 | }; 422 | const resolution = 10; 423 | 424 | const expected = h3.uncompact([parentHex], resolution).sort(); 425 | 426 | assert.equal(expected.length, 7, 'Got expected child hexagons'); 427 | 428 | assert.deepEqual( 429 | featureToH3Set(feature, resolution).sort(), 430 | expected, 431 | 'featureToH3Set matches expected' 432 | ); 433 | 434 | assert.end(); 435 | }); 436 | 437 | test('featureToH3Set - errors', assert => { 438 | assert.throws( 439 | () => featureToH3Set({}), 440 | /Unhandled type/, 441 | 'got expected error for empty object' 442 | ); 443 | 444 | assert.throws( 445 | () => 446 | featureToH3Set({ 447 | type: 'LineString', 448 | coordinates: [] 449 | }), 450 | /Unhandled type/, 451 | 'got expected error for non-feature' 452 | ); 453 | 454 | assert.throws( 455 | () => 456 | featureToH3Set({ 457 | type: 'Feature', 458 | properties: {}, 459 | geometry: { 460 | type: 'LineString', 461 | coordinates: [] 462 | } 463 | }), 464 | /Unhandled geometry type/, 465 | 'got expected error for unknown geometry type' 466 | ); 467 | 468 | assert.throws( 469 | () => 470 | featureToH3Set({ 471 | type: 'FeatureCollection' 472 | }), 473 | /No features/, 474 | 'got expected error for missing features' 475 | ); 476 | 477 | assert.end(); 478 | }); 479 | 480 | test('h3SetToFeature - MultiPolygon', assert => { 481 | const hexagons = ['8928308137bffff', '8928308a1b7ffff']; 482 | const feature = h3SetToFeature(hexagons); 483 | 484 | assert.strictEqual( 485 | feature.geometry.type, 486 | 'MultiPolygon', 487 | 'MultiPolygon generated for two non-contiguous hexagons' 488 | ); 489 | assert.ok(feature.geometry.coordinates.length === 2, 'Generated polygon for each hex'); 490 | assert.ok( 491 | feature.geometry.coordinates[0][0][0][0], 492 | 'Generated MultiPolygon coordinate structure for first loop' 493 | ); 494 | assert.ok( 495 | feature.geometry.coordinates[1][0][0][0], 496 | 'Generated MultiPolygon coordinate structure second loop' 497 | ); 498 | 499 | assert.end(); 500 | }); 501 | 502 | test('h3SetToFeature - Polygon hole', assert => { 503 | const hexagons = [ 504 | '89283082877ffff', 505 | '89283082863ffff', 506 | '8928308287bffff', 507 | '89283082847ffff', 508 | '8928308280bffff', 509 | '8928308280fffff' 510 | ]; 511 | const feature = h3SetToFeature(hexagons); 512 | 513 | assert.strictEqual( 514 | feature.geometry.type, 515 | 'Polygon', 516 | 'Polygon generated for cluster with a hole' 517 | ); 518 | assert.strictEqual(feature.geometry.coordinates.length, 2, 'Generated expected loop count'); 519 | assert.ok( 520 | feature.geometry.coordinates[0].length > feature.geometry.coordinates[1].length, 521 | 'Outer loop is first' 522 | ); 523 | assert.strictEqual(feature.geometry.coordinates[1].length, 7, 'Hole has expected coord count'); 524 | 525 | assert.end(); 526 | }); 527 | 528 | test('h3SetToFeature - two-hole Polygon', assert => { 529 | const hexagons = [ 530 | '89283081357ffff', 531 | '89283081343ffff', 532 | '8928308134fffff', 533 | '8928308137bffff', 534 | '89283081373ffff', 535 | '8928308130bffff', 536 | '892830813c3ffff', 537 | '892830813cbffff', 538 | '89283081353ffff', 539 | '8928308131bffff', 540 | '892830813c7ffff' 541 | ]; 542 | const feature = h3SetToFeature(hexagons); 543 | 544 | assert.strictEqual( 545 | feature.geometry.type, 546 | 'Polygon', 547 | 'Polygon generated for cluster with a hole' 548 | ); 549 | assert.strictEqual(feature.geometry.coordinates.length, 3, 'Generated expected loop count'); 550 | assert.ok( 551 | feature.geometry.coordinates[0].length > feature.geometry.coordinates[1].length, 552 | 'Outer loop is first' 553 | ); 554 | assert.strictEqual(feature.geometry.coordinates[1].length, 7, 'Hole has expected coord count'); 555 | assert.strictEqual(feature.geometry.coordinates[2].length, 7, 'Hole has expected coord count'); 556 | 557 | assert.end(); 558 | }); 559 | 560 | test('h3SetToFeature - multi donut', assert => { 561 | const hexagons = [ 562 | // donut one 563 | '89283082877ffff', 564 | '89283082863ffff', 565 | '8928308287bffff', 566 | '89283082847ffff', 567 | '8928308280bffff', 568 | '8928308280fffff', 569 | // donut two 570 | '892830829b3ffff', 571 | '892830829bbffff', 572 | '8928308298fffff', 573 | '89283082983ffff', 574 | '89283082997ffff', 575 | '89283095a4bffff' 576 | ]; 577 | const feature = h3SetToFeature(hexagons); 578 | const coords = feature.geometry.coordinates; 579 | 580 | assert.strictEqual(coords.length, 2, 'expected polygon count'); 581 | assert.strictEqual(coords[0].length, 2, 'expected loop count for p1'); 582 | assert.strictEqual(coords[1].length, 2, 'expected loop count for p2'); 583 | assert.strictEqual(coords[0][0].length, 19, 'expected outer coord count p1'); 584 | assert.strictEqual(coords[0][1].length, 7, 'expected inner coord count p1'); 585 | assert.strictEqual(coords[1][0].length, 19, 'expected outer coord count p2'); 586 | assert.strictEqual(coords[1][1].length, 7, 'expected inner coord count p2'); 587 | 588 | assert.end(); 589 | }); 590 | 591 | test('h3SetToFeature - nested donut', assert => { 592 | const middle = '89283082877ffff'; 593 | const hexagons = h3.hexRing(middle, 1).concat(h3.hexRing(middle, 3)); 594 | const feature = h3SetToFeature(hexagons); 595 | const coords = feature.geometry.coordinates; 596 | 597 | assert.strictEqual(coords.length, 2, 'expected polygon count'); 598 | assert.strictEqual(coords[0].length, 2, 'expected loop count for p1'); 599 | assert.strictEqual(coords[1].length, 2, 'expected loop count for p2'); 600 | assert.strictEqual(coords[0][0].length, 6 * 3 + 1, 'expected outer coord count p1'); 601 | assert.strictEqual(coords[0][1].length, 7, 'expected inner coord count p1'); 602 | assert.strictEqual(coords[1][0].length, 6 * 7 + 1, 'expected outer coord count p2'); 603 | assert.strictEqual(coords[1][1].length, 6 * 5 + 1, 'expected inner coord count p2'); 604 | 605 | assert.end(); 606 | }); 607 | 608 | test('h3SetToFeature - properties', assert => { 609 | const properties = { 610 | foo: 1, 611 | bar: 'baz' 612 | }; 613 | const hexagons = ['500428f003a9f']; 614 | const feature = h3SetToFeature(hexagons, properties); 615 | 616 | assert.deepEqual(feature.properties, properties, 'Properties included in feature'); 617 | 618 | assert.end(); 619 | }); 620 | 621 | test('h3ToFeature', assert => { 622 | const hexagon = '89283082837ffff'; 623 | const vertices = h3.h3ToGeoBoundary(hexagon, true); 624 | const feature = { 625 | id: hexagon, 626 | type: 'Feature', 627 | properties: {}, 628 | geometry: { 629 | type: 'Polygon', 630 | coordinates: [vertices] 631 | } 632 | }; 633 | 634 | assert.deepEqual(h3ToFeature(hexagon), feature, 'h3ToFeature matches expected'); 635 | 636 | assert.end(); 637 | }); 638 | 639 | test('h3SetToMultiPolygonFeature', assert => { 640 | const hexagons = ['89283085507ffff', '892830855b3ffff']; 641 | 642 | const feature = { 643 | type: 'Feature', 644 | properties: {}, 645 | geometry: { 646 | type: 'MultiPolygon', 647 | coordinates: [HEX_OUTLINE_1, HEX_OUTLINE_2] 648 | } 649 | }; 650 | 651 | const result = h3SetToMultiPolygonFeature(hexagons); 652 | 653 | assertEqualFeatures(assert, result, feature); 654 | 655 | assert.deepEqual( 656 | featureToH3Set(result, DEFAULT_RES), 657 | hexagons, 658 | 'featureToH3Set round-trip matches expected' 659 | ); 660 | 661 | assert.end(); 662 | }); 663 | 664 | test('h3SetToMultiPolygonFeature - properties', assert => { 665 | const properties = { 666 | foo: 1, 667 | bar: 'baz' 668 | }; 669 | const hexagons = ['89283085507ffff']; 670 | const feature = h3SetToMultiPolygonFeature(hexagons, properties); 671 | 672 | assert.deepEqual(feature.properties, properties, 'Properties included in feature'); 673 | 674 | assert.end(); 675 | }); 676 | 677 | test('h3SetToFeatureCollection', assert => { 678 | const hexagons = ['89283085507ffff', '892830855b3ffff']; 679 | 680 | const expected = { 681 | type: 'FeatureCollection', 682 | features: [ 683 | { 684 | type: 'Feature', 685 | id: hexagons[0], 686 | properties: {}, 687 | geometry: { 688 | type: 'Polygon', 689 | coordinates: HEX_OUTLINE_1 690 | } 691 | }, 692 | { 693 | type: 'Feature', 694 | id: hexagons[1], 695 | properties: {}, 696 | geometry: { 697 | type: 'Polygon', 698 | coordinates: HEX_OUTLINE_2 699 | } 700 | } 701 | ] 702 | }; 703 | 704 | const result = h3SetToFeatureCollection(hexagons); 705 | 706 | assertEqualFeatures(assert, result, expected); 707 | 708 | assert.end(); 709 | }); 710 | 711 | test('h3SetToFeatureCollection - properties', assert => { 712 | const hexagons = ['89283085507ffff', '892830855b3ffff']; 713 | const properties = { 714 | '89283085507ffff': {foo: 1}, 715 | '892830855b3ffff': {bar: 'baz'} 716 | }; 717 | 718 | function getProperties(hexAddress) { 719 | return properties[hexAddress]; 720 | } 721 | 722 | const result = h3SetToFeatureCollection(hexagons, getProperties); 723 | 724 | assert.deepEqual( 725 | result.features[0].properties, 726 | properties[hexagons[0]], 727 | 'Properties match expected for hexagon' 728 | ); 729 | 730 | assert.deepEqual( 731 | result.features[1].properties, 732 | properties[hexagons[1]], 733 | 'Properties match expected for hexagon' 734 | ); 735 | 736 | assert.end(); 737 | }); 738 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 Uber Technologies, Inc. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | require('./geojson2h3.spec.js'); 18 | -------------------------------------------------------------------------------- /types.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'geojson2h3' { 2 | import {Feature, FeatureCollection, GeoJsonProperties} from 'geojson'; 3 | 4 | /** 5 | * Convert a GeoJSON feature to a set of hexagons. Only hexagons whose centers 6 | * fall within the feature will be included. Note that conversion from GeoJSON 7 | * is lossy; the resulting hexagon set only approximately describes the original 8 | * shape, at a level of precision determined by the hexagon resolution. 9 | */ 10 | export function featureToH3Set( 11 | feature: Feature | FeatureCollection, 12 | resolution: number, 13 | options?: {ensureOutput?: boolean} 14 | ): string[]; 15 | 16 | /** 17 | * Convert a single H3 hexagon to a GeoJSON `Polygon` feature 18 | */ 19 | export function h3ToFeature(h3Index: string, properties?: GeoJsonProperties): Feature; 20 | 21 | /** 22 | * Convert a set of hexagons to a GeoJSON `Feature` with the set outline(s). The 23 | * feature's geometry type will be either `Polygon` or `MultiPolygon` depending on 24 | * the number of outlines required for the set. 25 | */ 26 | export function h3SetToFeature(hexagons: string[], properties?: GeoJsonProperties): Feature; 27 | 28 | /** 29 | * Convert a set of hexagons to a GeoJSON `MultiPolygon` feature with the 30 | * outlines of each individual hexagon. 31 | */ 32 | export function h3SetToMultiPolygonFeature( 33 | hexagons: string[], 34 | properties?: GeoJsonProperties 35 | ): Feature; 36 | 37 | /** 38 | * Convert a set of hexagons to a GeoJSON `FeatureCollection` with each hexagon 39 | * in a separate `Polygon` feature with optional properties. 40 | */ 41 | export function h3SetToFeatureCollection( 42 | hexagons: string[], 43 | getProperties?: (h3Index: string) => GeoJsonProperties 44 | ): FeatureCollection; 45 | } 46 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/parser@^7.9.4": 6 | version "7.12.17" 7 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.17.tgz#bc85d2d47db38094e5bb268fc761716e7d693848" 8 | integrity sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg== 9 | 10 | "@types/geojson@^7946.0.7": 11 | version "7946.0.7" 12 | resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" 13 | integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== 14 | 15 | abbrev@1: 16 | version "1.1.1" 17 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 18 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 19 | 20 | abbrev@1.0.x: 21 | version "1.0.9" 22 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 23 | integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= 24 | 25 | acorn-dynamic-import@^4.0.0: 26 | version "4.0.0" 27 | resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" 28 | integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== 29 | 30 | acorn-jsx@^3.0.0: 31 | version "3.0.1" 32 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 33 | integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= 34 | dependencies: 35 | acorn "^3.0.4" 36 | 37 | acorn-jsx@^5.0.1: 38 | version "5.3.1" 39 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 40 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 41 | 42 | acorn@^3.0.4: 43 | version "3.3.0" 44 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 45 | integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= 46 | 47 | acorn@^5.5.0: 48 | version "5.7.4" 49 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 50 | integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== 51 | 52 | acorn@^6.1.1: 53 | version "6.4.2" 54 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" 55 | integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== 56 | 57 | ajv-keywords@^2.1.0: 58 | version "2.1.1" 59 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" 60 | integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= 61 | 62 | ajv@^5.2.3, ajv@^5.3.0: 63 | version "5.5.2" 64 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 65 | integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= 66 | dependencies: 67 | co "^4.6.0" 68 | fast-deep-equal "^1.0.0" 69 | fast-json-stable-stringify "^2.0.0" 70 | json-schema-traverse "^0.3.0" 71 | 72 | amdefine@>=0.0.4: 73 | version "1.0.1" 74 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 75 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= 76 | 77 | ansi-escape-sequences@^4.0.0: 78 | version "4.1.0" 79 | resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz#2483c8773f50dd9174dd9557e92b1718f1816097" 80 | integrity sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw== 81 | dependencies: 82 | array-back "^3.0.1" 83 | 84 | ansi-escapes@^3.0.0: 85 | version "3.2.0" 86 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 87 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 88 | 89 | ansi-regex@^2.0.0: 90 | version "2.1.1" 91 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 92 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 93 | 94 | ansi-regex@^3.0.0: 95 | version "3.0.0" 96 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 97 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 98 | 99 | ansi-styles@^2.2.1: 100 | version "2.2.1" 101 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 102 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 103 | 104 | ansi-styles@^3.2.1: 105 | version "3.2.1" 106 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 107 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 108 | dependencies: 109 | color-convert "^1.9.0" 110 | 111 | argparse@^1.0.7: 112 | version "1.0.10" 113 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 114 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 115 | dependencies: 116 | sprintf-js "~1.0.2" 117 | 118 | array-back@^1.0.2, array-back@^1.0.3: 119 | version "1.0.4" 120 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" 121 | integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= 122 | dependencies: 123 | typical "^2.6.0" 124 | 125 | array-back@^2.0.0: 126 | version "2.0.0" 127 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" 128 | integrity sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw== 129 | dependencies: 130 | typical "^2.6.1" 131 | 132 | array-back@^3.0.1: 133 | version "3.1.0" 134 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" 135 | integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== 136 | 137 | array-back@^4.0.1: 138 | version "4.0.1" 139 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" 140 | integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== 141 | 142 | array-back@^5.0.0: 143 | version "5.0.0" 144 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-5.0.0.tgz#e196609edcec48376236d163958df76e659a0d36" 145 | integrity sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw== 146 | 147 | async@1.x: 148 | version "1.5.2" 149 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 150 | integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= 151 | 152 | babel-code-frame@^6.22.0: 153 | version "6.26.0" 154 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 155 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 156 | dependencies: 157 | chalk "^1.1.3" 158 | esutils "^2.0.2" 159 | js-tokens "^3.0.2" 160 | 161 | balanced-match@^1.0.0: 162 | version "1.0.0" 163 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 164 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 165 | 166 | benchmark@^2.1.4: 167 | version "2.1.4" 168 | resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" 169 | integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= 170 | dependencies: 171 | lodash "^4.17.4" 172 | platform "^1.3.3" 173 | 174 | bluebird@^3.7.2: 175 | version "3.7.2" 176 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 177 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 178 | 179 | brace-expansion@^1.1.7: 180 | version "1.1.11" 181 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 182 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 183 | dependencies: 184 | balanced-match "^1.0.0" 185 | concat-map "0.0.1" 186 | 187 | buble@^0.19.3: 188 | version "0.19.8" 189 | resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" 190 | integrity sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA== 191 | dependencies: 192 | acorn "^6.1.1" 193 | acorn-dynamic-import "^4.0.0" 194 | acorn-jsx "^5.0.1" 195 | chalk "^2.4.2" 196 | magic-string "^0.25.3" 197 | minimist "^1.2.0" 198 | os-homedir "^2.0.0" 199 | regexpu-core "^4.5.4" 200 | 201 | buffer-from@^1.0.0: 202 | version "1.1.1" 203 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 204 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 205 | 206 | cache-point@^2.0.0: 207 | version "2.0.0" 208 | resolved "https://registry.yarnpkg.com/cache-point/-/cache-point-2.0.0.tgz#91e03c38da9cfba9d95ac6a34d24cfe6eff8920f" 209 | integrity sha512-4gkeHlFpSKgm3vm2gJN5sPqfmijYRFYCQ6tv5cLw0xVmT6r1z1vd4FNnpuOREco3cBs1G709sZ72LdgddKvL5w== 210 | dependencies: 211 | array-back "^4.0.1" 212 | fs-then-native "^2.0.0" 213 | mkdirp2 "^1.0.4" 214 | 215 | call-bind@^1.0.0, call-bind@^1.0.2: 216 | version "1.0.2" 217 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 218 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 219 | dependencies: 220 | function-bind "^1.1.1" 221 | get-intrinsic "^1.0.2" 222 | 223 | caller-path@^0.1.0: 224 | version "0.1.0" 225 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 226 | integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= 227 | dependencies: 228 | callsites "^0.2.0" 229 | 230 | callsites@^0.2.0: 231 | version "0.2.0" 232 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 233 | integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= 234 | 235 | catharsis@^0.8.11: 236 | version "0.8.11" 237 | resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.11.tgz#d0eb3d2b82b7da7a3ce2efb1a7b00becc6643468" 238 | integrity sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g== 239 | dependencies: 240 | lodash "^4.17.14" 241 | 242 | chalk@^1.1.3: 243 | version "1.1.3" 244 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 245 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 246 | dependencies: 247 | ansi-styles "^2.2.1" 248 | escape-string-regexp "^1.0.2" 249 | has-ansi "^2.0.0" 250 | strip-ansi "^3.0.0" 251 | supports-color "^2.0.0" 252 | 253 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: 254 | version "2.4.2" 255 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 256 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 257 | dependencies: 258 | ansi-styles "^3.2.1" 259 | escape-string-regexp "^1.0.5" 260 | supports-color "^5.3.0" 261 | 262 | chardet@^0.4.0: 263 | version "0.4.2" 264 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 265 | integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= 266 | 267 | circular-json@^0.3.1: 268 | version "0.3.3" 269 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 270 | integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== 271 | 272 | cli-cursor@^2.1.0: 273 | version "2.1.0" 274 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 275 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 276 | dependencies: 277 | restore-cursor "^2.0.0" 278 | 279 | cli-width@^2.0.0: 280 | version "2.2.1" 281 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" 282 | integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== 283 | 284 | co@^4.6.0: 285 | version "4.6.0" 286 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 287 | integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= 288 | 289 | collect-all@^1.0.3: 290 | version "1.0.4" 291 | resolved "https://registry.yarnpkg.com/collect-all/-/collect-all-1.0.4.tgz#50cd7119ac24b8e12a661f0f8c3aa0ea7222ddfc" 292 | integrity sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA== 293 | dependencies: 294 | stream-connect "^1.0.2" 295 | stream-via "^1.0.4" 296 | 297 | color-convert@^1.9.0: 298 | version "1.9.3" 299 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 300 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 301 | dependencies: 302 | color-name "1.1.3" 303 | 304 | color-name@1.1.3: 305 | version "1.1.3" 306 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 307 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 308 | 309 | command-line-args@^5.0.0: 310 | version "5.1.1" 311 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a" 312 | integrity sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg== 313 | dependencies: 314 | array-back "^3.0.1" 315 | find-replace "^3.0.0" 316 | lodash.camelcase "^4.3.0" 317 | typical "^4.0.0" 318 | 319 | command-line-tool@^0.8.0: 320 | version "0.8.0" 321 | resolved "https://registry.yarnpkg.com/command-line-tool/-/command-line-tool-0.8.0.tgz#b00290ef1dfc11cc731dd1f43a92cfa5f21e715b" 322 | integrity sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g== 323 | dependencies: 324 | ansi-escape-sequences "^4.0.0" 325 | array-back "^2.0.0" 326 | command-line-args "^5.0.0" 327 | command-line-usage "^4.1.0" 328 | typical "^2.6.1" 329 | 330 | command-line-usage@^4.1.0: 331 | version "4.1.0" 332 | resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-4.1.0.tgz#a6b3b2e2703b4dcf8bd46ae19e118a9a52972882" 333 | integrity sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g== 334 | dependencies: 335 | ansi-escape-sequences "^4.0.0" 336 | array-back "^2.0.0" 337 | table-layout "^0.4.2" 338 | typical "^2.6.1" 339 | 340 | common-sequence@^2.0.0: 341 | version "2.0.0" 342 | resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-2.0.0.tgz#a4f01aaf5aebd0ac1ce43653e8c8fe6f0ef3a987" 343 | integrity sha512-f0QqPLpRTgMQn/pQIynf+SdE73Lw5Q1jn4hjirHLgH/NJ71TiHjXusV16BmOyuK5rRQ1W2f++II+TFZbQOh4hA== 344 | 345 | concat-map@0.0.1: 346 | version "0.0.1" 347 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 348 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 349 | 350 | concat-stream@^1.6.0: 351 | version "1.6.2" 352 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 353 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 354 | dependencies: 355 | buffer-from "^1.0.0" 356 | inherits "^2.0.3" 357 | readable-stream "^2.2.2" 358 | typedarray "^0.0.6" 359 | 360 | config-master@^3.1.0: 361 | version "3.1.0" 362 | resolved "https://registry.yarnpkg.com/config-master/-/config-master-3.1.0.tgz#667663590505a283bf26a484d68489d74c5485da" 363 | integrity sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo= 364 | dependencies: 365 | walk-back "^2.0.1" 366 | 367 | core-util-is@~1.0.0: 368 | version "1.0.2" 369 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 370 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 371 | 372 | cross-spawn@^5.1.0: 373 | version "5.1.0" 374 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 375 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 376 | dependencies: 377 | lru-cache "^4.0.1" 378 | shebang-command "^1.2.0" 379 | which "^1.2.9" 380 | 381 | debug@^3.1.0: 382 | version "3.2.7" 383 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 384 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 385 | dependencies: 386 | ms "^2.1.1" 387 | 388 | deep-equal@~0.1.0: 389 | version "0.1.2" 390 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-0.1.2.tgz#b246c2b80a570a47c11be1d9bd1070ec878b87ce" 391 | integrity sha1-skbCuApXCkfBG+HZvRBw7IeLh84= 392 | 393 | deep-equal@~1.1.1: 394 | version "1.1.1" 395 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" 396 | integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== 397 | dependencies: 398 | is-arguments "^1.0.4" 399 | is-date-object "^1.0.1" 400 | is-regex "^1.0.4" 401 | object-is "^1.0.1" 402 | object-keys "^1.1.1" 403 | regexp.prototype.flags "^1.2.0" 404 | 405 | deep-extend@~0.6.0: 406 | version "0.6.0" 407 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 408 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 409 | 410 | deep-is@~0.1.3: 411 | version "0.1.3" 412 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 413 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 414 | 415 | define-properties@^1.1.3: 416 | version "1.1.3" 417 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 418 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 419 | dependencies: 420 | object-keys "^1.0.12" 421 | 422 | defined@0.0.0, defined@~0.0.0: 423 | version "0.0.0" 424 | resolved "https://registry.yarnpkg.com/defined/-/defined-0.0.0.tgz#f35eea7d705e933baf13b2f03b3f83d921403b3e" 425 | integrity sha1-817qfXBekzuvE7LwOz+D2SFAOz4= 426 | 427 | defined@~1.0.0: 428 | version "1.0.0" 429 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 430 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 431 | 432 | dmd@^5.0.1: 433 | version "5.0.2" 434 | resolved "https://registry.yarnpkg.com/dmd/-/dmd-5.0.2.tgz#a911c8dbab10ec64fbc134eeb69b933618ebeb07" 435 | integrity sha512-npXsE2+/onRPk/LCrUmx7PcUSqcSVnbrDDMi2nBSawNZ8QXlHE/8xaEZ6pNqPD1lQZv8LGr1xEIpyxP336xyfw== 436 | dependencies: 437 | array-back "^4.0.1" 438 | cache-point "^2.0.0" 439 | common-sequence "^2.0.0" 440 | file-set "^4.0.1" 441 | handlebars "^4.7.6" 442 | marked "^1.1.0" 443 | object-get "^2.1.1" 444 | reduce-flatten "^3.0.0" 445 | reduce-unique "^2.0.1" 446 | reduce-without "^1.0.1" 447 | test-value "^3.0.0" 448 | walk-back "^4.0.0" 449 | 450 | doctrine@^2.1.0: 451 | version "2.1.0" 452 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 453 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 454 | dependencies: 455 | esutils "^2.0.2" 456 | 457 | dotignore@~0.1.2: 458 | version "0.1.2" 459 | resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" 460 | integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== 461 | dependencies: 462 | minimatch "^3.0.4" 463 | 464 | duplexer@~0.1.1: 465 | version "0.1.2" 466 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" 467 | integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== 468 | 469 | entities@~2.0.0: 470 | version "2.0.3" 471 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" 472 | integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== 473 | 474 | es-abstract@^1.18.0-next.1: 475 | version "1.18.0-next.2" 476 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" 477 | integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== 478 | dependencies: 479 | call-bind "^1.0.2" 480 | es-to-primitive "^1.2.1" 481 | function-bind "^1.1.1" 482 | get-intrinsic "^1.0.2" 483 | has "^1.0.3" 484 | has-symbols "^1.0.1" 485 | is-callable "^1.2.2" 486 | is-negative-zero "^2.0.1" 487 | is-regex "^1.1.1" 488 | object-inspect "^1.9.0" 489 | object-keys "^1.1.1" 490 | object.assign "^4.1.2" 491 | string.prototype.trimend "^1.0.3" 492 | string.prototype.trimstart "^1.0.3" 493 | 494 | es-to-primitive@^1.2.1: 495 | version "1.2.1" 496 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 497 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 498 | dependencies: 499 | is-callable "^1.1.4" 500 | is-date-object "^1.0.1" 501 | is-symbol "^1.0.2" 502 | 503 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 504 | version "1.0.5" 505 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 506 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 507 | 508 | escape-string-regexp@^2.0.0: 509 | version "2.0.0" 510 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 511 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 512 | 513 | escodegen@1.8.x: 514 | version "1.8.1" 515 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 516 | integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= 517 | dependencies: 518 | esprima "^2.7.1" 519 | estraverse "^1.9.1" 520 | esutils "^2.0.2" 521 | optionator "^0.8.1" 522 | optionalDependencies: 523 | source-map "~0.2.0" 524 | 525 | eslint-config-prettier@^2.9.0: 526 | version "2.10.0" 527 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b" 528 | integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA== 529 | dependencies: 530 | get-stdin "^5.0.1" 531 | 532 | eslint-config-uber-es2015@^3.1.2: 533 | version "3.1.2" 534 | resolved "https://registry.yarnpkg.com/eslint-config-uber-es2015/-/eslint-config-uber-es2015-3.1.2.tgz#77acd8800141f75dde997a87bb451e3490b07e54" 535 | integrity sha1-d6zYgAFB913emXqHu0UeNJCwflQ= 536 | dependencies: 537 | eslint-config-uber-es5 "^2.0.3" 538 | 539 | eslint-config-uber-es5@^2.0.3: 540 | version "2.0.3" 541 | resolved "https://registry.yarnpkg.com/eslint-config-uber-es5/-/eslint-config-uber-es5-2.0.3.tgz#4991bc80103a7f5a39dc77a7eb13dbd860568fe5" 542 | integrity sha512-lHdjmCumgT72R6t4ZAvjErmOB1l9d6fg1IoX+MZ11F/7CFLMinmsMQW/r9aFWKPMdTkP+rR5NBpSTDnRE20oEw== 543 | 544 | eslint-plugin-prettier@^2.6.0: 545 | version "2.7.0" 546 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" 547 | integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== 548 | dependencies: 549 | fast-diff "^1.1.1" 550 | jest-docblock "^21.0.0" 551 | 552 | eslint-scope@^3.7.1: 553 | version "3.7.3" 554 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" 555 | integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== 556 | dependencies: 557 | esrecurse "^4.1.0" 558 | estraverse "^4.1.1" 559 | 560 | eslint-visitor-keys@^1.0.0: 561 | version "1.3.0" 562 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 563 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 564 | 565 | eslint@^4.19.1: 566 | version "4.19.1" 567 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" 568 | integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== 569 | dependencies: 570 | ajv "^5.3.0" 571 | babel-code-frame "^6.22.0" 572 | chalk "^2.1.0" 573 | concat-stream "^1.6.0" 574 | cross-spawn "^5.1.0" 575 | debug "^3.1.0" 576 | doctrine "^2.1.0" 577 | eslint-scope "^3.7.1" 578 | eslint-visitor-keys "^1.0.0" 579 | espree "^3.5.4" 580 | esquery "^1.0.0" 581 | esutils "^2.0.2" 582 | file-entry-cache "^2.0.0" 583 | functional-red-black-tree "^1.0.1" 584 | glob "^7.1.2" 585 | globals "^11.0.1" 586 | ignore "^3.3.3" 587 | imurmurhash "^0.1.4" 588 | inquirer "^3.0.6" 589 | is-resolvable "^1.0.0" 590 | js-yaml "^3.9.1" 591 | json-stable-stringify-without-jsonify "^1.0.1" 592 | levn "^0.3.0" 593 | lodash "^4.17.4" 594 | minimatch "^3.0.2" 595 | mkdirp "^0.5.1" 596 | natural-compare "^1.4.0" 597 | optionator "^0.8.2" 598 | path-is-inside "^1.0.2" 599 | pluralize "^7.0.0" 600 | progress "^2.0.0" 601 | regexpp "^1.0.1" 602 | require-uncached "^1.0.3" 603 | semver "^5.3.0" 604 | strip-ansi "^4.0.0" 605 | strip-json-comments "~2.0.1" 606 | table "4.0.2" 607 | text-table "~0.2.0" 608 | 609 | espree@^3.5.4: 610 | version "3.5.4" 611 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" 612 | integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== 613 | dependencies: 614 | acorn "^5.5.0" 615 | acorn-jsx "^3.0.0" 616 | 617 | esprima@2.7.x, esprima@^2.7.1: 618 | version "2.7.3" 619 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 620 | integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= 621 | 622 | esprima@^4.0.0: 623 | version "4.0.1" 624 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 625 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 626 | 627 | esquery@^1.0.0: 628 | version "1.4.0" 629 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 630 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 631 | dependencies: 632 | estraverse "^5.1.0" 633 | 634 | esrecurse@^4.1.0: 635 | version "4.3.0" 636 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 637 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 638 | dependencies: 639 | estraverse "^5.2.0" 640 | 641 | estraverse@^1.9.1: 642 | version "1.9.3" 643 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 644 | integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= 645 | 646 | estraverse@^4.1.1: 647 | version "4.3.0" 648 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 649 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 650 | 651 | estraverse@^5.1.0, estraverse@^5.2.0: 652 | version "5.2.0" 653 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 654 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 655 | 656 | esutils@^2.0.2: 657 | version "2.0.3" 658 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 659 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 660 | 661 | external-editor@^2.0.4: 662 | version "2.2.0" 663 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 664 | integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== 665 | dependencies: 666 | chardet "^0.4.0" 667 | iconv-lite "^0.4.17" 668 | tmp "^0.0.33" 669 | 670 | fast-deep-equal@^1.0.0: 671 | version "1.1.0" 672 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 673 | integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= 674 | 675 | fast-diff@^1.1.1: 676 | version "1.2.0" 677 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 678 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 679 | 680 | fast-json-stable-stringify@^2.0.0: 681 | version "2.1.0" 682 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 683 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 684 | 685 | fast-levenshtein@~2.0.6: 686 | version "2.0.6" 687 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 688 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 689 | 690 | faucet@^0.0.1: 691 | version "0.0.1" 692 | resolved "https://registry.yarnpkg.com/faucet/-/faucet-0.0.1.tgz#597dcf1d2189a2c062321b591e8f151ed2039d9c" 693 | integrity sha1-WX3PHSGJosBiMhtZHo8VHtIDnZw= 694 | dependencies: 695 | defined "0.0.0" 696 | duplexer "~0.1.1" 697 | minimist "0.0.5" 698 | sprintf "~0.1.3" 699 | tap-parser "~0.4.0" 700 | tape "~2.3.2" 701 | through2 "~0.2.3" 702 | 703 | figures@^2.0.0: 704 | version "2.0.0" 705 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 706 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 707 | dependencies: 708 | escape-string-regexp "^1.0.5" 709 | 710 | file-entry-cache@^2.0.0: 711 | version "2.0.0" 712 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 713 | integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= 714 | dependencies: 715 | flat-cache "^1.2.1" 716 | object-assign "^4.0.1" 717 | 718 | file-set@^4.0.1: 719 | version "4.0.1" 720 | resolved "https://registry.yarnpkg.com/file-set/-/file-set-4.0.1.tgz#d8a4485a89c8db7ca414f05a043bce44a2d6a913" 721 | integrity sha512-tRzX4kGPmxS2HDK2q2L4qcPopTl/gcyahve2/O8l8hHNJgJ7m+r/ZncCJ1MmFWEMp1yHxJGIU9gAcsWu5jPMpg== 722 | dependencies: 723 | array-back "^4.0.1" 724 | glob "^7.1.6" 725 | 726 | find-replace@^3.0.0: 727 | version "3.0.0" 728 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" 729 | integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== 730 | dependencies: 731 | array-back "^3.0.1" 732 | 733 | flat-cache@^1.2.1: 734 | version "1.3.4" 735 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" 736 | integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== 737 | dependencies: 738 | circular-json "^0.3.1" 739 | graceful-fs "^4.1.2" 740 | rimraf "~2.6.2" 741 | write "^0.2.1" 742 | 743 | for-each@~0.3.3: 744 | version "0.3.3" 745 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 746 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 747 | dependencies: 748 | is-callable "^1.1.3" 749 | 750 | fs-then-native@^2.0.0: 751 | version "2.0.0" 752 | resolved "https://registry.yarnpkg.com/fs-then-native/-/fs-then-native-2.0.0.tgz#19a124d94d90c22c8e045f2e8dd6ebea36d48c67" 753 | integrity sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc= 754 | 755 | fs.realpath@^1.0.0: 756 | version "1.0.0" 757 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 758 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 759 | 760 | function-bind@^1.1.1, function-bind@~1.1.1: 761 | version "1.1.1" 762 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 763 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 764 | 765 | functional-red-black-tree@^1.0.1: 766 | version "1.0.1" 767 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 768 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 769 | 770 | get-intrinsic@^1.0.2: 771 | version "1.1.1" 772 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 773 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 774 | dependencies: 775 | function-bind "^1.1.1" 776 | has "^1.0.3" 777 | has-symbols "^1.0.1" 778 | 779 | get-stdin@^5.0.1: 780 | version "5.0.1" 781 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 782 | integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= 783 | 784 | glob@^5.0.15: 785 | version "5.0.15" 786 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 787 | integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= 788 | dependencies: 789 | inflight "^1.0.4" 790 | inherits "2" 791 | minimatch "2 || 3" 792 | once "^1.3.0" 793 | path-is-absolute "^1.0.0" 794 | 795 | glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.1.6: 796 | version "7.1.6" 797 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 798 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 799 | dependencies: 800 | fs.realpath "^1.0.0" 801 | inflight "^1.0.4" 802 | inherits "2" 803 | minimatch "^3.0.4" 804 | once "^1.3.0" 805 | path-is-absolute "^1.0.0" 806 | 807 | globals@^11.0.1: 808 | version "11.12.0" 809 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 810 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 811 | 812 | graceful-fs@^4.1.2, graceful-fs@^4.1.9: 813 | version "4.2.6" 814 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 815 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 816 | 817 | h3-js@^3.6.1: 818 | version "3.7.0" 819 | resolved "https://registry.yarnpkg.com/h3-js/-/h3-js-3.7.0.tgz#f0ff5563ae04ce448cbe6b8573d9796a6c97f5ad" 820 | integrity sha512-EcH/qGU4khZsAEG39Uu8MvaCing0JFcuoe3K4Xmg5MofDIu1cNJl7z2AQS8ggvXGxboiLJqsGirhEqFKdd2gAA== 821 | 822 | handlebars@^4.0.1, handlebars@^4.7.6: 823 | version "4.7.7" 824 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" 825 | integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== 826 | dependencies: 827 | minimist "^1.2.5" 828 | neo-async "^2.6.0" 829 | source-map "^0.6.1" 830 | wordwrap "^1.0.0" 831 | optionalDependencies: 832 | uglify-js "^3.1.4" 833 | 834 | has-ansi@^2.0.0: 835 | version "2.0.0" 836 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 837 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 838 | dependencies: 839 | ansi-regex "^2.0.0" 840 | 841 | has-flag@^1.0.0: 842 | version "1.0.0" 843 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 844 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= 845 | 846 | has-flag@^3.0.0: 847 | version "3.0.0" 848 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 849 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 850 | 851 | has-symbols@^1.0.1: 852 | version "1.0.1" 853 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 854 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 855 | 856 | has@^1.0.3, has@~1.0.3: 857 | version "1.0.3" 858 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 859 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 860 | dependencies: 861 | function-bind "^1.1.1" 862 | 863 | iconv-lite@^0.4.17: 864 | version "0.4.24" 865 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 866 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 867 | dependencies: 868 | safer-buffer ">= 2.1.2 < 3" 869 | 870 | ignore@^3.3.3: 871 | version "3.3.10" 872 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 873 | integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== 874 | 875 | imurmurhash@^0.1.4: 876 | version "0.1.4" 877 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 878 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 879 | 880 | inflight@^1.0.4: 881 | version "1.0.6" 882 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 883 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 884 | dependencies: 885 | once "^1.3.0" 886 | wrappy "1" 887 | 888 | inherits@2, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: 889 | version "2.0.4" 890 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 891 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 892 | 893 | inquirer@^3.0.6: 894 | version "3.3.0" 895 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" 896 | integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== 897 | dependencies: 898 | ansi-escapes "^3.0.0" 899 | chalk "^2.0.0" 900 | cli-cursor "^2.1.0" 901 | cli-width "^2.0.0" 902 | external-editor "^2.0.4" 903 | figures "^2.0.0" 904 | lodash "^4.3.0" 905 | mute-stream "0.0.7" 906 | run-async "^2.2.0" 907 | rx-lite "^4.0.8" 908 | rx-lite-aggregates "^4.0.8" 909 | string-width "^2.1.0" 910 | strip-ansi "^4.0.0" 911 | through "^2.3.6" 912 | 913 | is-arguments@^1.0.4: 914 | version "1.1.0" 915 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" 916 | integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== 917 | dependencies: 918 | call-bind "^1.0.0" 919 | 920 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: 921 | version "1.2.3" 922 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" 923 | integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== 924 | 925 | is-date-object@^1.0.1: 926 | version "1.0.2" 927 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 928 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 929 | 930 | is-fullwidth-code-point@^2.0.0: 931 | version "2.0.0" 932 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 933 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 934 | 935 | is-negative-zero@^2.0.1: 936 | version "2.0.1" 937 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 938 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 939 | 940 | is-regex@^1.0.4, is-regex@^1.1.1: 941 | version "1.1.2" 942 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" 943 | integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== 944 | dependencies: 945 | call-bind "^1.0.2" 946 | has-symbols "^1.0.1" 947 | 948 | is-regex@~1.0.5: 949 | version "1.0.5" 950 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 951 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 952 | dependencies: 953 | has "^1.0.3" 954 | 955 | is-resolvable@^1.0.0: 956 | version "1.1.0" 957 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 958 | integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== 959 | 960 | is-symbol@^1.0.2: 961 | version "1.0.3" 962 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 963 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 964 | dependencies: 965 | has-symbols "^1.0.1" 966 | 967 | isarray@0.0.1: 968 | version "0.0.1" 969 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 970 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 971 | 972 | isarray@~1.0.0: 973 | version "1.0.0" 974 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 975 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 976 | 977 | isexe@^2.0.0: 978 | version "2.0.0" 979 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 980 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 981 | 982 | istanbul@^0.4.3: 983 | version "0.4.5" 984 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" 985 | integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= 986 | dependencies: 987 | abbrev "1.0.x" 988 | async "1.x" 989 | escodegen "1.8.x" 990 | esprima "2.7.x" 991 | glob "^5.0.15" 992 | handlebars "^4.0.1" 993 | js-yaml "3.x" 994 | mkdirp "0.5.x" 995 | nopt "3.x" 996 | once "1.x" 997 | resolve "1.1.x" 998 | supports-color "^3.1.0" 999 | which "^1.1.1" 1000 | wordwrap "^1.0.0" 1001 | 1002 | jest-docblock@^21.0.0: 1003 | version "21.2.0" 1004 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" 1005 | integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== 1006 | 1007 | js-tokens@^3.0.2: 1008 | version "3.0.2" 1009 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1010 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= 1011 | 1012 | js-yaml@3.x, js-yaml@^3.9.1: 1013 | version "3.14.1" 1014 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1015 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1016 | dependencies: 1017 | argparse "^1.0.7" 1018 | esprima "^4.0.0" 1019 | 1020 | js2xmlparser@^4.0.1: 1021 | version "4.0.1" 1022 | resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.1.tgz#670ef71bc5661f089cc90481b99a05a1227ae3bd" 1023 | integrity sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw== 1024 | dependencies: 1025 | xmlcreate "^2.0.3" 1026 | 1027 | jsdoc-api@^6.0.0: 1028 | version "6.0.0" 1029 | resolved "https://registry.yarnpkg.com/jsdoc-api/-/jsdoc-api-6.0.0.tgz#fbba403ef59de0480b7e5aadd563a7bb715b0187" 1030 | integrity sha512-zvfB63nAc9e+Rv2kKmJfE6tmo4x8KFho5vKr6VfYTlCCgqtrfPv0McCdqT4betUT9rWtw0zGkNUVkVqeQipY6Q== 1031 | dependencies: 1032 | array-back "^4.0.1" 1033 | cache-point "^2.0.0" 1034 | collect-all "^1.0.3" 1035 | file-set "^4.0.1" 1036 | fs-then-native "^2.0.0" 1037 | jsdoc "^3.6.4" 1038 | object-to-spawn-args "^2.0.0" 1039 | temp-path "^1.0.0" 1040 | walk-back "^4.0.0" 1041 | 1042 | jsdoc-parse@^5.0.0: 1043 | version "5.0.0" 1044 | resolved "https://registry.yarnpkg.com/jsdoc-parse/-/jsdoc-parse-5.0.0.tgz#01fb96e04955df05bca1ad722d76e969a30108f7" 1045 | integrity sha512-Khw8c3glrTeA3/PfUJUBvhrMhWpSClORBUvL4pvq2wFcqvUVmA96wxnMkCno2GfZY4pnd8BStK5WGKGyn4Vckg== 1046 | dependencies: 1047 | array-back "^4.0.1" 1048 | lodash.omit "^4.5.0" 1049 | lodash.pick "^4.4.0" 1050 | reduce-extract "^1.0.0" 1051 | sort-array "^4.1.1" 1052 | test-value "^3.0.0" 1053 | 1054 | jsdoc-to-markdown@^6.0.1: 1055 | version "6.0.1" 1056 | resolved "https://registry.yarnpkg.com/jsdoc-to-markdown/-/jsdoc-to-markdown-6.0.1.tgz#55640eea7a4f56fa9353316648bf0775531811ff" 1057 | integrity sha512-hUI2PAR5n/KlmQU3mAWO9i3D7jVbhyvUHfQ6oYVBt+wnnsyxpsAuhCODY1ryLOb2U9OPJd4GIK9mL2hqy7fHDg== 1058 | dependencies: 1059 | array-back "^4.0.1" 1060 | command-line-tool "^0.8.0" 1061 | config-master "^3.1.0" 1062 | dmd "^5.0.1" 1063 | jsdoc-api "^6.0.0" 1064 | jsdoc-parse "^5.0.0" 1065 | walk-back "^4.0.0" 1066 | 1067 | jsdoc@^3.6.4, jsdoc@^3.6.6: 1068 | version "3.6.6" 1069 | resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.6.6.tgz#9fe162bbdb13ee7988bf74352b5147565bcfd8e1" 1070 | integrity sha512-znR99e1BHeyEkSvgDDpX0sTiTu+8aQyDl9DawrkOGZTTW8hv0deIFXx87114zJ7gRaDZKVQD/4tr1ifmJp9xhQ== 1071 | dependencies: 1072 | "@babel/parser" "^7.9.4" 1073 | bluebird "^3.7.2" 1074 | catharsis "^0.8.11" 1075 | escape-string-regexp "^2.0.0" 1076 | js2xmlparser "^4.0.1" 1077 | klaw "^3.0.0" 1078 | markdown-it "^10.0.0" 1079 | markdown-it-anchor "^5.2.7" 1080 | marked "^0.8.2" 1081 | mkdirp "^1.0.4" 1082 | requizzle "^0.2.3" 1083 | strip-json-comments "^3.1.0" 1084 | taffydb "2.6.2" 1085 | underscore "~1.10.2" 1086 | 1087 | jsesc@~0.5.0: 1088 | version "0.5.0" 1089 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1090 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1091 | 1092 | json-schema-traverse@^0.3.0: 1093 | version "0.3.1" 1094 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 1095 | integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= 1096 | 1097 | json-stable-stringify-without-jsonify@^1.0.1: 1098 | version "1.0.1" 1099 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1100 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1101 | 1102 | jsonify@~0.0.0: 1103 | version "0.0.0" 1104 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1105 | integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 1106 | 1107 | klaw@^3.0.0: 1108 | version "3.0.0" 1109 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" 1110 | integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== 1111 | dependencies: 1112 | graceful-fs "^4.1.9" 1113 | 1114 | levn@^0.3.0, levn@~0.3.0: 1115 | version "0.3.0" 1116 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1117 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1118 | dependencies: 1119 | prelude-ls "~1.1.2" 1120 | type-check "~0.3.2" 1121 | 1122 | linkify-it@^2.0.0: 1123 | version "2.2.0" 1124 | resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" 1125 | integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== 1126 | dependencies: 1127 | uc.micro "^1.0.1" 1128 | 1129 | lodash.camelcase@^4.3.0: 1130 | version "4.3.0" 1131 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 1132 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 1133 | 1134 | lodash.omit@^4.5.0: 1135 | version "4.5.0" 1136 | resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" 1137 | integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= 1138 | 1139 | lodash.padend@^4.6.1: 1140 | version "4.6.1" 1141 | resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" 1142 | integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= 1143 | 1144 | lodash.pick@^4.4.0: 1145 | version "4.4.0" 1146 | resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" 1147 | integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= 1148 | 1149 | lodash@^4.17.14, lodash@^4.17.4, lodash@^4.3.0: 1150 | version "4.17.21" 1151 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1152 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1153 | 1154 | lru-cache@^4.0.1: 1155 | version "4.1.5" 1156 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1157 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1158 | dependencies: 1159 | pseudomap "^1.0.2" 1160 | yallist "^2.1.2" 1161 | 1162 | magic-string@^0.25.3: 1163 | version "0.25.7" 1164 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 1165 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 1166 | dependencies: 1167 | sourcemap-codec "^1.4.4" 1168 | 1169 | markdown-it-anchor@^5.2.7: 1170 | version "5.3.0" 1171 | resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz#d549acd64856a8ecd1bea58365ef385effbac744" 1172 | integrity sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA== 1173 | 1174 | markdown-it@^10.0.0: 1175 | version "10.0.0" 1176 | resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-10.0.0.tgz#abfc64f141b1722d663402044e43927f1f50a8dc" 1177 | integrity sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg== 1178 | dependencies: 1179 | argparse "^1.0.7" 1180 | entities "~2.0.0" 1181 | linkify-it "^2.0.0" 1182 | mdurl "^1.0.1" 1183 | uc.micro "^1.0.5" 1184 | 1185 | marked@^0.8.2: 1186 | version "0.8.2" 1187 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.2.tgz#4faad28d26ede351a7a1aaa5fec67915c869e355" 1188 | integrity sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw== 1189 | 1190 | marked@^1.1.0: 1191 | version "1.2.9" 1192 | resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.9.tgz#53786f8b05d4c01a2a5a76b7d1ec9943d29d72dc" 1193 | integrity sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw== 1194 | 1195 | mdurl@^1.0.1: 1196 | version "1.0.1" 1197 | resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" 1198 | integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= 1199 | 1200 | mimic-fn@^1.0.0: 1201 | version "1.2.0" 1202 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1203 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1204 | 1205 | "minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: 1206 | version "3.1.2" 1207 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1208 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1209 | dependencies: 1210 | brace-expansion "^1.1.7" 1211 | 1212 | minimist@0.0.5: 1213 | version "0.0.5" 1214 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" 1215 | integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY= 1216 | 1217 | minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: 1218 | version "1.2.5" 1219 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1220 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1221 | 1222 | mkdirp2@^1.0.4: 1223 | version "1.0.4" 1224 | resolved "https://registry.yarnpkg.com/mkdirp2/-/mkdirp2-1.0.4.tgz#56de1f8f5c93cf2199906362eba0f9f262ee4437" 1225 | integrity sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw== 1226 | 1227 | mkdirp@0.5.x, mkdirp@^0.5.1: 1228 | version "0.5.5" 1229 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1230 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1231 | dependencies: 1232 | minimist "^1.2.5" 1233 | 1234 | mkdirp@^1.0.4: 1235 | version "1.0.4" 1236 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1237 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1238 | 1239 | ms@^2.1.1: 1240 | version "2.1.3" 1241 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1242 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1243 | 1244 | mute-stream@0.0.7: 1245 | version "0.0.7" 1246 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1247 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1248 | 1249 | natural-compare@^1.4.0: 1250 | version "1.4.0" 1251 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1252 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1253 | 1254 | neo-async@^2.6.0: 1255 | version "2.6.2" 1256 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 1257 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 1258 | 1259 | nopt@3.x: 1260 | version "3.0.6" 1261 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 1262 | integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= 1263 | dependencies: 1264 | abbrev "1" 1265 | 1266 | object-assign@^4.0.1: 1267 | version "4.1.1" 1268 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1269 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1270 | 1271 | object-get@^2.1.1: 1272 | version "2.1.1" 1273 | resolved "https://registry.yarnpkg.com/object-get/-/object-get-2.1.1.tgz#1dad63baf6d94df184d1c58756cc9be55b174dac" 1274 | integrity sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg== 1275 | 1276 | object-inspect@^1.9.0: 1277 | version "1.9.0" 1278 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" 1279 | integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== 1280 | 1281 | object-inspect@~1.7.0: 1282 | version "1.7.0" 1283 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 1284 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 1285 | 1286 | object-is@^1.0.1: 1287 | version "1.1.5" 1288 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" 1289 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== 1290 | dependencies: 1291 | call-bind "^1.0.2" 1292 | define-properties "^1.1.3" 1293 | 1294 | object-keys@^1.0.12, object-keys@^1.1.1: 1295 | version "1.1.1" 1296 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1297 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1298 | 1299 | object-keys@~0.4.0: 1300 | version "0.4.0" 1301 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" 1302 | integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= 1303 | 1304 | object-to-spawn-args@^2.0.0: 1305 | version "2.0.0" 1306 | resolved "https://registry.yarnpkg.com/object-to-spawn-args/-/object-to-spawn-args-2.0.0.tgz#00484be684e9213fb5a67f988b18a9d11ad5fcbd" 1307 | integrity sha512-ZMT4owlXg3JGegecLlAgAA/6BsdKHn63R3ayXcAa3zFkF7oUBHcSb0oxszeutYe0FO2c1lT5pwCuidLkC4Gx3g== 1308 | 1309 | object.assign@^4.1.2: 1310 | version "4.1.2" 1311 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1312 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1313 | dependencies: 1314 | call-bind "^1.0.0" 1315 | define-properties "^1.1.3" 1316 | has-symbols "^1.0.1" 1317 | object-keys "^1.1.1" 1318 | 1319 | once@1.x, once@^1.3.0: 1320 | version "1.4.0" 1321 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1322 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1323 | dependencies: 1324 | wrappy "1" 1325 | 1326 | onetime@^2.0.0: 1327 | version "2.0.1" 1328 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1329 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1330 | dependencies: 1331 | mimic-fn "^1.0.0" 1332 | 1333 | optionator@^0.8.1, optionator@^0.8.2: 1334 | version "0.8.3" 1335 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 1336 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 1337 | dependencies: 1338 | deep-is "~0.1.3" 1339 | fast-levenshtein "~2.0.6" 1340 | levn "~0.3.0" 1341 | prelude-ls "~1.1.2" 1342 | type-check "~0.3.2" 1343 | word-wrap "~1.2.3" 1344 | 1345 | os-homedir@^2.0.0: 1346 | version "2.0.0" 1347 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c" 1348 | integrity sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q== 1349 | 1350 | os-tmpdir@~1.0.2: 1351 | version "1.0.2" 1352 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1353 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1354 | 1355 | path-is-absolute@^1.0.0: 1356 | version "1.0.1" 1357 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1358 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1359 | 1360 | path-is-inside@^1.0.2: 1361 | version "1.0.2" 1362 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1363 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 1364 | 1365 | path-parse@^1.0.6: 1366 | version "1.0.7" 1367 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1368 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1369 | 1370 | platform@^1.3.3: 1371 | version "1.3.6" 1372 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" 1373 | integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== 1374 | 1375 | pluralize@^7.0.0: 1376 | version "7.0.0" 1377 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 1378 | integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== 1379 | 1380 | prelude-ls@~1.1.2: 1381 | version "1.1.2" 1382 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1383 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1384 | 1385 | prettier@^1.19.1: 1386 | version "1.19.1" 1387 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 1388 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 1389 | 1390 | process-nextick-args@~2.0.0: 1391 | version "2.0.1" 1392 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1393 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1394 | 1395 | progress@^2.0.0: 1396 | version "2.0.3" 1397 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1398 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1399 | 1400 | pseudomap@^1.0.2: 1401 | version "1.0.2" 1402 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1403 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1404 | 1405 | readable-stream@^2.2.2: 1406 | version "2.3.7" 1407 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1408 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1409 | dependencies: 1410 | core-util-is "~1.0.0" 1411 | inherits "~2.0.3" 1412 | isarray "~1.0.0" 1413 | process-nextick-args "~2.0.0" 1414 | safe-buffer "~5.1.1" 1415 | string_decoder "~1.1.1" 1416 | util-deprecate "~1.0.1" 1417 | 1418 | readable-stream@~1.1.11, readable-stream@~1.1.9: 1419 | version "1.1.14" 1420 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 1421 | integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= 1422 | dependencies: 1423 | core-util-is "~1.0.0" 1424 | inherits "~2.0.1" 1425 | isarray "0.0.1" 1426 | string_decoder "~0.10.x" 1427 | 1428 | reduce-extract@^1.0.0: 1429 | version "1.0.0" 1430 | resolved "https://registry.yarnpkg.com/reduce-extract/-/reduce-extract-1.0.0.tgz#67f2385beda65061b5f5f4312662e8b080ca1525" 1431 | integrity sha1-Z/I4W+2mUGG19fQxJmLosIDKFSU= 1432 | dependencies: 1433 | test-value "^1.0.1" 1434 | 1435 | reduce-flatten@^1.0.1: 1436 | version "1.0.1" 1437 | resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327" 1438 | integrity sha1-JYx479FT3fk8tWEjf2EYTzaW4yc= 1439 | 1440 | reduce-flatten@^3.0.0: 1441 | version "3.0.0" 1442 | resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-3.0.0.tgz#da477d68453fd9510f9a5fbef86e0fa04b4fd315" 1443 | integrity sha512-eczl8wAYBxJ6Egl6I1ECIF+8z6sHu+KE7BzaEDZTpPXKXfy9SUDQlVYwkRcNTjJLC3Iakxbhss50KuT/R6SYfg== 1444 | 1445 | reduce-unique@^2.0.1: 1446 | version "2.0.1" 1447 | resolved "https://registry.yarnpkg.com/reduce-unique/-/reduce-unique-2.0.1.tgz#fb34b90e89297c1e08d75dcf17e9a6443ea71081" 1448 | integrity sha512-x4jH/8L1eyZGR785WY+ePtyMNhycl1N2XOLxhCbzZFaqF4AXjLzqSxa2UHgJ2ZVR/HHyPOvl1L7xRnW8ye5MdA== 1449 | 1450 | reduce-without@^1.0.1: 1451 | version "1.0.1" 1452 | resolved "https://registry.yarnpkg.com/reduce-without/-/reduce-without-1.0.1.tgz#68ad0ead11855c9a37d4e8256c15bbf87972fc8c" 1453 | integrity sha1-aK0OrRGFXJo31OglbBW7+Hly/Iw= 1454 | dependencies: 1455 | test-value "^2.0.0" 1456 | 1457 | regenerate-unicode-properties@^8.2.0: 1458 | version "8.2.0" 1459 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" 1460 | integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== 1461 | dependencies: 1462 | regenerate "^1.4.0" 1463 | 1464 | regenerate@^1.4.0: 1465 | version "1.4.2" 1466 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" 1467 | integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== 1468 | 1469 | regexp.prototype.flags@^1.2.0: 1470 | version "1.3.1" 1471 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" 1472 | integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== 1473 | dependencies: 1474 | call-bind "^1.0.2" 1475 | define-properties "^1.1.3" 1476 | 1477 | regexpp@^1.0.1: 1478 | version "1.1.0" 1479 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" 1480 | integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== 1481 | 1482 | regexpu-core@^4.5.4: 1483 | version "4.7.1" 1484 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" 1485 | integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== 1486 | dependencies: 1487 | regenerate "^1.4.0" 1488 | regenerate-unicode-properties "^8.2.0" 1489 | regjsgen "^0.5.1" 1490 | regjsparser "^0.6.4" 1491 | unicode-match-property-ecmascript "^1.0.4" 1492 | unicode-match-property-value-ecmascript "^1.2.0" 1493 | 1494 | regjsgen@^0.5.1: 1495 | version "0.5.2" 1496 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" 1497 | integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== 1498 | 1499 | regjsparser@^0.6.4: 1500 | version "0.6.7" 1501 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" 1502 | integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== 1503 | dependencies: 1504 | jsesc "~0.5.0" 1505 | 1506 | require-uncached@^1.0.3: 1507 | version "1.0.3" 1508 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 1509 | integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= 1510 | dependencies: 1511 | caller-path "^0.1.0" 1512 | resolve-from "^1.0.0" 1513 | 1514 | requizzle@^0.2.3: 1515 | version "0.2.3" 1516 | resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.3.tgz#4675c90aacafb2c036bd39ba2daa4a1cb777fded" 1517 | integrity sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ== 1518 | dependencies: 1519 | lodash "^4.17.14" 1520 | 1521 | resolve-from@^1.0.0: 1522 | version "1.0.1" 1523 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 1524 | integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= 1525 | 1526 | resolve@1.1.x: 1527 | version "1.1.7" 1528 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1529 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 1530 | 1531 | resolve@~1.17.0: 1532 | version "1.17.0" 1533 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" 1534 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 1535 | dependencies: 1536 | path-parse "^1.0.6" 1537 | 1538 | restore-cursor@^2.0.0: 1539 | version "2.0.0" 1540 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1541 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1542 | dependencies: 1543 | onetime "^2.0.0" 1544 | signal-exit "^3.0.2" 1545 | 1546 | resumer@~0.0.0: 1547 | version "0.0.0" 1548 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 1549 | integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= 1550 | dependencies: 1551 | through "~2.3.4" 1552 | 1553 | rimraf@~2.6.2: 1554 | version "2.6.3" 1555 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1556 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1557 | dependencies: 1558 | glob "^7.1.3" 1559 | 1560 | run-async@^2.2.0: 1561 | version "2.4.1" 1562 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 1563 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 1564 | 1565 | rx-lite-aggregates@^4.0.8: 1566 | version "4.0.8" 1567 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" 1568 | integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= 1569 | dependencies: 1570 | rx-lite "*" 1571 | 1572 | rx-lite@*, rx-lite@^4.0.8: 1573 | version "4.0.8" 1574 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" 1575 | integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= 1576 | 1577 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1578 | version "5.1.2" 1579 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1580 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1581 | 1582 | "safer-buffer@>= 2.1.2 < 3": 1583 | version "2.1.2" 1584 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1585 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1586 | 1587 | semver@^5.3.0: 1588 | version "5.7.2" 1589 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" 1590 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== 1591 | 1592 | shebang-command@^1.2.0: 1593 | version "1.2.0" 1594 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1595 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1596 | dependencies: 1597 | shebang-regex "^1.0.0" 1598 | 1599 | shebang-regex@^1.0.0: 1600 | version "1.0.0" 1601 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1602 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1603 | 1604 | signal-exit@^3.0.2: 1605 | version "3.0.3" 1606 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1607 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1608 | 1609 | slice-ansi@1.0.0: 1610 | version "1.0.0" 1611 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 1612 | integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== 1613 | dependencies: 1614 | is-fullwidth-code-point "^2.0.0" 1615 | 1616 | sort-array@^4.1.1: 1617 | version "4.1.3" 1618 | resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-4.1.3.tgz#ede740ab6c82c900524b157feff79bcfd610b36d" 1619 | integrity sha512-6auiM0DNob/zF+7Ae/SM4BFL5D7DPK/HVcllhVu5V+FgoCPs0A6b6ZwJDuvJpXQgFpxqLZUOD2kdxqO4Z59dkg== 1620 | dependencies: 1621 | array-back "^5.0.0" 1622 | typical "^6.0.1" 1623 | 1624 | source-map@^0.6.1: 1625 | version "0.6.1" 1626 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1627 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1628 | 1629 | source-map@~0.2.0: 1630 | version "0.2.0" 1631 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 1632 | integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= 1633 | dependencies: 1634 | amdefine ">=0.0.4" 1635 | 1636 | sourcemap-codec@^1.4.4: 1637 | version "1.4.8" 1638 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1639 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1640 | 1641 | sprintf-js@~1.0.2: 1642 | version "1.0.3" 1643 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1644 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1645 | 1646 | sprintf@~0.1.3: 1647 | version "0.1.5" 1648 | resolved "https://registry.yarnpkg.com/sprintf/-/sprintf-0.1.5.tgz#8f83e39a9317c1a502cb7db8050e51c679f6edcf" 1649 | integrity sha1-j4PjmpMXwaUCy324BQ5Rxnn27c8= 1650 | 1651 | stream-connect@^1.0.2: 1652 | version "1.0.2" 1653 | resolved "https://registry.yarnpkg.com/stream-connect/-/stream-connect-1.0.2.tgz#18bc81f2edb35b8b5d9a8009200a985314428a97" 1654 | integrity sha1-GLyB8u2zW4tdmoAJIAqYUxRCipc= 1655 | dependencies: 1656 | array-back "^1.0.2" 1657 | 1658 | stream-via@^1.0.4: 1659 | version "1.0.4" 1660 | resolved "https://registry.yarnpkg.com/stream-via/-/stream-via-1.0.4.tgz#8dccbb0ac909328eb8bc8e2a4bd3934afdaf606c" 1661 | integrity sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ== 1662 | 1663 | string-width@^2.1.0, string-width@^2.1.1: 1664 | version "2.1.1" 1665 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1666 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1667 | dependencies: 1668 | is-fullwidth-code-point "^2.0.0" 1669 | strip-ansi "^4.0.0" 1670 | 1671 | string.prototype.trim@~1.2.1: 1672 | version "1.2.3" 1673 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz#d23a22fde01c1e6571a7fadcb9be11decd8061a7" 1674 | integrity sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg== 1675 | dependencies: 1676 | call-bind "^1.0.0" 1677 | define-properties "^1.1.3" 1678 | es-abstract "^1.18.0-next.1" 1679 | 1680 | string.prototype.trimend@^1.0.3: 1681 | version "1.0.3" 1682 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" 1683 | integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== 1684 | dependencies: 1685 | call-bind "^1.0.0" 1686 | define-properties "^1.1.3" 1687 | 1688 | string.prototype.trimstart@^1.0.3: 1689 | version "1.0.3" 1690 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" 1691 | integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== 1692 | dependencies: 1693 | call-bind "^1.0.0" 1694 | define-properties "^1.1.3" 1695 | 1696 | string_decoder@~0.10.x: 1697 | version "0.10.31" 1698 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1699 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= 1700 | 1701 | string_decoder@~1.1.1: 1702 | version "1.1.1" 1703 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1704 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1705 | dependencies: 1706 | safe-buffer "~5.1.0" 1707 | 1708 | strip-ansi@^3.0.0: 1709 | version "3.0.1" 1710 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1711 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1712 | dependencies: 1713 | ansi-regex "^2.0.0" 1714 | 1715 | strip-ansi@^4.0.0: 1716 | version "4.0.0" 1717 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1718 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1719 | dependencies: 1720 | ansi-regex "^3.0.0" 1721 | 1722 | strip-json-comments@^3.1.0: 1723 | version "3.1.1" 1724 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1725 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1726 | 1727 | strip-json-comments@~2.0.1: 1728 | version "2.0.1" 1729 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1730 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1731 | 1732 | supports-color@^2.0.0: 1733 | version "2.0.0" 1734 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1735 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 1736 | 1737 | supports-color@^3.1.0: 1738 | version "3.2.3" 1739 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 1740 | integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= 1741 | dependencies: 1742 | has-flag "^1.0.0" 1743 | 1744 | supports-color@^5.3.0: 1745 | version "5.5.0" 1746 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1747 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1748 | dependencies: 1749 | has-flag "^3.0.0" 1750 | 1751 | table-layout@^0.4.2: 1752 | version "0.4.5" 1753 | resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.4.5.tgz#d906de6a25fa09c0c90d1d08ecd833ecedcb7378" 1754 | integrity sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw== 1755 | dependencies: 1756 | array-back "^2.0.0" 1757 | deep-extend "~0.6.0" 1758 | lodash.padend "^4.6.1" 1759 | typical "^2.6.1" 1760 | wordwrapjs "^3.0.0" 1761 | 1762 | table@4.0.2: 1763 | version "4.0.2" 1764 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" 1765 | integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== 1766 | dependencies: 1767 | ajv "^5.2.3" 1768 | ajv-keywords "^2.1.0" 1769 | chalk "^2.1.0" 1770 | lodash "^4.17.4" 1771 | slice-ansi "1.0.0" 1772 | string-width "^2.1.1" 1773 | 1774 | taffydb@2.6.2: 1775 | version "2.6.2" 1776 | resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" 1777 | integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg= 1778 | 1779 | tap-parser@~0.4.0: 1780 | version "0.4.3" 1781 | resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-0.4.3.tgz#a4eae190c10d76c7a111921ff38bbe4d58f09eea" 1782 | integrity sha1-pOrhkMENdsehEZIf84u+TVjwnuo= 1783 | dependencies: 1784 | inherits "~2.0.1" 1785 | readable-stream "~1.1.11" 1786 | 1787 | tape@^4.8.0: 1788 | version "4.13.3" 1789 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" 1790 | integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== 1791 | dependencies: 1792 | deep-equal "~1.1.1" 1793 | defined "~1.0.0" 1794 | dotignore "~0.1.2" 1795 | for-each "~0.3.3" 1796 | function-bind "~1.1.1" 1797 | glob "~7.1.6" 1798 | has "~1.0.3" 1799 | inherits "~2.0.4" 1800 | is-regex "~1.0.5" 1801 | minimist "~1.2.5" 1802 | object-inspect "~1.7.0" 1803 | resolve "~1.17.0" 1804 | resumer "~0.0.0" 1805 | string.prototype.trim "~1.2.1" 1806 | through "~2.3.8" 1807 | 1808 | tape@~2.3.2: 1809 | version "2.3.3" 1810 | resolved "https://registry.yarnpkg.com/tape/-/tape-2.3.3.tgz#2e7ce0a31df09f8d6851664a71842e0ca5057af7" 1811 | integrity sha1-Lnzgox3wn41oUWZKcYQuDKUFevc= 1812 | dependencies: 1813 | deep-equal "~0.1.0" 1814 | defined "~0.0.0" 1815 | inherits "~2.0.1" 1816 | jsonify "~0.0.0" 1817 | resumer "~0.0.0" 1818 | through "~2.3.4" 1819 | 1820 | temp-path@^1.0.0: 1821 | version "1.0.0" 1822 | resolved "https://registry.yarnpkg.com/temp-path/-/temp-path-1.0.0.tgz#24b1543973ab442896d9ad367dd9cbdbfafe918b" 1823 | integrity sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs= 1824 | 1825 | test-value@^1.0.1: 1826 | version "1.1.0" 1827 | resolved "https://registry.yarnpkg.com/test-value/-/test-value-1.1.0.tgz#a09136f72ec043d27c893707c2b159bfad7de93f" 1828 | integrity sha1-oJE29y7AQ9J8iTcHwrFZv6196T8= 1829 | dependencies: 1830 | array-back "^1.0.2" 1831 | typical "^2.4.2" 1832 | 1833 | test-value@^2.0.0: 1834 | version "2.1.0" 1835 | resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" 1836 | integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= 1837 | dependencies: 1838 | array-back "^1.0.3" 1839 | typical "^2.6.0" 1840 | 1841 | test-value@^3.0.0: 1842 | version "3.0.0" 1843 | resolved "https://registry.yarnpkg.com/test-value/-/test-value-3.0.0.tgz#9168c062fab11a86b8d444dd968bb4b73851ce92" 1844 | integrity sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ== 1845 | dependencies: 1846 | array-back "^2.0.0" 1847 | typical "^2.6.1" 1848 | 1849 | text-table@~0.2.0: 1850 | version "0.2.0" 1851 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1852 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1853 | 1854 | through2@~0.2.3: 1855 | version "0.2.3" 1856 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" 1857 | integrity sha1-6zKE2k6jEbbMis42U3SKUqvyWj8= 1858 | dependencies: 1859 | readable-stream "~1.1.9" 1860 | xtend "~2.1.1" 1861 | 1862 | through@^2.3.6, through@~2.3.4, through@~2.3.8: 1863 | version "2.3.8" 1864 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1865 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1866 | 1867 | tmp@^0.0.33: 1868 | version "0.0.33" 1869 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1870 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1871 | dependencies: 1872 | os-tmpdir "~1.0.2" 1873 | 1874 | type-check@~0.3.2: 1875 | version "0.3.2" 1876 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1877 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 1878 | dependencies: 1879 | prelude-ls "~1.1.2" 1880 | 1881 | typedarray@^0.0.6: 1882 | version "0.0.6" 1883 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1884 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 1885 | 1886 | typescript@^4.1.5: 1887 | version "4.1.5" 1888 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" 1889 | integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== 1890 | 1891 | typical@^2.4.2, typical@^2.6.0, typical@^2.6.1: 1892 | version "2.6.1" 1893 | resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" 1894 | integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= 1895 | 1896 | typical@^4.0.0: 1897 | version "4.0.0" 1898 | resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" 1899 | integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== 1900 | 1901 | typical@^6.0.1: 1902 | version "6.0.1" 1903 | resolved "https://registry.yarnpkg.com/typical/-/typical-6.0.1.tgz#89bd1a6aa5e5e96fa907fb6b7579223bff558a06" 1904 | integrity sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A== 1905 | 1906 | uc.micro@^1.0.1, uc.micro@^1.0.5: 1907 | version "1.0.6" 1908 | resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" 1909 | integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== 1910 | 1911 | uglify-js@^3.1.4: 1912 | version "3.12.8" 1913 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.8.tgz#a82e6e53c9be14f7382de3d068ef1e26e7d4aaf8" 1914 | integrity sha512-fvBeuXOsvqjecUtF/l1dwsrrf5y2BCUk9AOJGzGcm6tE7vegku5u/YvqjyDaAGr422PLoLnrxg3EnRvTqsdC1w== 1915 | 1916 | underscore@~1.10.2: 1917 | version "1.10.2" 1918 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.10.2.tgz#73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf" 1919 | integrity sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg== 1920 | 1921 | unicode-canonical-property-names-ecmascript@^1.0.4: 1922 | version "1.0.4" 1923 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 1924 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== 1925 | 1926 | unicode-match-property-ecmascript@^1.0.4: 1927 | version "1.0.4" 1928 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" 1929 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== 1930 | dependencies: 1931 | unicode-canonical-property-names-ecmascript "^1.0.4" 1932 | unicode-property-aliases-ecmascript "^1.0.4" 1933 | 1934 | unicode-match-property-value-ecmascript@^1.2.0: 1935 | version "1.2.0" 1936 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" 1937 | integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== 1938 | 1939 | unicode-property-aliases-ecmascript@^1.0.4: 1940 | version "1.1.0" 1941 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" 1942 | integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 1943 | 1944 | util-deprecate@~1.0.1: 1945 | version "1.0.2" 1946 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1947 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1948 | 1949 | walk-back@^2.0.1: 1950 | version "2.0.1" 1951 | resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-2.0.1.tgz#554e2a9d874fac47a8cb006bf44c2f0c4998a0a4" 1952 | integrity sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ= 1953 | 1954 | walk-back@^4.0.0: 1955 | version "4.0.0" 1956 | resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-4.0.0.tgz#9e4ad2bd72038f3beed2d83180f9fd40b233bfab" 1957 | integrity sha512-kudCA8PXVQfrqv2mFTG72vDBRi8BKWxGgFLwPpzHcpZnSwZk93WMwUDVcLHWNsnm+Y0AC4Vb6MUNRgaHfyV2DQ== 1958 | 1959 | which@^1.1.1, which@^1.2.9: 1960 | version "1.3.1" 1961 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1962 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1963 | dependencies: 1964 | isexe "^2.0.0" 1965 | 1966 | word-wrap@~1.2.3: 1967 | version "1.2.4" 1968 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" 1969 | integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== 1970 | 1971 | wordwrap@^1.0.0: 1972 | version "1.0.0" 1973 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1974 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 1975 | 1976 | wordwrapjs@^3.0.0: 1977 | version "3.0.0" 1978 | resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-3.0.0.tgz#c94c372894cadc6feb1a66bff64e1d9af92c5d1e" 1979 | integrity sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw== 1980 | dependencies: 1981 | reduce-flatten "^1.0.1" 1982 | typical "^2.6.1" 1983 | 1984 | wrappy@1: 1985 | version "1.0.2" 1986 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1987 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1988 | 1989 | write@^0.2.1: 1990 | version "0.2.1" 1991 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 1992 | integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= 1993 | dependencies: 1994 | mkdirp "^0.5.1" 1995 | 1996 | xmlcreate@^2.0.3: 1997 | version "2.0.3" 1998 | resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.3.tgz#df9ecd518fd3890ab3548e1b811d040614993497" 1999 | integrity sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ== 2000 | 2001 | xtend@~2.1.1: 2002 | version "2.1.2" 2003 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" 2004 | integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= 2005 | dependencies: 2006 | object-keys "~0.4.0" 2007 | 2008 | yallist@^2.1.2: 2009 | version "2.1.2" 2010 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2011 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 2012 | --------------------------------------------------------------------------------