├── .gitignore ├── .npmignore ├── .prettierrc ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── sample ├── data │ ├── swagger-petstore.json │ └── swagger-uber.json ├── gatsby-config.js ├── gatsby-node.js ├── package.json ├── plugins │ └── gatsby-source-openapi-aggregate │ │ ├── gatsby-node.js │ │ ├── index.js │ │ ├── package.json │ │ └── processors │ │ ├── factory.js │ │ └── spec20Processor.js ├── src │ ├── common │ │ └── Markdown.js │ ├── layouts │ │ ├── index.css │ │ └── index.js │ ├── pages │ │ ├── 404.js │ │ └── index.js │ ├── spec │ │ ├── Spec.js │ │ ├── SpecDefinition.js │ │ ├── SpecInformation.js │ │ ├── SpecPathParameters.js │ │ ├── SpecPathResponse.js │ │ ├── SpecPaths.js │ │ ├── Specs.js │ │ └── Verb.js │ ├── templates │ │ └── api.js │ └── utils │ │ └── typography.js └── yarn.lock └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | public 3 | .cache 4 | yarn-error.log -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | sample 2 | yarn.lock 3 | .travis.yml 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "trailingComma": "all", 4 | "singleQuote": true 5 | } 6 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "8" 4 | before_script: yarn run build 5 | deploy: 6 | provider: npm 7 | email: "devdigital.cloud@gmail.com" 8 | api_key: $NPM_TOKEN 9 | skip_cleanup: true 10 | on: 11 | tags: true 12 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | 6 | # [0.3.0](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.7...v0.3.0) (2020-07-06) 7 | 8 | 9 | ### Bug Fixes 10 | 11 | * add property.example to spec20 processor ([efd782a](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/efd782a)) 12 | * handle empty definition properties ([f0c0876](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/f0c0876)) 13 | * remove blog post from sample app ([a809d76](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/a809d76)) 14 | * remove use of forEach with async ([b5b98d1](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/b5b98d1)) 15 | 16 | 17 | ### Features 18 | 19 | * add additional built-in and custom fields ([78ea659](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/78ea659)) 20 | * add color definitions for HTTP PATCH ([ff48405](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/ff48405)) 21 | * include schema, headers, and examples in OpenApiSpecResponse; Fix broken Markdown component ([#21](https://github.com/devdigital/gatsby-source-openapi-aggregate/issues/21)) ([42bc32d](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/42bc32d)) 22 | 23 | 24 | 25 | 26 | ## [0.2.1](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.2.0...v0.2.1) (2019-02-22) 27 | 28 | 29 | ### Bug Fixes 30 | 31 | * handle empty definition properties ([f0c0876](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/f0c0876)) 32 | 33 | 34 | 35 | 36 | # [0.2.0](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.8...v0.2.0) (2019-01-22) 37 | 38 | 39 | ### Bug Fixes 40 | 41 | * remove blog post from sample app ([a809d76](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/a809d76)) 42 | 43 | 44 | ### Features 45 | 46 | * add additional built-in and custom fields ([78ea659](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/78ea659)) 47 | * add color definitions for HTTP PATCH ([ff48405](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/ff48405)) 48 | 49 | 50 | 51 | 52 | ## [0.1.8](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.7...v0.1.8) (2018-08-22) 53 | 54 | 55 | ### Bug Fixes 56 | 57 | * add property.example to spec20 processor ([efd782a](https://github.com/devdigital/gatsby-source-openapi-aggregate/commit/efd782a)) 58 | 59 | 60 | 61 | 62 | ## [0.1.7](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.6...v0.1.7) (2017-11-01) 63 | 64 | 65 | 66 | 67 | ## [0.1.6](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.5...v0.1.6) (2017-11-01) 68 | 69 | 70 | 71 | 72 | ## [0.1.5](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.4...v0.1.5) (2017-11-01) 73 | 74 | 75 | 76 | 77 | ## [0.1.4](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.3...v0.1.4) (2017-11-01) 78 | 79 | 80 | 81 | 82 | ## [0.1.3](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.2...v0.1.3) (2017-11-01) 83 | 84 | 85 | 86 | 87 | ## [0.1.2](https://github.com/devdigital/gatsby-source-openapi-aggregate/compare/v0.1.1...v0.1.2) (2017-11-01) 88 | 89 | 90 | 91 | 92 | ## 0.1.1 (2017-11-01) 93 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 devdigital 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Gatsby source plugin for pulling data into Gatsby from Open API/Swagger specifications 2 | 3 | - [Sample](/sample) 4 | 5 | ## Features 6 | 7 | - Pulls Open API/Swagger JSON specifications from various sources, these can be local files or from HTTP services or any custom function which resolves a JSON spec 8 | - Supports multiple specs, so useful for aggregating numerous services where the specs are co-located with each service 9 | - Document your APIs using React! 10 | 11 | ## What's missing 12 | 13 | This is work in progress, currently: 14 | 15 | - No support for YAML 16 | - Only supports Swagger version 2.0 JSON 17 | - Various Swagger properties are not converted to fields on nodes, only the main properties (general information, paths, responses, and definitions), create an issue or PR 18 | 19 | ## Install 20 | 21 | `npm install gatsby-source-openapi-aggregate --save` 22 | 23 | ## Configuring plugin 24 | 25 | ```javascript 26 | // gatsby-config.js 27 | 28 | plugins: [ 29 | { 30 | resolve: `gatsby-source-openapi-aggregate`, 31 | options: { 32 | specs: [ // specs collection is required, you can define as many specs as you want 33 | { 34 | name: 'myspec', // required, must be unique 35 | resolve: () => ... // required, function which returns a Promise resolving Swagger JSON 36 | } 37 | ] 38 | } 39 | } 40 | ] 41 | ``` 42 | 43 | ### Example resolve functions 44 | 45 | Retrieving Swagger document from local file: 46 | 47 | ```javascript 48 | const fs = require('fs') 49 | const path = require('path') 50 | 51 | const fromJson = filePath => { 52 | return new Promise((resolve, reject) => { 53 | fs.readFile(filePath, 'utf8', (err, data) => { 54 | if (err) { 55 | reject(err) 56 | return 57 | } 58 | 59 | resolve(data) 60 | }) 61 | }) 62 | } 63 | 64 | ... 65 | 66 | plugins: [ 67 | { 68 | resolve: `gatsby-source-openapi-aggregate`, 69 | options: { 70 | specs: [ 71 | { 72 | name: 'myspec', 73 | resolve: () => fromJson(path.resolve(__dirname, './swagger.json')) 74 | } 75 | ] 76 | } 77 | }, 78 | 79 | ``` 80 | 81 | Retrieving Swagger document from HTTP request: 82 | 83 | ```javascript 84 | const fetchSpec = async url => { 85 | return fetch(url).then(response => { 86 | if (response.status === 200) { 87 | return response.text() 88 | } 89 | 90 | throw new Error('There was an error retrieving document.') 91 | }) 92 | } 93 | ``` 94 | 95 | ## How to query 96 | 97 | The plugin adds the following collections: 98 | 99 | - `allOpenApiSpec` 100 | - `allOpenApiSpecPath` 101 | - `allOpenApiSpecResponse` 102 | - `allOpenApiSpecDefinition` 103 | 104 | You can inspect these in GraphiQL at `http://localhost:8000/___graphql` 105 | 106 | For example, to retrieve a list of spec names and titles ready for display: 107 | 108 | ```javascript 109 | // src/pages/index.js 110 | 111 | export const query = graphql` 112 | query IndexQuery { 113 | allOpenApiSpec { 114 | edges { 115 | node { 116 | name 117 | title 118 | } 119 | } 120 | } 121 | ... 122 | ``` 123 | 124 | To create a detail page for each spec: 125 | 126 | ```javascript 127 | // gatsby-node.js 128 | 129 | exports.createPages = ({ graphql, boundActionCreators }) => { 130 | const { createPage } = boundActionCreators 131 | return new Promise((resolve, reject) => { 132 | graphql(` 133 | { 134 | allOpenApiSpec { 135 | edges { 136 | node { 137 | id 138 | name 139 | } 140 | } 141 | } 142 | } 143 | `).then(result => { 144 | result.data.allOpenApiSpec.edges.map(({ node }) => { 145 | createPage({ 146 | path: `apis/${node.name}`, 147 | component: path.resolve(`./src/templates/api.js`), 148 | context: { 149 | id: node.id, 150 | }, 151 | }) 152 | }) 153 | 154 | resolve() 155 | }) 156 | }) 157 | } 158 | ``` 159 | 160 | The above creates a new page for every spec defined in the plugin options, using `/apis/` as the path, where `` is the name you defined within the plugin options. 161 | 162 | Each page uses the `./src/templates/api.js` React component to render the detail page. The `node.id` is passed to the context so that it is available as a GraphQL variable so that we can retreive the appropriate spec node from the `api.js` component. 163 | 164 | ```javascript 165 | // api.js 166 | 167 | export const query = graphql` 168 | query ApiQuery($id: String!) { 169 | openApiSpec(id: { eq: $id }) { 170 | version 171 | title 172 | description 173 | childrenOpenApiSpecPath { 174 | name 175 | verb 176 | summary 177 | description 178 | parameters { 179 | name 180 | in 181 | description 182 | required 183 | type 184 | format 185 | } 186 | tag 187 | childrenOpenApiSpecResponse { 188 | id 189 | statusCode 190 | description 191 | childrenOpenApiSpecDefinition { 192 | name 193 | properties { 194 | name 195 | type 196 | description 197 | format 198 | } 199 | } 200 | } 201 | } 202 | } 203 | } 204 | ` 205 | ``` 206 | 207 | In the above example, we're using the `$id` variable to retrieve the appropriate spec for that page. We're retreiving basic spec information (such as `version`, `title`, `description`) as well as the children paths for the spec, their associated properties, as well as each paths child responses and in turn their child definitions. 208 | 209 | Each path has a `tags` and `tag` field - `tags` is the original array of tags associated with the path. The `tag` field is a convenience comma separated string of all tags. If you wish to display paths by tag (like Swagger UI), then you can group on this `tag` field. See the full [sample](/sample) for details. 210 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gatsby-source-openapi-aggregate", 3 | "version": "0.3.0", 4 | "description": "Gatsby source plugin for pulling data into Gatsby from Open API/Swagger specifications", 5 | "scripts": { 6 | "build": "babel ./sample/plugins/gatsby-source-openapi-aggregate --out-dir . --ignore __tests__", 7 | "watch": "babel ./sample/plugins/gatsby-source-openapi-aggregate -w . --out-dir . --ignore __tests__", 8 | "test": "echo No tests specified", 9 | "release": "standard-version" 10 | }, 11 | "keywords": [ 12 | "gatsby", 13 | "gatsby-plugin", 14 | "gatsby-source-plugin" 15 | ], 16 | "author": "DevDigital ", 17 | "license": "MIT", 18 | "dependencies": { 19 | "babel-runtime": "6.26.0" 20 | }, 21 | "devDependencies": { 22 | "babel-cli": "6.26.0", 23 | "cross-env": "5.2.0", 24 | "standard-version": "6.0.1" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /sample/data/swagger-petstore.json: -------------------------------------------------------------------------------- 1 | { 2 | "swagger": "2.0", 3 | "info": { 4 | "description": 5 | "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.", 6 | "version": "1.0.0", 7 | "title": "Swagger Petstore", 8 | "termsOfService": "http://swagger.io/terms/", 9 | "contact": { 10 | "email": "apiteam@swagger.io" 11 | }, 12 | "license": { 13 | "name": "Apache 2.0", 14 | "url": "http://www.apache.org/licenses/LICENSE-2.0.html" 15 | } 16 | }, 17 | "host": "petstore.swagger.io", 18 | "basePath": "/v2", 19 | "tags": [ 20 | { 21 | "name": "pet", 22 | "description": "Everything about your Pets", 23 | "externalDocs": { 24 | "description": "Find out more", 25 | "url": "http://swagger.io" 26 | } 27 | }, 28 | { 29 | "name": "store", 30 | "description": "Access to Petstore orders" 31 | }, 32 | { 33 | "name": "user", 34 | "description": "Operations about user", 35 | "externalDocs": { 36 | "description": "Find out more about our store", 37 | "url": "http://swagger.io" 38 | } 39 | } 40 | ], 41 | "schemes": ["http"], 42 | "paths": { 43 | "/pet": { 44 | "post": { 45 | "tags": ["pet"], 46 | "summary": "Add a new pet to the store", 47 | "description": "", 48 | "operationId": "addPet", 49 | "consumes": ["application/json", "application/xml"], 50 | "produces": ["application/xml", "application/json"], 51 | "parameters": [ 52 | { 53 | "in": "body", 54 | "name": "body", 55 | "description": "Pet object that needs to be added to the store", 56 | "required": true, 57 | "schema": { 58 | "$ref": "#/definitions/Pet" 59 | } 60 | } 61 | ], 62 | "responses": { 63 | "405": { 64 | "description": "Invalid input" 65 | } 66 | }, 67 | "security": [ 68 | { 69 | "petstore_auth": ["write:pets", "read:pets"] 70 | } 71 | ] 72 | }, 73 | "put": { 74 | "tags": ["pet"], 75 | "summary": "Update an existing pet", 76 | "description": "", 77 | "operationId": "updatePet", 78 | "consumes": ["application/json", "application/xml"], 79 | "produces": ["application/xml", "application/json"], 80 | "parameters": [ 81 | { 82 | "in": "body", 83 | "name": "body", 84 | "description": "Pet object that needs to be added to the store", 85 | "required": true, 86 | "schema": { 87 | "$ref": "#/definitions/Pet" 88 | } 89 | } 90 | ], 91 | "responses": { 92 | "400": { 93 | "description": "Invalid ID supplied" 94 | }, 95 | "404": { 96 | "description": "Pet not found" 97 | }, 98 | "405": { 99 | "description": "Validation exception" 100 | } 101 | }, 102 | "security": [ 103 | { 104 | "petstore_auth": ["write:pets", "read:pets"] 105 | } 106 | ] 107 | } 108 | }, 109 | "/pet/findByStatus": { 110 | "get": { 111 | "tags": ["pet"], 112 | "summary": "Finds Pets by status", 113 | "description": 114 | "Multiple status values can be provided with comma separated strings", 115 | "operationId": "findPetsByStatus", 116 | "produces": ["application/xml", "application/json"], 117 | "parameters": [ 118 | { 119 | "name": "status", 120 | "in": "query", 121 | "description": 122 | "Status values that need to be considered for filter", 123 | "required": true, 124 | "type": "array", 125 | "items": { 126 | "type": "string", 127 | "enum": ["available", "pending", "sold"], 128 | "default": "available" 129 | }, 130 | "collectionFormat": "multi" 131 | } 132 | ], 133 | "responses": { 134 | "200": { 135 | "description": "successful operation", 136 | "schema": { 137 | "type": "array", 138 | "items": { 139 | "$ref": "#/definitions/Pet" 140 | } 141 | } 142 | }, 143 | "400": { 144 | "description": "Invalid status value" 145 | } 146 | }, 147 | "security": [ 148 | { 149 | "petstore_auth": ["write:pets", "read:pets"] 150 | } 151 | ] 152 | } 153 | }, 154 | "/pet/findByTags": { 155 | "get": { 156 | "tags": ["pet"], 157 | "summary": "Finds Pets by tags", 158 | "description": 159 | "Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", 160 | "operationId": "findPetsByTags", 161 | "produces": ["application/xml", "application/json"], 162 | "parameters": [ 163 | { 164 | "name": "tags", 165 | "in": "query", 166 | "description": "Tags to filter by", 167 | "required": true, 168 | "type": "array", 169 | "items": { 170 | "type": "string" 171 | }, 172 | "collectionFormat": "multi" 173 | } 174 | ], 175 | "responses": { 176 | "200": { 177 | "description": "successful operation", 178 | "schema": { 179 | "type": "array", 180 | "items": { 181 | "$ref": "#/definitions/Pet" 182 | } 183 | } 184 | }, 185 | "400": { 186 | "description": "Invalid tag value" 187 | } 188 | }, 189 | "security": [ 190 | { 191 | "petstore_auth": ["write:pets", "read:pets"] 192 | } 193 | ], 194 | "deprecated": true 195 | } 196 | }, 197 | "/pet/{petId}": { 198 | "get": { 199 | "tags": ["pet"], 200 | "summary": "Find pet by ID", 201 | "description": "Returns a single pet", 202 | "operationId": "getPetById", 203 | "produces": ["application/xml", "application/json"], 204 | "parameters": [ 205 | { 206 | "name": "petId", 207 | "in": "path", 208 | "description": "ID of pet to return", 209 | "required": true, 210 | "type": "integer", 211 | "format": "int64" 212 | } 213 | ], 214 | "responses": { 215 | "200": { 216 | "description": "successful operation", 217 | "schema": { 218 | "$ref": "#/definitions/Pet" 219 | } 220 | }, 221 | "400": { 222 | "description": "Invalid ID supplied" 223 | }, 224 | "404": { 225 | "description": "Pet not found" 226 | } 227 | }, 228 | "security": [ 229 | { 230 | "api_key": [] 231 | } 232 | ] 233 | }, 234 | "post": { 235 | "tags": ["pet"], 236 | "summary": "Updates a pet in the store with form data", 237 | "description": "", 238 | "operationId": "updatePetWithForm", 239 | "consumes": ["application/x-www-form-urlencoded"], 240 | "produces": ["application/xml", "application/json"], 241 | "parameters": [ 242 | { 243 | "name": "petId", 244 | "in": "path", 245 | "description": "ID of pet that needs to be updated", 246 | "required": true, 247 | "type": "integer", 248 | "format": "int64" 249 | }, 250 | { 251 | "name": "name", 252 | "in": "formData", 253 | "description": "Updated name of the pet", 254 | "required": false, 255 | "type": "string" 256 | }, 257 | { 258 | "name": "status", 259 | "in": "formData", 260 | "description": "Updated status of the pet", 261 | "required": false, 262 | "type": "string" 263 | } 264 | ], 265 | "responses": { 266 | "405": { 267 | "description": "Invalid input" 268 | } 269 | }, 270 | "security": [ 271 | { 272 | "petstore_auth": ["write:pets", "read:pets"] 273 | } 274 | ] 275 | }, 276 | "delete": { 277 | "tags": ["pet"], 278 | "summary": "Deletes a pet", 279 | "description": "", 280 | "operationId": "deletePet", 281 | "produces": ["application/xml", "application/json"], 282 | "parameters": [ 283 | { 284 | "name": "api_key", 285 | "in": "header", 286 | "required": false, 287 | "type": "string" 288 | }, 289 | { 290 | "name": "petId", 291 | "in": "path", 292 | "description": "Pet id to delete", 293 | "required": true, 294 | "type": "integer", 295 | "format": "int64" 296 | } 297 | ], 298 | "responses": { 299 | "400": { 300 | "description": "Invalid ID supplied" 301 | }, 302 | "404": { 303 | "description": "Pet not found" 304 | } 305 | }, 306 | "security": [ 307 | { 308 | "petstore_auth": ["write:pets", "read:pets"] 309 | } 310 | ] 311 | } 312 | }, 313 | "/pet/{petId}/uploadImage": { 314 | "post": { 315 | "tags": ["pet"], 316 | "summary": "uploads an image", 317 | "description": "", 318 | "operationId": "uploadFile", 319 | "consumes": ["multipart/form-data"], 320 | "produces": ["application/json"], 321 | "parameters": [ 322 | { 323 | "name": "petId", 324 | "in": "path", 325 | "description": "ID of pet to update", 326 | "required": true, 327 | "type": "integer", 328 | "format": "int64" 329 | }, 330 | { 331 | "name": "additionalMetadata", 332 | "in": "formData", 333 | "description": "Additional data to pass to server", 334 | "required": false, 335 | "type": "string" 336 | }, 337 | { 338 | "name": "file", 339 | "in": "formData", 340 | "description": "file to upload", 341 | "required": false, 342 | "type": "file" 343 | } 344 | ], 345 | "responses": { 346 | "200": { 347 | "description": "successful operation", 348 | "schema": { 349 | "$ref": "#/definitions/ApiResponse" 350 | } 351 | } 352 | }, 353 | "security": [ 354 | { 355 | "petstore_auth": ["write:pets", "read:pets"] 356 | } 357 | ] 358 | } 359 | }, 360 | "/store/inventory": { 361 | "get": { 362 | "tags": ["store"], 363 | "summary": "Returns pet inventories by status", 364 | "description": "Returns a map of status codes to quantities", 365 | "operationId": "getInventory", 366 | "produces": ["application/json"], 367 | "parameters": [], 368 | "responses": { 369 | "200": { 370 | "description": "successful operation", 371 | "schema": { 372 | "type": "object", 373 | "additionalProperties": { 374 | "type": "integer", 375 | "format": "int32" 376 | } 377 | } 378 | } 379 | }, 380 | "security": [ 381 | { 382 | "api_key": [] 383 | } 384 | ] 385 | } 386 | }, 387 | "/store/order": { 388 | "post": { 389 | "tags": ["store"], 390 | "summary": "Place an order for a pet", 391 | "description": "", 392 | "operationId": "placeOrder", 393 | "produces": ["application/xml", "application/json"], 394 | "parameters": [ 395 | { 396 | "in": "body", 397 | "name": "body", 398 | "description": "order placed for purchasing the pet", 399 | "required": true, 400 | "schema": { 401 | "$ref": "#/definitions/Order" 402 | } 403 | } 404 | ], 405 | "responses": { 406 | "200": { 407 | "description": "successful operation", 408 | "schema": { 409 | "$ref": "#/definitions/Order" 410 | } 411 | }, 412 | "400": { 413 | "description": "Invalid Order" 414 | } 415 | } 416 | } 417 | }, 418 | "/store/order/{orderId}": { 419 | "get": { 420 | "tags": ["store"], 421 | "summary": "Find purchase order by ID", 422 | "description": 423 | "For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions", 424 | "operationId": "getOrderById", 425 | "produces": ["application/xml", "application/json"], 426 | "parameters": [ 427 | { 428 | "name": "orderId", 429 | "in": "path", 430 | "description": "ID of pet that needs to be fetched", 431 | "required": true, 432 | "type": "integer", 433 | "maximum": 10.0, 434 | "minimum": 1.0, 435 | "format": "int64" 436 | } 437 | ], 438 | "responses": { 439 | "200": { 440 | "description": "successful operation", 441 | "schema": { 442 | "$ref": "#/definitions/Order" 443 | } 444 | }, 445 | "400": { 446 | "description": "Invalid ID supplied" 447 | }, 448 | "404": { 449 | "description": "Order not found" 450 | } 451 | } 452 | }, 453 | "delete": { 454 | "tags": ["store"], 455 | "summary": "Delete purchase order by ID", 456 | "description": 457 | "For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors", 458 | "operationId": "deleteOrder", 459 | "produces": ["application/xml", "application/json"], 460 | "parameters": [ 461 | { 462 | "name": "orderId", 463 | "in": "path", 464 | "description": "ID of the order that needs to be deleted", 465 | "required": true, 466 | "type": "integer", 467 | "minimum": 1.0, 468 | "format": "int64" 469 | } 470 | ], 471 | "responses": { 472 | "400": { 473 | "description": "Invalid ID supplied" 474 | }, 475 | "404": { 476 | "description": "Order not found" 477 | } 478 | } 479 | } 480 | }, 481 | "/user": { 482 | "post": { 483 | "tags": ["user"], 484 | "summary": "Create user", 485 | "description": "This can only be done by the logged in user.", 486 | "operationId": "createUser", 487 | "produces": ["application/xml", "application/json"], 488 | "parameters": [ 489 | { 490 | "in": "body", 491 | "name": "body", 492 | "description": "Created user object", 493 | "required": true, 494 | "schema": { 495 | "$ref": "#/definitions/User" 496 | } 497 | } 498 | ], 499 | "responses": { 500 | "default": { 501 | "description": "successful operation" 502 | } 503 | } 504 | } 505 | }, 506 | "/user/createWithArray": { 507 | "post": { 508 | "tags": ["user"], 509 | "summary": "Creates list of users with given input array", 510 | "description": "", 511 | "operationId": "createUsersWithArrayInput", 512 | "produces": ["application/xml", "application/json"], 513 | "parameters": [ 514 | { 515 | "in": "body", 516 | "name": "body", 517 | "description": "List of user object", 518 | "required": true, 519 | "schema": { 520 | "type": "array", 521 | "items": { 522 | "$ref": "#/definitions/User" 523 | } 524 | } 525 | } 526 | ], 527 | "responses": { 528 | "default": { 529 | "description": "successful operation" 530 | } 531 | } 532 | } 533 | }, 534 | "/user/createWithList": { 535 | "post": { 536 | "tags": ["user"], 537 | "summary": "Creates list of users with given input array", 538 | "description": "", 539 | "operationId": "createUsersWithListInput", 540 | "produces": ["application/xml", "application/json"], 541 | "parameters": [ 542 | { 543 | "in": "body", 544 | "name": "body", 545 | "description": "List of user object", 546 | "required": true, 547 | "schema": { 548 | "type": "array", 549 | "items": { 550 | "$ref": "#/definitions/User" 551 | } 552 | } 553 | } 554 | ], 555 | "responses": { 556 | "default": { 557 | "description": "successful operation" 558 | } 559 | } 560 | } 561 | }, 562 | "/user/login": { 563 | "get": { 564 | "tags": ["user"], 565 | "summary": "Logs user into the system", 566 | "description": "", 567 | "operationId": "loginUser", 568 | "produces": ["application/xml", "application/json"], 569 | "parameters": [ 570 | { 571 | "name": "username", 572 | "in": "query", 573 | "description": "The user name for login", 574 | "required": true, 575 | "type": "string" 576 | }, 577 | { 578 | "name": "password", 579 | "in": "query", 580 | "description": "The password for login in clear text", 581 | "required": true, 582 | "type": "string" 583 | } 584 | ], 585 | "responses": { 586 | "200": { 587 | "description": "successful operation", 588 | "schema": { 589 | "type": "string" 590 | }, 591 | "headers": { 592 | "X-Rate-Limit": { 593 | "type": "integer", 594 | "format": "int32", 595 | "description": "calls per hour allowed by the user" 596 | }, 597 | "X-Expires-After": { 598 | "type": "string", 599 | "format": "date-time", 600 | "description": "date in UTC when token expires" 601 | } 602 | } 603 | }, 604 | "400": { 605 | "description": "Invalid username/password supplied" 606 | } 607 | } 608 | } 609 | }, 610 | "/user/logout": { 611 | "get": { 612 | "tags": ["user"], 613 | "summary": "Logs out current logged in user session", 614 | "description": "", 615 | "operationId": "logoutUser", 616 | "produces": ["application/xml", "application/json"], 617 | "parameters": [], 618 | "responses": { 619 | "default": { 620 | "description": "successful operation" 621 | } 622 | } 623 | } 624 | }, 625 | "/user/{username}": { 626 | "get": { 627 | "tags": ["user"], 628 | "summary": "Get user by user name", 629 | "description": "", 630 | "operationId": "getUserByName", 631 | "produces": ["application/xml", "application/json"], 632 | "parameters": [ 633 | { 634 | "name": "username", 635 | "in": "path", 636 | "description": 637 | "The name that needs to be fetched. Use user1 for testing. ", 638 | "required": true, 639 | "type": "string" 640 | } 641 | ], 642 | "responses": { 643 | "200": { 644 | "description": "successful operation", 645 | "schema": { 646 | "$ref": "#/definitions/User" 647 | } 648 | }, 649 | "400": { 650 | "description": "Invalid username supplied" 651 | }, 652 | "404": { 653 | "description": "User not found" 654 | } 655 | } 656 | }, 657 | "put": { 658 | "tags": ["user"], 659 | "summary": "Updated user", 660 | "description": "This can only be done by the logged in user.", 661 | "operationId": "updateUser", 662 | "produces": ["application/xml", "application/json"], 663 | "parameters": [ 664 | { 665 | "name": "username", 666 | "in": "path", 667 | "description": "name that need to be updated", 668 | "required": true, 669 | "type": "string" 670 | }, 671 | { 672 | "in": "body", 673 | "name": "body", 674 | "description": "Updated user object", 675 | "required": true, 676 | "schema": { 677 | "$ref": "#/definitions/User" 678 | } 679 | } 680 | ], 681 | "responses": { 682 | "400": { 683 | "description": "Invalid user supplied" 684 | }, 685 | "404": { 686 | "description": "User not found" 687 | } 688 | } 689 | }, 690 | "delete": { 691 | "tags": ["user"], 692 | "summary": "Delete user", 693 | "description": "This can only be done by the logged in user.", 694 | "operationId": "deleteUser", 695 | "produces": ["application/xml", "application/json"], 696 | "parameters": [ 697 | { 698 | "name": "username", 699 | "in": "path", 700 | "description": "The name that needs to be deleted", 701 | "required": true, 702 | "type": "string" 703 | } 704 | ], 705 | "responses": { 706 | "400": { 707 | "description": "Invalid username supplied" 708 | }, 709 | "404": { 710 | "description": "User not found" 711 | } 712 | } 713 | } 714 | } 715 | }, 716 | "securityDefinitions": { 717 | "petstore_auth": { 718 | "type": "oauth2", 719 | "authorizationUrl": "http://petstore.swagger.io/oauth/dialog", 720 | "flow": "implicit", 721 | "scopes": { 722 | "write:pets": "modify pets in your account", 723 | "read:pets": "read your pets" 724 | } 725 | }, 726 | "api_key": { 727 | "type": "apiKey", 728 | "name": "api_key", 729 | "in": "header" 730 | } 731 | }, 732 | "definitions": { 733 | "Order": { 734 | "type": "object", 735 | "properties": { 736 | "id": { 737 | "type": "integer", 738 | "format": "int64" 739 | }, 740 | "petId": { 741 | "type": "integer", 742 | "format": "int64" 743 | }, 744 | "quantity": { 745 | "type": "integer", 746 | "format": "int32" 747 | }, 748 | "shipDate": { 749 | "type": "string", 750 | "format": "date-time" 751 | }, 752 | "status": { 753 | "type": "string", 754 | "description": "Order Status", 755 | "enum": ["placed", "approved", "delivered"] 756 | }, 757 | "complete": { 758 | "type": "boolean", 759 | "default": false 760 | } 761 | }, 762 | "xml": { 763 | "name": "Order" 764 | } 765 | }, 766 | "Category": { 767 | "type": "object", 768 | "properties": { 769 | "id": { 770 | "type": "integer", 771 | "format": "int64" 772 | }, 773 | "name": { 774 | "type": "string" 775 | } 776 | }, 777 | "xml": { 778 | "name": "Category" 779 | } 780 | }, 781 | "User": { 782 | "type": "object", 783 | "properties": { 784 | "id": { 785 | "type": "integer", 786 | "format": "int64" 787 | }, 788 | "username": { 789 | "type": "string" 790 | }, 791 | "firstName": { 792 | "type": "string" 793 | }, 794 | "lastName": { 795 | "type": "string" 796 | }, 797 | "email": { 798 | "type": "string" 799 | }, 800 | "password": { 801 | "type": "string" 802 | }, 803 | "phone": { 804 | "type": "string" 805 | }, 806 | "userStatus": { 807 | "type": "integer", 808 | "format": "int32", 809 | "description": "User Status" 810 | } 811 | }, 812 | "xml": { 813 | "name": "User" 814 | } 815 | }, 816 | "Tag": { 817 | "type": "object", 818 | "properties": { 819 | "id": { 820 | "type": "integer", 821 | "format": "int64" 822 | }, 823 | "name": { 824 | "type": "string" 825 | } 826 | }, 827 | "xml": { 828 | "name": "Tag" 829 | } 830 | }, 831 | "Pet": { 832 | "type": "object", 833 | "required": ["name", "photoUrls"], 834 | "properties": { 835 | "id": { 836 | "type": "integer", 837 | "format": "int64" 838 | }, 839 | "category": { 840 | "$ref": "#/definitions/Category" 841 | }, 842 | "name": { 843 | "type": "string", 844 | "example": "doggie" 845 | }, 846 | "photoUrls": { 847 | "type": "array", 848 | "xml": { 849 | "name": "photoUrl", 850 | "wrapped": true 851 | }, 852 | "items": { 853 | "type": "string" 854 | } 855 | }, 856 | "tags": { 857 | "type": "array", 858 | "xml": { 859 | "name": "tag", 860 | "wrapped": true 861 | }, 862 | "items": { 863 | "$ref": "#/definitions/Tag" 864 | } 865 | }, 866 | "status": { 867 | "type": "string", 868 | "description": "pet status in the store", 869 | "enum": ["available", "pending", "sold"] 870 | } 871 | }, 872 | "xml": { 873 | "name": "Pet" 874 | } 875 | }, 876 | "ApiResponse": { 877 | "type": "object", 878 | "properties": { 879 | "code": { 880 | "type": "integer", 881 | "format": "int32" 882 | }, 883 | "type": { 884 | "type": "string" 885 | }, 886 | "message": { 887 | "type": "string" 888 | } 889 | } 890 | } 891 | }, 892 | "externalDocs": { 893 | "description": "Find out more about Swagger", 894 | "url": "http://swagger.io" 895 | } 896 | } 897 | -------------------------------------------------------------------------------- /sample/data/swagger-uber.json: -------------------------------------------------------------------------------- 1 | { 2 | "swagger": "2.0", 3 | "info": { 4 | "title": "Uber API", 5 | "description": "Move your app forward with the Uber API", 6 | "version": "1.0.0" 7 | }, 8 | "host": "api.uber.com", 9 | "schemes": [ 10 | "https" 11 | ], 12 | "basePath": "/v1", 13 | "produces": [ 14 | "application/json" 15 | ], 16 | "paths": { 17 | "/products": { 18 | "get": { 19 | "summary": "Product Types", 20 | "description": "The Products endpoint returns information about the *Uber* products\noffered at a given location. The response includes the display name\nand other details about each product, and lists the products in the\nproper display order.\n", 21 | "parameters": [ 22 | { 23 | "name": "latitude", 24 | "in": "query", 25 | "description": "Latitude component of location.", 26 | "required": true, 27 | "type": "number", 28 | "format": "double" 29 | }, 30 | { 31 | "name": "longitude", 32 | "in": "query", 33 | "description": "Longitude component of location.", 34 | "required": true, 35 | "type": "number", 36 | "format": "double" 37 | } 38 | ], 39 | "tags": [ 40 | "Products" 41 | ], 42 | "responses": { 43 | "200": { 44 | "description": "An array of products", 45 | "schema": { 46 | "type": "array", 47 | "items": { 48 | "$ref": "#/definitions/Product" 49 | } 50 | } 51 | }, 52 | "default": { 53 | "description": "Unexpected error", 54 | "schema": { 55 | "$ref": "#/definitions/Error" 56 | } 57 | } 58 | } 59 | } 60 | }, 61 | "/estimates/price": { 62 | "get": { 63 | "summary": "Price Estimates", 64 | "description": "The Price Estimates endpoint returns an estimated price range\nfor each product offered at a given location. The price estimate is\nprovided as a formatted string with the full price range and the localized\ncurrency symbol.

The response also includes low and high estimates,\nand the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for\nsituations requiring currency conversion. When surge is active for a particular\nproduct, its surge_multiplier will be greater than 1, but the price estimate\nalready factors in this multiplier.\n", 65 | "parameters": [ 66 | { 67 | "name": "start_latitude", 68 | "in": "query", 69 | "description": "Latitude component of start location.", 70 | "required": true, 71 | "type": "number", 72 | "format": "double" 73 | }, 74 | { 75 | "name": "start_longitude", 76 | "in": "query", 77 | "description": "Longitude component of start location.", 78 | "required": true, 79 | "type": "number", 80 | "format": "double" 81 | }, 82 | { 83 | "name": "end_latitude", 84 | "in": "query", 85 | "description": "Latitude component of end location.", 86 | "required": true, 87 | "type": "number", 88 | "format": "double" 89 | }, 90 | { 91 | "name": "end_longitude", 92 | "in": "query", 93 | "description": "Longitude component of end location.", 94 | "required": true, 95 | "type": "number", 96 | "format": "double" 97 | } 98 | ], 99 | "tags": [ 100 | "Estimates" 101 | ], 102 | "responses": { 103 | "200": { 104 | "description": "An array of price estimates by product", 105 | "schema": { 106 | "type": "array", 107 | "items": { 108 | "$ref": "#/definitions/PriceEstimate" 109 | } 110 | } 111 | }, 112 | "default": { 113 | "description": "Unexpected error", 114 | "schema": { 115 | "$ref": "#/definitions/Error" 116 | } 117 | } 118 | } 119 | } 120 | }, 121 | "/estimates/time": { 122 | "get": { 123 | "summary": "Time Estimates", 124 | "description": "The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs.", 125 | "parameters": [ 126 | { 127 | "name": "start_latitude", 128 | "in": "query", 129 | "description": "Latitude component of start location.", 130 | "required": true, 131 | "type": "number", 132 | "format": "double" 133 | }, 134 | { 135 | "name": "start_longitude", 136 | "in": "query", 137 | "description": "Longitude component of start location.", 138 | "required": true, 139 | "type": "number", 140 | "format": "double" 141 | }, 142 | { 143 | "name": "customer_uuid", 144 | "in": "query", 145 | "type": "string", 146 | "format": "uuid", 147 | "description": "Unique customer identifier to be used for experience customization." 148 | }, 149 | { 150 | "name": "product_id", 151 | "in": "query", 152 | "type": "string", 153 | "description": "Unique identifier representing a specific product for a given latitude & longitude." 154 | } 155 | ], 156 | "tags": [ 157 | "Estimates" 158 | ], 159 | "responses": { 160 | "200": { 161 | "description": "An array of products", 162 | "schema": { 163 | "type": "array", 164 | "items": { 165 | "$ref": "#/definitions/Product" 166 | } 167 | } 168 | }, 169 | "default": { 170 | "description": "Unexpected error", 171 | "schema": { 172 | "$ref": "#/definitions/Error" 173 | } 174 | } 175 | } 176 | } 177 | }, 178 | "/me": { 179 | "get": { 180 | "summary": "User Profile", 181 | "description": "The User Profile endpoint returns information about the Uber user that has authorized with the application.", 182 | "tags": [ 183 | "User" 184 | ], 185 | "responses": { 186 | "200": { 187 | "description": "Profile information for a user", 188 | "schema": { 189 | "$ref": "#/definitions/Profile" 190 | } 191 | }, 192 | "default": { 193 | "description": "Unexpected error", 194 | "schema": { 195 | "$ref": "#/definitions/Error" 196 | } 197 | } 198 | } 199 | } 200 | }, 201 | "/history": { 202 | "get": { 203 | "summary": "User Activity", 204 | "description": "The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.

The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary.", 205 | "parameters": [ 206 | { 207 | "name": "offset", 208 | "in": "query", 209 | "type": "integer", 210 | "format": "int32", 211 | "description": "Offset the list of returned results by this amount. Default is zero." 212 | }, 213 | { 214 | "name": "limit", 215 | "in": "query", 216 | "type": "integer", 217 | "format": "int32", 218 | "description": "Number of items to retrieve. Default is 5, maximum is 100." 219 | } 220 | ], 221 | "tags": [ 222 | "User" 223 | ], 224 | "responses": { 225 | "200": { 226 | "description": "History information for the given user", 227 | "schema": { 228 | "$ref": "#/definitions/Activities" 229 | } 230 | }, 231 | "default": { 232 | "description": "Unexpected error", 233 | "schema": { 234 | "$ref": "#/definitions/Error" 235 | } 236 | } 237 | } 238 | } 239 | } 240 | }, 241 | "definitions": { 242 | "Product": { 243 | "type": "object", 244 | "properties": { 245 | "product_id": { 246 | "type": "string", 247 | "description": "Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles." 248 | }, 249 | "description": { 250 | "type": "string", 251 | "description": "Description of product." 252 | }, 253 | "display_name": { 254 | "type": "string", 255 | "description": "Display name of product." 256 | }, 257 | "capacity": { 258 | "type": "string", 259 | "description": "Capacity of product. For example, 4 people." 260 | }, 261 | "image": { 262 | "type": "string", 263 | "description": "Image URL representing the product." 264 | } 265 | } 266 | }, 267 | "PriceEstimate": { 268 | "type": "object", 269 | "properties": { 270 | "product_id": { 271 | "type": "string", 272 | "description": "Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles" 273 | }, 274 | "currency_code": { 275 | "type": "string", 276 | "description": "[ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code." 277 | }, 278 | "display_name": { 279 | "type": "string", 280 | "description": "Display name of product." 281 | }, 282 | "estimate": { 283 | "type": "string", 284 | "description": "Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or \"Metered\" for TAXI." 285 | }, 286 | "low_estimate": { 287 | "type": "number", 288 | "description": "Lower bound of the estimated price." 289 | }, 290 | "high_estimate": { 291 | "type": "number", 292 | "description": "Upper bound of the estimated price." 293 | }, 294 | "surge_multiplier": { 295 | "type": "number", 296 | "description": "Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier." 297 | } 298 | } 299 | }, 300 | "Profile": { 301 | "type": "object", 302 | "properties": { 303 | "first_name": { 304 | "type": "string", 305 | "description": "First name of the Uber user." 306 | }, 307 | "last_name": { 308 | "type": "string", 309 | "description": "Last name of the Uber user." 310 | }, 311 | "email": { 312 | "type": "string", 313 | "description": "Email address of the Uber user" 314 | }, 315 | "picture": { 316 | "type": "string", 317 | "description": "Image URL of the Uber user." 318 | }, 319 | "promo_code": { 320 | "type": "string", 321 | "description": "Promo code of the Uber user." 322 | } 323 | } 324 | }, 325 | "Activity": { 326 | "type": "object", 327 | "properties": { 328 | "uuid": { 329 | "type": "string", 330 | "description": "Unique identifier for the activity" 331 | } 332 | } 333 | }, 334 | "Activities": { 335 | "type": "object", 336 | "properties": { 337 | "offset": { 338 | "type": "integer", 339 | "format": "int32", 340 | "description": "Position in pagination." 341 | }, 342 | "limit": { 343 | "type": "integer", 344 | "format": "int32", 345 | "description": "Number of items to retrieve (100 max)." 346 | }, 347 | "count": { 348 | "type": "integer", 349 | "format": "int32", 350 | "description": "Total number of items available." 351 | }, 352 | "history": { 353 | "type": "array", 354 | "items": { 355 | "$ref": "#/definitions/Activity" 356 | } 357 | } 358 | } 359 | }, 360 | "Error": { 361 | "type": "object", 362 | "properties": { 363 | "code": { 364 | "type": "integer", 365 | "format": "int32" 366 | }, 367 | "message": { 368 | "type": "string" 369 | }, 370 | "fields": { 371 | "type": "string" 372 | } 373 | } 374 | } 375 | } 376 | } -------------------------------------------------------------------------------- /sample/gatsby-config.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | 4 | const fromJson = filePath => { 5 | return new Promise((resolve, reject) => { 6 | fs.readFile(filePath, 'utf8', (err, data) => { 7 | if (err) { 8 | reject(err) 9 | return 10 | } 11 | 12 | resolve(data) 13 | }) 14 | }) 15 | } 16 | 17 | module.exports = { 18 | siteMetadata: { 19 | title: `OpenAPI Aggregate`, 20 | }, 21 | plugins: [ 22 | { 23 | resolve: `gatsby-source-openapi-aggregate`, 24 | options: { 25 | specs: [ 26 | { 27 | name: 'uber', 28 | resolve: () => 29 | fromJson(path.resolve(__dirname, './data/swagger-uber.json')), 30 | }, 31 | { 32 | name: 'pet-store', 33 | resolve: () => 34 | fromJson(path.resolve(__dirname, './data/swagger-petstore.json')), 35 | }, 36 | ], 37 | }, 38 | }, 39 | { 40 | resolve: `gatsby-source-filesystem`, 41 | options: { 42 | name: `src`, 43 | path: `${__dirname}/src/`, 44 | }, 45 | }, 46 | `gatsby-plugin-glamor`, 47 | { 48 | resolve: `gatsby-plugin-typography`, 49 | options: { 50 | pathToConfigModule: `src/utils/typography`, 51 | }, 52 | }, 53 | ], 54 | } 55 | -------------------------------------------------------------------------------- /sample/gatsby-node.js: -------------------------------------------------------------------------------- 1 | const path = require(`path`) 2 | const { createFilePath } = require(`gatsby-source-filesystem`) 3 | 4 | exports.modifyWebpackConfig = ({ config }) => { 5 | config.merge({ 6 | resolve: { 7 | alias: { 8 | '~': path.resolve(__dirname, './src'), 9 | }, 10 | }, 11 | }) 12 | 13 | return config 14 | } 15 | 16 | exports.createPages = ({ graphql, boundActionCreators }) => { 17 | const { createPage } = boundActionCreators 18 | return new Promise((resolve, reject) => { 19 | graphql(` 20 | { 21 | allOpenApiSpec { 22 | edges { 23 | node { 24 | id 25 | name 26 | } 27 | } 28 | } 29 | } 30 | `).then(result => { 31 | result.data.allOpenApiSpec.edges.map(({ node }) => { 32 | createPage({ 33 | path: `apis/${node.name}`, 34 | component: path.resolve(`./src/templates/api.js`), 35 | context: { 36 | id: node.id, 37 | }, 38 | }) 39 | }) 40 | 41 | resolve() 42 | }) 43 | }) 44 | } 45 | -------------------------------------------------------------------------------- /sample/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gatsby-source-openapi-aggregate-sample", 3 | "description": "OpenAPI Aggregate Sample", 4 | "version": "0.1.0", 5 | "author": "DevDigital ", 6 | "dependencies": { 7 | "gatsby": "^1.9.45", 8 | "gatsby-link": "^1.6.17", 9 | "gatsby-plugin-glamor": "^1.6.8", 10 | "gatsby-plugin-react-helmet": "^1.0.5", 11 | "gatsby-plugin-typography": "^1.7.10", 12 | "gatsby-remark-copy-linked-files": "^1.5.7", 13 | "gatsby-remark-prismjs": "^1.2.8", 14 | "gatsby-remark-responsive-iframe": "^1.4.8", 15 | "gatsby-remark-smartypants": "^1.4.8", 16 | "gatsby-source-filesystem": "^1.5.2", 17 | "gatsby-transformer-remark": "^1.7.15", 18 | "glamorous": "^4.9.7", 19 | "lodash.groupby": "^4.6.0", 20 | "lodash.rest": "^4.0.5", 21 | "remark-parse": "^8.0.2", 22 | "remark-react": "^7.0.1", 23 | "typography-theme-alton": "^0.15.10", 24 | "typography-theme-kirkham": "^0.16.3", 25 | "typography-theme-twin-peaks": "^0.15.11", 26 | "unified": "^9.0.0" 27 | }, 28 | "keywords": [ 29 | "gatsby" 30 | ], 31 | "license": "MIT", 32 | "main": "n/a", 33 | "scripts": { 34 | "develop": "gatsby develop", 35 | "build": "gatsby build", 36 | "format": "prettier --trailing-comma es5 --no-semi --single-quote --write 'src/**/*.js'", 37 | "test": "echo \"Error: no test specified\"" 38 | }, 39 | "devDependencies": { 40 | "gh-pages": "^1.0.0", 41 | "prettier": "^1.6.1" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /sample/plugins/gatsby-source-openapi-aggregate/gatsby-node.js: -------------------------------------------------------------------------------- 1 | const crypto = require(`crypto`) 2 | const specProcessorFactory = require('./processors/factory') 3 | 4 | const toHash = value => { 5 | return crypto 6 | .createHash(`md5`) 7 | .update(value) 8 | .digest(`hex`) 9 | } 10 | 11 | const toNode = (data, type) => { 12 | const openApiPrefix = 'openapi.' 13 | 14 | if (!data) { 15 | throw new Error('No data object specified') 16 | } 17 | 18 | if (!type) { 19 | throw new Error('No type specified') 20 | } 21 | 22 | if (!data.hasOwnProperty('id')) { 23 | throw new Error('Data object has no id property') 24 | } 25 | 26 | if (!data.hasOwnProperty('parent')) { 27 | throw new Error('Data object has no parent property') 28 | } 29 | 30 | if (!data.hasOwnProperty('children') || !Array.isArray(data.children)) { 31 | throw new Error('Data object has no children array property') 32 | } 33 | 34 | if (data.hasOwnProperty('fields') && data.hasOwnProperty('meta')) { 35 | throw new Error('Data object defines both a fields and a meta property') 36 | } 37 | 38 | if (!data.hasOwnProperty('fields') && !data.hasOwnProperty('meta')) { 39 | throw new Error('Data object does not define a fields or meta property') 40 | } 41 | 42 | const node = Object.assign( 43 | { 44 | id: `${openApiPrefix}${data.id}`, 45 | parent: data.parent ? `${openApiPrefix}${data.parent}` : null, 46 | children: data.children.map(c => `${openApiPrefix}${c}`), 47 | internal: { 48 | type, 49 | }, 50 | }, 51 | data.fields, 52 | ) 53 | 54 | if (data.meta) { 55 | node.internal.contentDigest = toHash(data.meta.content) 56 | node.internal.mediaType = data.meta.mediaType 57 | node.internal.content = data.meta.content 58 | return node 59 | } 60 | 61 | node.internal.contentDigest = toHash(JSON.stringify(data.fields)) 62 | return node 63 | } 64 | 65 | exports.sourceNodes = async ({ boundActionCreators }, options) => { 66 | const { createNode } = boundActionCreators 67 | 68 | // TODO: validate options [{ name, resolve }] 69 | // each name should be unique, only name and resolve properties should be present 70 | // also, resolve should be a function which returns a promise 71 | for (spec of options.specs) { 72 | let jsonText = null 73 | try { 74 | jsonText = await spec.resolve() 75 | } catch (exception) { 76 | console.warn( 77 | `There was an error resolving spec '${spec.name}', ${exception.name} ${exception.message} ${exception.stack}`, 78 | ) 79 | } 80 | 81 | if (jsonText === null) { 82 | return 83 | } 84 | 85 | try { 86 | const json = JSON.parse(jsonText) 87 | const processor = specProcessorFactory(json) 88 | const result = processor(spec.name, json) 89 | 90 | // { information, paths, responses, definitions } 91 | const nodes = [] 92 | nodes.push(toNode(result.information, 'OpenApiSpec')) 93 | result.paths.forEach(p => { 94 | nodes.push(toNode(p, 'OpenApiSpecPath')) 95 | }) 96 | result.responses.forEach(r => { 97 | nodes.push(toNode(r, 'OpenApiSpecResponse')) 98 | }) 99 | result.definitions.forEach(d => { 100 | nodes.push(toNode(d, 'OpenApiSpecDefinition')) 101 | }) 102 | 103 | nodes.forEach(n => { 104 | createNode(n) 105 | }) 106 | } catch (exception) { 107 | console.warn( 108 | `There was an error processing spec '${spec.name}', ${exception.name} ${exception.message} ${exception.stack}`, 109 | ) 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /sample/plugins/gatsby-source-openapi-aggregate/index.js: -------------------------------------------------------------------------------- 1 | // noop 2 | -------------------------------------------------------------------------------- /sample/plugins/gatsby-source-openapi-aggregate/package.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /sample/plugins/gatsby-source-openapi-aggregate/processors/factory.js: -------------------------------------------------------------------------------- 1 | const spec20Processor = require('./spec20Processor') 2 | 3 | const specProcessorFactory = spec => { 4 | if (spec.swagger === '2.0') { 5 | return spec20Processor 6 | } 7 | 8 | throw new Error(`Unsupported spec ${spec.swagger}`) 9 | } 10 | 11 | module.exports = specProcessorFactory 12 | -------------------------------------------------------------------------------- /sample/plugins/gatsby-source-openapi-aggregate/processors/spec20Processor.js: -------------------------------------------------------------------------------- 1 | const getXFields = obj => { 2 | let xfields = {} 3 | 4 | // copy x-* extension properties 5 | for (key in obj) { 6 | if (key.startsWith('x-')) { 7 | // convert snake-case to snake_case 8 | snake_case = key.replace(/-/g, '_') 9 | xfields[snake_case] = obj[key] 10 | } 11 | } 12 | 13 | return xfields 14 | } 15 | 16 | const spec20Processor = (name, spec) => { 17 | const rootId = `spec.${name}` 18 | 19 | const definitions = Object.keys(spec.definitions).map(d => { 20 | const definition = spec.definitions[d] 21 | const properties = definition.properties || {} 22 | 23 | return { 24 | id: `${rootId}.definition.${d}`, 25 | parent: rootId, 26 | children: [], 27 | fields: { 28 | name: d, 29 | properties: Object.keys(properties).map(k => { 30 | const property = properties[k] 31 | return { 32 | name: k, 33 | type: property.type, 34 | description: property.description, 35 | format: property.format, 36 | example: property.example, 37 | } 38 | }), 39 | }, 40 | } 41 | }) 42 | 43 | const paths = [] 44 | const responses = [] 45 | Object.keys(spec.paths).forEach(p => { 46 | Object.keys(spec.paths[p]).forEach(v => { 47 | const path = spec.paths[p][v] 48 | const pathResponses = Object.keys(path.responses).map(r => { 49 | const response = path.responses[r] 50 | 51 | let ref = null 52 | 53 | if (response.schema) { 54 | ref = 55 | response.schema.type === 'array' 56 | ? response.schema.items.$ref 57 | : response.schema.$ref 58 | } 59 | 60 | const definitionId = ref ? ref.replace('#/definitions/', '') : null 61 | 62 | return { 63 | id: `${rootId}.path.${p}.verb.${v}.response.${r}`, 64 | parent: `${rootId}.path.${p}.verb.${v}`, 65 | children: definitionId 66 | ? [`${rootId}.definition.${definitionId}`] 67 | : [], 68 | fields: Object.assign( 69 | { 70 | statusCode: r, 71 | description: response.description, 72 | schema: response.schema, 73 | headers: response.headers, 74 | examples: response.examples, 75 | }, 76 | getXFields(response), 77 | ), 78 | } 79 | }) 80 | 81 | pathResponses.forEach(r => { 82 | responses.push(r) 83 | }) 84 | 85 | paths.push({ 86 | id: `${rootId}.path.${p}.verb.${v}`, 87 | parent: rootId, 88 | children: [...pathResponses.map(pr => pr.id)], 89 | fields: Object.assign( 90 | { 91 | name: p, 92 | verb: v, 93 | summary: path.summary, 94 | description: path.description, 95 | parameters: path.parameters, 96 | tags: path.tags, 97 | tag: path.tags ? path.tags.join(',') : null, 98 | operationId: path.operationId, 99 | fullPath: spec.basePath + p, 100 | consumes: path.consumes, 101 | produces: path.produces, 102 | schemes: path.schemes, 103 | deprecated: path.deprecated, 104 | }, 105 | getXFields(path), 106 | ), 107 | }) 108 | }) 109 | }) 110 | 111 | const information = { 112 | id: rootId, 113 | parent: null, 114 | children: [...paths.map(p => p.id), ...definitions.map(d => d.id)], 115 | fields: { 116 | name, 117 | version: spec.info.version, 118 | title: spec.info.title, 119 | description: spec.info.description, 120 | host: spec.host, 121 | schemes: spec.schemes, 122 | basePath: spec.basePath, 123 | produces: spec.produces, 124 | }, 125 | } 126 | 127 | return { 128 | information, 129 | paths, 130 | responses, 131 | definitions, 132 | } 133 | } 134 | 135 | module.exports = spec20Processor 136 | -------------------------------------------------------------------------------- /sample/src/common/Markdown.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import unified from 'unified' 4 | import parse from 'remark-parse' 5 | import remark2react from 'remark-react' 6 | 7 | const Markdown = ({ markdown }) => { 8 | return ( 9 |
10 | { 11 | unified() 12 | .use(parse) 13 | .use(remark2react) 14 | .processSync(markdown).result 15 | } 16 |
17 | ) 18 | } 19 | 20 | Markdown.propTypes = { 21 | markdown: PropTypes.string.isRequired, 22 | } 23 | 24 | export default Markdown 25 | -------------------------------------------------------------------------------- /sample/src/layouts/index.css: -------------------------------------------------------------------------------- 1 | .gatsby-highlight-code-line { 2 | background-color: #feb; 3 | display: block; 4 | margin-right: -1em; 5 | margin-left: -1em; 6 | padding-right: 1em; 7 | padding-left: 0.75em; 8 | border-left: 0.25em solid #f99; 9 | } 10 | 11 | /** 12 | * Add back the container background-color, border-radius, padding, margin 13 | * and overflow that we removed from
.
14 |  */
15 | .gatsby-highlight {
16 |   background-color: #fdf6e3;
17 |   border-radius: 0.3em;
18 |   margin: .5em 0;
19 |   padding: 1em;
20 |   overflow: auto;
21 | }
22 | 
23 | /**
24 |  * Remove the default PrismJS theme background-color, border-radius, margin,
25 |  * padding and overflow.
26 |  * 1. Make the element just wide enough to fit its content.
27 |  * 2. Always fill the visible space in .gatsby-highlight.
28 |  */
29 | .gatsby-highlight pre[class*="language-"] {
30 |   background-color: transparent;
31 |   margin: 0;
32 |   padding: 0;
33 |   overflow: initial;
34 |   float: left; /* 1 */
35 |   min-width: 100%; /* 2 */
36 | }
37 | 


--------------------------------------------------------------------------------
/sample/src/layouts/index.js:
--------------------------------------------------------------------------------
 1 | import React, { Component } from 'react'
 2 | import glamorous from 'glamorous'
 3 | import { rhythm } from '~/utils/typography'
 4 | import 'prismjs/themes/prism-solarizedlight.css'
 5 | import './index.css'
 6 | 
 7 | const Content = glamorous.div({
 8 |   maxWidth: 900,
 9 |   padding: rhythm(2),
10 |   paddingTop: rhythm(1.5),
11 | })
12 | 
13 | class App extends Component {
14 |   render() {
15 |     const { data, children } = this.props
16 |     return (
17 |       
18 | {children()} 19 |
20 | ) 21 | } 22 | } 23 | 24 | export default App 25 | 26 | export const query = graphql` 27 | query IndexLayoutQuery { 28 | site { 29 | siteMetadata { 30 | title 31 | } 32 | } 33 | } 34 | ` 35 | -------------------------------------------------------------------------------- /sample/src/pages/404.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const NotFoundPage = () => ( 4 |
5 |

NOT FOUND

6 |

You just hit a page that doesn't exist.

7 |
8 | ) 9 | 10 | export default NotFoundPage 11 | -------------------------------------------------------------------------------- /sample/src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Specs from '~/spec/Specs' 3 | 4 | export default ({ data }) => { 5 | const specs = data.allOpenApiSpec.edges.map(e => e.node) 6 | 7 | return ( 8 |
9 |

Specs

10 | 11 |
12 |
13 | ) 14 | } 15 | 16 | export const query = graphql` 17 | query IndexQuery { 18 | allOpenApiSpec { 19 | edges { 20 | node { 21 | name 22 | title 23 | } 24 | } 25 | } 26 | } 27 | ` 28 | -------------------------------------------------------------------------------- /sample/src/spec/Spec.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import Link from 'gatsby-link' 4 | 5 | const Spec = ({ name, title }) => ( 6 |
  • 7 | {title} 8 |
  • 9 | ) 10 | 11 | Spec.propTypes = { 12 | name: PropTypes.string.isRequired, 13 | title: PropTypes.string, 14 | } 15 | 16 | export default Spec 17 | -------------------------------------------------------------------------------- /sample/src/spec/SpecDefinition.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import g from 'glamorous' 4 | 5 | const SpecDefinitionProperty = ({ name, type, description, format }) => ( 6 | 7 | {name} 8 | {type} 9 | {description} 10 | {format} 11 | 12 | ) 13 | 14 | SpecDefinitionProperty.propTypes = { 15 | name: PropTypes.string.isRequired, 16 | type: PropTypes.string, 17 | description: PropTypes.string, 18 | format: PropTypes.string, 19 | } 20 | 21 | const SpecDefinition = ({ definition }) => ( 22 |
    23 | 24 | {definition.name} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | {definition.properties.map((p, i) => ( 37 | 44 | ))} 45 | 46 |
    NameTypeDescriptionFormat
    47 |
    48 | ) 49 | 50 | SpecDefinition.propTypes = { 51 | definition: PropTypes.object.isRequired, 52 | } 53 | 54 | export default SpecDefinition 55 | -------------------------------------------------------------------------------- /sample/src/spec/SpecInformation.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import Markdown from '~/common/Markdown' 4 | 5 | const SpecInformation = ({ title, version, description }) => ( 6 |
    7 |

    {title}

    8 |

    Version: {version}

    9 | 10 |
    11 | ) 12 | 13 | SpecInformation.propTypes = { 14 | title: PropTypes.string.isRequired, 15 | version: PropTypes.string.isRequired, 16 | description: PropTypes.string.isRequired, 17 | } 18 | 19 | export default SpecInformation 20 | -------------------------------------------------------------------------------- /sample/src/spec/SpecPathParameters.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import g from 'glamorous' 4 | 5 | const superScriptStyle = { 6 | position: 'relative', 7 | top: '-0.5em', 8 | fontSize: '0.6rem', 9 | color: 'rgba(255,0,0,.6)', 10 | } 11 | 12 | const SpecPathParameter = ({ 13 | name, 14 | source, 15 | description, 16 | type, 17 | format, 18 | required, 19 | }) => { 20 | return ( 21 | 22 | 23 | 24 | {name}{' '} 25 | {required && * required} 26 | 27 | {type && ( 28 | 29 | {type} 30 | 31 | )} 32 | {source && ( 33 |

    34 | ({source}) 35 |

    36 | )} 37 | 38 | {description} 39 | 40 | ) 41 | } 42 | 43 | SpecPathParameter.propTypes = { 44 | name: PropTypes.string.isRequired, 45 | source: PropTypes.string, 46 | description: PropTypes.string, 47 | type: PropTypes.string, 48 | format: PropTypes.string, 49 | required: PropTypes.bool, 50 | } 51 | 52 | const SpecPathParameters = ({ parameters }) => ( 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | {parameters.map((p, i) => ( 62 | 71 | ))} 72 | 73 |
    NameDescription
    74 | ) 75 | 76 | SpecPathParameters.propTypes = { 77 | parameters: PropTypes.array.isRequired, 78 | } 79 | 80 | export default SpecPathParameters 81 | -------------------------------------------------------------------------------- /sample/src/spec/SpecPathResponse.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import g from 'glamorous' 4 | import { verbColor } from './Verb' 5 | import SpecDefinition from './SpecDefinition' 6 | 7 | const getInsetStyle = color => ({ 8 | border: `1px solid ${color}`, 9 | borderRadius: '4px', 10 | padding: '0.8rem', 11 | marginBottom: '1rem', 12 | }) 13 | 14 | const SpecPathResponse = ({ verb, statusCode, description, definitions }) => { 15 | return ( 16 | 20 | 21 | {statusCode} 22 | {description} 23 | 24 | {definitions.length === 1 ? ( 25 | 26 | 27 | 28 | ) : null} 29 | 30 | ) 31 | } 32 | 33 | SpecPathResponse.propTypes = { 34 | verb: PropTypes.string.isRequired, 35 | statusCode: PropTypes.string.isRequired, 36 | description: PropTypes.string.isRequired, 37 | definitions: PropTypes.array.isRequired, 38 | } 39 | 40 | export default SpecPathResponse 41 | -------------------------------------------------------------------------------- /sample/src/spec/SpecPaths.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import g from 'glamorous' 4 | import Markdown from '~/common/Markdown' 5 | import Verb, { verbColor } from './Verb' 6 | import SpecPathResponse from './SpecPathResponse' 7 | import SpecPathParameters from './SpecPathParameters' 8 | 9 | const pathStyle = verb => ({ 10 | padding: '1rem', 11 | borderRadius: '4px', 12 | border: `2px solid ${verbColor(verb).normal}`, 13 | backgroundColor: verbColor(verb).lighter, 14 | }) 15 | 16 | const SpecPath = ({ path }) => { 17 | const responses = path.childrenOpenApiSpecResponse 18 | 19 | return ( 20 | 21 | 22 | 23 | 24 | 25 | {path.fullPath} 26 | {path.summary} 27 | 28 | {path.operationId}() 29 | {path.description && } 30 | {path.parameters && } 31 |

    Responses

    32 | {responses.map(r => ( 33 | 40 | ))} 41 |
    42 | ) 43 | } 44 | 45 | SpecPath.propTypes = { 46 | path: PropTypes.object.isRequired, 47 | } 48 | 49 | const SpecPaths = ({ tag, paths }) => ( 50 |
    51 |

    {tag}

    52 | {paths.map(p => ( 53 | 54 | 55 | 56 | ))} 57 |
    58 | ) 59 | 60 | SpecPaths.propTypes = { 61 | tag: PropTypes.string.isRequired, 62 | paths: PropTypes.array.isRequired, 63 | } 64 | 65 | export default SpecPaths 66 | -------------------------------------------------------------------------------- /sample/src/spec/Specs.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import Spec from './Spec' 4 | 5 | const Specs = ({ specs }) => ( 6 |
    7 |
      8 | {specs.map(s => )} 9 |
    10 |
    11 | ) 12 | 13 | Specs.propTypes = { 14 | specs: PropTypes.array.isRequired, 15 | } 16 | 17 | export default Specs 18 | -------------------------------------------------------------------------------- /sample/src/spec/Verb.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import g from 'glamorous' 4 | 5 | export const verbColor = value => { 6 | switch (value) { 7 | case 'get': 8 | return { 9 | normal: '#61affe', 10 | lighter: 'rgba(97,175,254,.1)', 11 | } 12 | case 'post': 13 | return { 14 | normal: '#49cc90', 15 | lighter: 'rgba(73,204,144,.1)', 16 | } 17 | case 'put': 18 | return { 19 | normal: '#fca130', 20 | lighter: 'rgba(252,161,48,.1)', 21 | } 22 | case 'patch': 23 | return { 24 | normal: 'purple', 25 | lighter: 'lavender', 26 | } 27 | case 'delete': 28 | return { 29 | normal: '#f93e3e', 30 | lighter: 'rgba(249,62,62,.1)', 31 | } 32 | default: 33 | return { 34 | normal: '#fff', 35 | lighter: '#fff', 36 | } 37 | } 38 | 39 | return color 40 | } 41 | 42 | const Verb = ({ value, style }) => { 43 | const verbStyle = { 44 | padding: '0.2rem 0.5rem', 45 | backgroundColor: verbColor(value).normal, 46 | color: '#fff', 47 | } 48 | 49 | return {value.toUpperCase()} 50 | } 51 | 52 | export default Verb 53 | -------------------------------------------------------------------------------- /sample/src/templates/api.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import PropTypes from 'prop-types' 3 | import Link from 'gatsby-link' 4 | import groupBy from 'lodash.groupby' 5 | import SpecInformation from '~/spec/SpecInformation' 6 | import SpecPaths from '~/spec/SpecPaths' 7 | import g from 'glamorous' 8 | 9 | const backStyle = { 10 | marginBottom: '1rem', 11 | } 12 | 13 | class Api extends Component { 14 | render() { 15 | const api = this.props.data.openApiSpec 16 | const paths = api.childrenOpenApiSpecPath 17 | const pathGroups = groupBy(paths, p => p.tag) 18 | 19 | return ( 20 |
    21 | 22 | Back 23 | 24 | 29 | {Object.keys(pathGroups).map(t => ( 30 | 31 | ))} 32 |
    33 | ) 34 | } 35 | } 36 | 37 | Api.propTypes = { 38 | data: PropTypes.object.isRequired, 39 | } 40 | 41 | export default Api 42 | 43 | export const query = graphql` 44 | query ApiQuery($id: String!) { 45 | openApiSpec(id: { eq: $id }) { 46 | version 47 | title 48 | description 49 | childrenOpenApiSpecPath { 50 | name 51 | verb 52 | operationId 53 | summary 54 | description 55 | fullPath 56 | parameters { 57 | name 58 | in 59 | description 60 | required 61 | type 62 | format 63 | } 64 | tag 65 | childrenOpenApiSpecResponse { 66 | id 67 | statusCode 68 | description 69 | childrenOpenApiSpecDefinition { 70 | name 71 | properties { 72 | name 73 | type 74 | description 75 | format 76 | } 77 | } 78 | } 79 | } 80 | } 81 | } 82 | ` 83 | -------------------------------------------------------------------------------- /sample/src/utils/typography.js: -------------------------------------------------------------------------------- 1 | import Typography from 'typography' 2 | import theme from 'typography-theme-alton' 3 | 4 | const typography = new Typography(theme) 5 | 6 | module.exports = typography 7 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | JSONStream@^1.0.4: 6 | version "1.3.1" 7 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" 8 | dependencies: 9 | jsonparse "^1.2.0" 10 | through ">=2.2.7 <3" 11 | 12 | abbrev@1: 13 | version "1.1.1" 14 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 15 | 16 | ajv@^4.9.1: 17 | version "4.11.8" 18 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 19 | dependencies: 20 | co "^4.6.0" 21 | json-stable-stringify "^1.0.1" 22 | 23 | ansi-regex@^2.0.0: 24 | version "2.1.1" 25 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 26 | 27 | ansi-regex@^3.0.0: 28 | version "3.0.0" 29 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 30 | 31 | ansi-regex@^4.1.0: 32 | version "4.1.0" 33 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 34 | 35 | ansi-styles@^2.2.1: 36 | version "2.2.1" 37 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 38 | 39 | ansi-styles@^3.2.1: 40 | version "3.2.1" 41 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 42 | dependencies: 43 | color-convert "^1.9.0" 44 | 45 | anymatch@^1.3.0: 46 | version "1.3.2" 47 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 48 | dependencies: 49 | micromatch "^2.1.5" 50 | normalize-path "^2.0.0" 51 | 52 | aproba@^1.0.3: 53 | version "1.2.0" 54 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 55 | 56 | are-we-there-yet@~1.1.2: 57 | version "1.1.4" 58 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 59 | dependencies: 60 | delegates "^1.0.0" 61 | readable-stream "^2.0.6" 62 | 63 | arr-diff@^2.0.0: 64 | version "2.0.0" 65 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 66 | dependencies: 67 | arr-flatten "^1.0.1" 68 | 69 | arr-flatten@^1.0.1: 70 | version "1.1.0" 71 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 72 | 73 | array-find-index@^1.0.1: 74 | version "1.0.2" 75 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 76 | 77 | array-ify@^1.0.0: 78 | version "1.0.0" 79 | resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" 80 | 81 | array-unique@^0.2.1: 82 | version "0.2.1" 83 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 84 | 85 | arrify@^1.0.1: 86 | version "1.0.1" 87 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 88 | 89 | asn1@~0.2.3: 90 | version "0.2.3" 91 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 92 | 93 | assert-plus@1.0.0, assert-plus@^1.0.0: 94 | version "1.0.0" 95 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 96 | 97 | assert-plus@^0.2.0: 98 | version "0.2.0" 99 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 100 | 101 | async-each@^1.0.0: 102 | version "1.0.1" 103 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 104 | 105 | asynckit@^0.4.0: 106 | version "0.4.0" 107 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 108 | 109 | aws-sign2@~0.6.0: 110 | version "0.6.0" 111 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 112 | 113 | aws4@^1.2.1: 114 | version "1.6.0" 115 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 116 | 117 | babel-cli@6.26.0: 118 | version "6.26.0" 119 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" 120 | dependencies: 121 | babel-core "^6.26.0" 122 | babel-polyfill "^6.26.0" 123 | babel-register "^6.26.0" 124 | babel-runtime "^6.26.0" 125 | commander "^2.11.0" 126 | convert-source-map "^1.5.0" 127 | fs-readdir-recursive "^1.0.0" 128 | glob "^7.1.2" 129 | lodash "^4.17.4" 130 | output-file-sync "^1.1.2" 131 | path-is-absolute "^1.0.1" 132 | slash "^1.0.0" 133 | source-map "^0.5.6" 134 | v8flags "^2.1.1" 135 | optionalDependencies: 136 | chokidar "^1.6.1" 137 | 138 | babel-code-frame@^6.26.0: 139 | version "6.26.0" 140 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 141 | dependencies: 142 | chalk "^1.1.3" 143 | esutils "^2.0.2" 144 | js-tokens "^3.0.2" 145 | 146 | babel-core@^6.26.0: 147 | version "6.26.0" 148 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" 149 | dependencies: 150 | babel-code-frame "^6.26.0" 151 | babel-generator "^6.26.0" 152 | babel-helpers "^6.24.1" 153 | babel-messages "^6.23.0" 154 | babel-register "^6.26.0" 155 | babel-runtime "^6.26.0" 156 | babel-template "^6.26.0" 157 | babel-traverse "^6.26.0" 158 | babel-types "^6.26.0" 159 | babylon "^6.18.0" 160 | convert-source-map "^1.5.0" 161 | debug "^2.6.8" 162 | json5 "^0.5.1" 163 | lodash "^4.17.4" 164 | minimatch "^3.0.4" 165 | path-is-absolute "^1.0.1" 166 | private "^0.1.7" 167 | slash "^1.0.0" 168 | source-map "^0.5.6" 169 | 170 | babel-generator@^6.26.0: 171 | version "6.26.0" 172 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" 173 | dependencies: 174 | babel-messages "^6.23.0" 175 | babel-runtime "^6.26.0" 176 | babel-types "^6.26.0" 177 | detect-indent "^4.0.0" 178 | jsesc "^1.3.0" 179 | lodash "^4.17.4" 180 | source-map "^0.5.6" 181 | trim-right "^1.0.1" 182 | 183 | babel-helpers@^6.24.1: 184 | version "6.24.1" 185 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 186 | dependencies: 187 | babel-runtime "^6.22.0" 188 | babel-template "^6.24.1" 189 | 190 | babel-messages@^6.23.0: 191 | version "6.23.0" 192 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 193 | dependencies: 194 | babel-runtime "^6.22.0" 195 | 196 | babel-polyfill@^6.26.0: 197 | version "6.26.0" 198 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" 199 | dependencies: 200 | babel-runtime "^6.26.0" 201 | core-js "^2.5.0" 202 | regenerator-runtime "^0.10.5" 203 | 204 | babel-register@^6.26.0: 205 | version "6.26.0" 206 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 207 | dependencies: 208 | babel-core "^6.26.0" 209 | babel-runtime "^6.26.0" 210 | core-js "^2.5.0" 211 | home-or-tmp "^2.0.0" 212 | lodash "^4.17.4" 213 | mkdirp "^0.5.1" 214 | source-map-support "^0.4.15" 215 | 216 | babel-runtime@6.26.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: 217 | version "6.26.0" 218 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 219 | dependencies: 220 | core-js "^2.4.0" 221 | regenerator-runtime "^0.11.0" 222 | 223 | babel-template@^6.24.1, babel-template@^6.26.0: 224 | version "6.26.0" 225 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 226 | dependencies: 227 | babel-runtime "^6.26.0" 228 | babel-traverse "^6.26.0" 229 | babel-types "^6.26.0" 230 | babylon "^6.18.0" 231 | lodash "^4.17.4" 232 | 233 | babel-traverse@^6.26.0: 234 | version "6.26.0" 235 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 236 | dependencies: 237 | babel-code-frame "^6.26.0" 238 | babel-messages "^6.23.0" 239 | babel-runtime "^6.26.0" 240 | babel-types "^6.26.0" 241 | babylon "^6.18.0" 242 | debug "^2.6.8" 243 | globals "^9.18.0" 244 | invariant "^2.2.2" 245 | lodash "^4.17.4" 246 | 247 | babel-types@^6.26.0: 248 | version "6.26.0" 249 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 250 | dependencies: 251 | babel-runtime "^6.26.0" 252 | esutils "^2.0.2" 253 | lodash "^4.17.4" 254 | to-fast-properties "^1.0.3" 255 | 256 | babylon@^6.18.0: 257 | version "6.18.0" 258 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 259 | 260 | balanced-match@^1.0.0: 261 | version "1.0.0" 262 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 263 | 264 | bcrypt-pbkdf@^1.0.0: 265 | version "1.0.1" 266 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 267 | dependencies: 268 | tweetnacl "^0.14.3" 269 | 270 | binary-extensions@^1.0.0: 271 | version "1.10.0" 272 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" 273 | 274 | block-stream@*: 275 | version "0.0.9" 276 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 277 | dependencies: 278 | inherits "~2.0.0" 279 | 280 | boom@2.x.x: 281 | version "2.10.1" 282 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 283 | dependencies: 284 | hoek "2.x.x" 285 | 286 | brace-expansion@^1.1.7: 287 | version "1.1.8" 288 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 289 | dependencies: 290 | balanced-match "^1.0.0" 291 | concat-map "0.0.1" 292 | 293 | braces@^1.8.2: 294 | version "1.8.5" 295 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 296 | dependencies: 297 | expand-range "^1.8.1" 298 | preserve "^0.2.0" 299 | repeat-element "^1.1.2" 300 | 301 | buffer-from@^1.0.0: 302 | version "1.1.1" 303 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 304 | 305 | builtin-modules@^1.0.0: 306 | version "1.1.1" 307 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 308 | 309 | camelcase-keys@^2.0.0: 310 | version "2.1.0" 311 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 312 | dependencies: 313 | camelcase "^2.0.0" 314 | map-obj "^1.0.0" 315 | 316 | camelcase-keys@^4.0.0: 317 | version "4.2.0" 318 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" 319 | dependencies: 320 | camelcase "^4.1.0" 321 | map-obj "^2.0.0" 322 | quick-lru "^1.0.0" 323 | 324 | camelcase@^2.0.0: 325 | version "2.1.1" 326 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 327 | 328 | camelcase@^4.1.0: 329 | version "4.1.0" 330 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 331 | 332 | camelcase@^5.0.0: 333 | version "5.3.1" 334 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 335 | 336 | caseless@~0.12.0: 337 | version "0.12.0" 338 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 339 | 340 | chalk@2.4.2: 341 | version "2.4.2" 342 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 343 | dependencies: 344 | ansi-styles "^3.2.1" 345 | escape-string-regexp "^1.0.5" 346 | supports-color "^5.3.0" 347 | 348 | chalk@^1.1.3: 349 | version "1.1.3" 350 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 351 | dependencies: 352 | ansi-styles "^2.2.1" 353 | escape-string-regexp "^1.0.2" 354 | has-ansi "^2.0.0" 355 | strip-ansi "^3.0.0" 356 | supports-color "^2.0.0" 357 | 358 | chokidar@^1.6.1: 359 | version "1.7.0" 360 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 361 | dependencies: 362 | anymatch "^1.3.0" 363 | async-each "^1.0.0" 364 | glob-parent "^2.0.0" 365 | inherits "^2.0.1" 366 | is-binary-path "^1.0.0" 367 | is-glob "^2.0.0" 368 | path-is-absolute "^1.0.0" 369 | readdirp "^2.0.0" 370 | optionalDependencies: 371 | fsevents "^1.0.0" 372 | 373 | cliui@^4.0.0: 374 | version "4.1.0" 375 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 376 | dependencies: 377 | string-width "^2.1.1" 378 | strip-ansi "^4.0.0" 379 | wrap-ansi "^2.0.0" 380 | 381 | co@^4.6.0: 382 | version "4.6.0" 383 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 384 | 385 | code-point-at@^1.0.0: 386 | version "1.1.0" 387 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 388 | 389 | color-convert@^1.9.0: 390 | version "1.9.3" 391 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 392 | dependencies: 393 | color-name "1.1.3" 394 | 395 | color-name@1.1.3: 396 | version "1.1.3" 397 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 398 | 399 | combined-stream@^1.0.5, combined-stream@~1.0.5: 400 | version "1.0.5" 401 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 402 | dependencies: 403 | delayed-stream "~1.0.0" 404 | 405 | commander@^2.11.0: 406 | version "2.11.0" 407 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" 408 | 409 | commander@~2.20.0: 410 | version "2.20.0" 411 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 412 | 413 | compare-func@^1.3.1: 414 | version "1.3.2" 415 | resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" 416 | dependencies: 417 | array-ify "^1.0.0" 418 | dot-prop "^3.0.0" 419 | 420 | concat-map@0.0.1: 421 | version "0.0.1" 422 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 423 | 424 | concat-stream@^2.0.0: 425 | version "2.0.0" 426 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" 427 | dependencies: 428 | buffer-from "^1.0.0" 429 | inherits "^2.0.3" 430 | readable-stream "^3.0.2" 431 | typedarray "^0.0.6" 432 | 433 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 434 | version "1.1.0" 435 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 436 | 437 | conventional-changelog-angular@^5.0.3: 438 | version "5.0.3" 439 | resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" 440 | dependencies: 441 | compare-func "^1.3.1" 442 | q "^1.5.1" 443 | 444 | conventional-changelog-atom@^2.0.1: 445 | version "2.0.1" 446 | resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.1.tgz#dc88ce650ffa9ceace805cbe70f88bfd0cb2c13a" 447 | dependencies: 448 | q "^1.5.1" 449 | 450 | conventional-changelog-codemirror@^2.0.1: 451 | version "2.0.1" 452 | resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.1.tgz#acc046bc0971460939a0cc2d390e5eafc5eb30da" 453 | dependencies: 454 | q "^1.5.1" 455 | 456 | conventional-changelog-config-spec@1.0.0: 457 | version "1.0.0" 458 | resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-1.0.0.tgz#fc17bf0ab7b7f2a6b0c91bccc1bd55819d3ee79e" 459 | 460 | conventional-changelog-conventionalcommits@^3.0.2: 461 | version "3.0.2" 462 | resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-3.0.2.tgz#3a380a14ecd6f5056da6d460e30dd6c0c9f1aebe" 463 | dependencies: 464 | compare-func "^1.3.1" 465 | q "^1.5.1" 466 | 467 | conventional-changelog-core@^3.2.2: 468 | version "3.2.2" 469 | resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz#de41e6b4a71011a18bcee58e744f6f8f0e7c29c0" 470 | dependencies: 471 | conventional-changelog-writer "^4.0.5" 472 | conventional-commits-parser "^3.0.2" 473 | dateformat "^3.0.0" 474 | get-pkg-repo "^1.0.0" 475 | git-raw-commits "2.0.0" 476 | git-remote-origin-url "^2.0.0" 477 | git-semver-tags "^2.0.2" 478 | lodash "^4.2.1" 479 | normalize-package-data "^2.3.5" 480 | q "^1.5.1" 481 | read-pkg "^3.0.0" 482 | read-pkg-up "^3.0.0" 483 | through2 "^3.0.0" 484 | 485 | conventional-changelog-ember@^2.0.2: 486 | version "2.0.2" 487 | resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.2.tgz#284ffdea8c83ea8c210b65c5b4eb3e5cc0f4f51a" 488 | dependencies: 489 | q "^1.5.1" 490 | 491 | conventional-changelog-eslint@^3.0.2: 492 | version "3.0.2" 493 | resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.2.tgz#e9eb088cda6be3e58b2de6a5aac63df0277f3cbe" 494 | dependencies: 495 | q "^1.5.1" 496 | 497 | conventional-changelog-express@^2.0.1: 498 | version "2.0.1" 499 | resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.1.tgz#fea2231d99a5381b4e6badb0c1c40a41fcacb755" 500 | dependencies: 501 | q "^1.5.1" 502 | 503 | conventional-changelog-jquery@^3.0.4: 504 | version "3.0.4" 505 | resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.4.tgz#7eb598467b83db96742178e1e8d68598bffcd7ae" 506 | dependencies: 507 | q "^1.5.1" 508 | 509 | conventional-changelog-jshint@^2.0.1: 510 | version "2.0.1" 511 | resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.1.tgz#11c0e8283abf156a4ff78e89be6fdedf9bd72202" 512 | dependencies: 513 | compare-func "^1.3.1" 514 | q "^1.5.1" 515 | 516 | conventional-changelog-preset-loader@^2.1.1: 517 | version "2.1.1" 518 | resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz#65bb600547c56d5627d23135154bcd9a907668c4" 519 | 520 | conventional-changelog-writer@^4.0.5: 521 | version "4.0.6" 522 | resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz#24db578ac8e7c89a409ef9bba12cf3c095990148" 523 | dependencies: 524 | compare-func "^1.3.1" 525 | conventional-commits-filter "^2.0.2" 526 | dateformat "^3.0.0" 527 | handlebars "^4.1.0" 528 | json-stringify-safe "^5.0.1" 529 | lodash "^4.2.1" 530 | meow "^4.0.0" 531 | semver "^6.0.0" 532 | split "^1.0.0" 533 | through2 "^3.0.0" 534 | 535 | conventional-changelog@3.1.8: 536 | version "3.1.8" 537 | resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.8.tgz#091382b5a0820bf8ec8e75ad2664a3688c31b07d" 538 | dependencies: 539 | conventional-changelog-angular "^5.0.3" 540 | conventional-changelog-atom "^2.0.1" 541 | conventional-changelog-codemirror "^2.0.1" 542 | conventional-changelog-conventionalcommits "^3.0.2" 543 | conventional-changelog-core "^3.2.2" 544 | conventional-changelog-ember "^2.0.2" 545 | conventional-changelog-eslint "^3.0.2" 546 | conventional-changelog-express "^2.0.1" 547 | conventional-changelog-jquery "^3.0.4" 548 | conventional-changelog-jshint "^2.0.1" 549 | conventional-changelog-preset-loader "^2.1.1" 550 | 551 | conventional-commits-filter@^2.0.2: 552 | version "2.0.2" 553 | resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" 554 | dependencies: 555 | lodash.ismatch "^4.4.0" 556 | modify-values "^1.0.0" 557 | 558 | conventional-commits-parser@^3.0.2: 559 | version "3.0.3" 560 | resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" 561 | dependencies: 562 | JSONStream "^1.0.4" 563 | is-text-path "^2.0.0" 564 | lodash "^4.2.1" 565 | meow "^4.0.0" 566 | split2 "^2.0.0" 567 | through2 "^3.0.0" 568 | trim-off-newlines "^1.0.0" 569 | 570 | conventional-recommended-bump@5.0.0: 571 | version "5.0.0" 572 | resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.0.tgz#019d45a1f3d2cc14a26e9bad1992406ded5baa23" 573 | dependencies: 574 | concat-stream "^2.0.0" 575 | conventional-changelog-preset-loader "^2.1.1" 576 | conventional-commits-filter "^2.0.2" 577 | conventional-commits-parser "^3.0.2" 578 | git-raw-commits "2.0.0" 579 | git-semver-tags "^2.0.2" 580 | meow "^4.0.0" 581 | q "^1.5.1" 582 | 583 | convert-source-map@^1.5.0: 584 | version "1.5.0" 585 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 586 | 587 | core-js@^2.4.0, core-js@^2.5.0: 588 | version "2.5.1" 589 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" 590 | 591 | core-util-is@1.0.2, core-util-is@~1.0.0: 592 | version "1.0.2" 593 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 594 | 595 | cross-env@5.2.0: 596 | version "5.2.0" 597 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" 598 | dependencies: 599 | cross-spawn "^6.0.5" 600 | is-windows "^1.0.0" 601 | 602 | cross-spawn@^6.0.0, cross-spawn@^6.0.5: 603 | version "6.0.5" 604 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 605 | dependencies: 606 | nice-try "^1.0.4" 607 | path-key "^2.0.1" 608 | semver "^5.5.0" 609 | shebang-command "^1.2.0" 610 | which "^1.2.9" 611 | 612 | cryptiles@2.x.x: 613 | version "2.0.5" 614 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 615 | dependencies: 616 | boom "2.x.x" 617 | 618 | currently-unhandled@^0.4.1: 619 | version "0.4.1" 620 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 621 | dependencies: 622 | array-find-index "^1.0.1" 623 | 624 | dargs@^4.0.1: 625 | version "4.1.0" 626 | resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" 627 | dependencies: 628 | number-is-nan "^1.0.0" 629 | 630 | dashdash@^1.12.0: 631 | version "1.14.1" 632 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 633 | dependencies: 634 | assert-plus "^1.0.0" 635 | 636 | dateformat@^3.0.0: 637 | version "3.0.3" 638 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" 639 | 640 | debug@^2.2.0, debug@^2.6.8: 641 | version "2.6.9" 642 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 643 | dependencies: 644 | ms "2.0.0" 645 | 646 | decamelize-keys@^1.0.0: 647 | version "1.1.0" 648 | resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" 649 | dependencies: 650 | decamelize "^1.1.0" 651 | map-obj "^1.0.0" 652 | 653 | decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: 654 | version "1.2.0" 655 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 656 | 657 | deep-extend@~0.4.0: 658 | version "0.4.2" 659 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 660 | 661 | delayed-stream@~1.0.0: 662 | version "1.0.0" 663 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 664 | 665 | delegates@^1.0.0: 666 | version "1.0.0" 667 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 668 | 669 | detect-indent@6.0.0: 670 | version "6.0.0" 671 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" 672 | 673 | detect-indent@^4.0.0: 674 | version "4.0.0" 675 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 676 | dependencies: 677 | repeating "^2.0.0" 678 | 679 | detect-newline@3.0.0: 680 | version "3.0.0" 681 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.0.0.tgz#8ae477c089e51872c264531cd6547719c0b86b2f" 682 | 683 | dot-prop@^3.0.0: 684 | version "3.0.0" 685 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 686 | dependencies: 687 | is-obj "^1.0.0" 688 | 689 | dotgitignore@2.1.0: 690 | version "2.1.0" 691 | resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" 692 | dependencies: 693 | find-up "^3.0.0" 694 | minimatch "^3.0.4" 695 | 696 | ecc-jsbn@~0.1.1: 697 | version "0.1.1" 698 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 699 | dependencies: 700 | jsbn "~0.1.0" 701 | 702 | emoji-regex@^7.0.1: 703 | version "7.0.3" 704 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 705 | 706 | end-of-stream@^1.1.0: 707 | version "1.4.1" 708 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 709 | dependencies: 710 | once "^1.4.0" 711 | 712 | error-ex@^1.2.0: 713 | version "1.3.1" 714 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 715 | dependencies: 716 | is-arrayish "^0.2.1" 717 | 718 | error-ex@^1.3.1: 719 | version "1.3.2" 720 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 721 | dependencies: 722 | is-arrayish "^0.2.1" 723 | 724 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 725 | version "1.0.5" 726 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 727 | 728 | esutils@^2.0.2: 729 | version "2.0.2" 730 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 731 | 732 | execa@^1.0.0: 733 | version "1.0.0" 734 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 735 | dependencies: 736 | cross-spawn "^6.0.0" 737 | get-stream "^4.0.0" 738 | is-stream "^1.1.0" 739 | npm-run-path "^2.0.0" 740 | p-finally "^1.0.0" 741 | signal-exit "^3.0.0" 742 | strip-eof "^1.0.0" 743 | 744 | expand-brackets@^0.1.4: 745 | version "0.1.5" 746 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 747 | dependencies: 748 | is-posix-bracket "^0.1.0" 749 | 750 | expand-range@^1.8.1: 751 | version "1.8.2" 752 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 753 | dependencies: 754 | fill-range "^2.1.0" 755 | 756 | extend@~3.0.0: 757 | version "3.0.1" 758 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 759 | 760 | extglob@^0.3.1: 761 | version "0.3.2" 762 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 763 | dependencies: 764 | is-extglob "^1.0.0" 765 | 766 | extsprintf@1.3.0, extsprintf@^1.2.0: 767 | version "1.3.0" 768 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 769 | 770 | figures@3.0.0: 771 | version "3.0.0" 772 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9" 773 | dependencies: 774 | escape-string-regexp "^1.0.5" 775 | 776 | filename-regex@^2.0.0: 777 | version "2.0.1" 778 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 779 | 780 | fill-range@^2.1.0: 781 | version "2.2.3" 782 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 783 | dependencies: 784 | is-number "^2.1.0" 785 | isobject "^2.0.0" 786 | randomatic "^1.1.3" 787 | repeat-element "^1.1.2" 788 | repeat-string "^1.5.2" 789 | 790 | find-up@3.0.0, find-up@^3.0.0: 791 | version "3.0.0" 792 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 793 | dependencies: 794 | locate-path "^3.0.0" 795 | 796 | find-up@^1.0.0: 797 | version "1.1.2" 798 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 799 | dependencies: 800 | path-exists "^2.0.0" 801 | pinkie-promise "^2.0.0" 802 | 803 | find-up@^2.0.0: 804 | version "2.1.0" 805 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 806 | dependencies: 807 | locate-path "^2.0.0" 808 | 809 | for-in@^1.0.1: 810 | version "1.0.2" 811 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 812 | 813 | for-own@^0.1.4: 814 | version "0.1.5" 815 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 816 | dependencies: 817 | for-in "^1.0.1" 818 | 819 | forever-agent@~0.6.1: 820 | version "0.6.1" 821 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 822 | 823 | form-data@~2.1.1: 824 | version "2.1.4" 825 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 826 | dependencies: 827 | asynckit "^0.4.0" 828 | combined-stream "^1.0.5" 829 | mime-types "^2.1.12" 830 | 831 | fs-access@1.0.1: 832 | version "1.0.1" 833 | resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" 834 | dependencies: 835 | null-check "^1.0.0" 836 | 837 | fs-readdir-recursive@^1.0.0: 838 | version "1.0.0" 839 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" 840 | 841 | fs.realpath@^1.0.0: 842 | version "1.0.0" 843 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 844 | 845 | fsevents@^1.0.0: 846 | version "1.1.2" 847 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" 848 | dependencies: 849 | nan "^2.3.0" 850 | node-pre-gyp "^0.6.36" 851 | 852 | fstream-ignore@^1.0.5: 853 | version "1.0.5" 854 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 855 | dependencies: 856 | fstream "^1.0.0" 857 | inherits "2" 858 | minimatch "^3.0.0" 859 | 860 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 861 | version "1.0.11" 862 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 863 | dependencies: 864 | graceful-fs "^4.1.2" 865 | inherits "~2.0.0" 866 | mkdirp ">=0.5 0" 867 | rimraf "2" 868 | 869 | gauge@~2.7.3: 870 | version "2.7.4" 871 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 872 | dependencies: 873 | aproba "^1.0.3" 874 | console-control-strings "^1.0.0" 875 | has-unicode "^2.0.0" 876 | object-assign "^4.1.0" 877 | signal-exit "^3.0.0" 878 | string-width "^1.0.1" 879 | strip-ansi "^3.0.1" 880 | wide-align "^1.1.0" 881 | 882 | get-caller-file@^2.0.1: 883 | version "2.0.5" 884 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 885 | 886 | get-pkg-repo@^1.0.0: 887 | version "1.4.0" 888 | resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" 889 | dependencies: 890 | hosted-git-info "^2.1.4" 891 | meow "^3.3.0" 892 | normalize-package-data "^2.3.0" 893 | parse-github-repo-url "^1.3.0" 894 | through2 "^2.0.0" 895 | 896 | get-stdin@^4.0.1: 897 | version "4.0.1" 898 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 899 | 900 | get-stream@^4.0.0: 901 | version "4.1.0" 902 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 903 | dependencies: 904 | pump "^3.0.0" 905 | 906 | getpass@^0.1.1: 907 | version "0.1.7" 908 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 909 | dependencies: 910 | assert-plus "^1.0.0" 911 | 912 | git-raw-commits@2.0.0: 913 | version "2.0.0" 914 | resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" 915 | dependencies: 916 | dargs "^4.0.1" 917 | lodash.template "^4.0.2" 918 | meow "^4.0.0" 919 | split2 "^2.0.0" 920 | through2 "^2.0.0" 921 | 922 | git-remote-origin-url@^2.0.0: 923 | version "2.0.0" 924 | resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" 925 | dependencies: 926 | gitconfiglocal "^1.0.0" 927 | pify "^2.3.0" 928 | 929 | git-semver-tags@2.0.2, git-semver-tags@^2.0.2: 930 | version "2.0.2" 931 | resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.2.tgz#f506ec07caade191ac0c8d5a21bdb8131b4934e3" 932 | dependencies: 933 | meow "^4.0.0" 934 | semver "^5.5.0" 935 | 936 | gitconfiglocal@^1.0.0: 937 | version "1.0.0" 938 | resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" 939 | dependencies: 940 | ini "^1.3.2" 941 | 942 | glob-base@^0.3.0: 943 | version "0.3.0" 944 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 945 | dependencies: 946 | glob-parent "^2.0.0" 947 | is-glob "^2.0.0" 948 | 949 | glob-parent@^2.0.0: 950 | version "2.0.0" 951 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 952 | dependencies: 953 | is-glob "^2.0.0" 954 | 955 | glob@^7.0.5, glob@^7.1.2: 956 | version "7.1.2" 957 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 958 | dependencies: 959 | fs.realpath "^1.0.0" 960 | inflight "^1.0.4" 961 | inherits "2" 962 | minimatch "^3.0.4" 963 | once "^1.3.0" 964 | path-is-absolute "^1.0.0" 965 | 966 | globals@^9.18.0: 967 | version "9.18.0" 968 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 969 | 970 | graceful-fs@^4.1.2, graceful-fs@^4.1.4: 971 | version "4.1.11" 972 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 973 | 974 | handlebars@^4.1.0: 975 | version "4.1.2" 976 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" 977 | dependencies: 978 | neo-async "^2.6.0" 979 | optimist "^0.6.1" 980 | source-map "^0.6.1" 981 | optionalDependencies: 982 | uglify-js "^3.1.4" 983 | 984 | har-schema@^1.0.5: 985 | version "1.0.5" 986 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 987 | 988 | har-validator@~4.2.1: 989 | version "4.2.1" 990 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 991 | dependencies: 992 | ajv "^4.9.1" 993 | har-schema "^1.0.5" 994 | 995 | has-ansi@^2.0.0: 996 | version "2.0.0" 997 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 998 | dependencies: 999 | ansi-regex "^2.0.0" 1000 | 1001 | has-flag@^3.0.0: 1002 | version "3.0.0" 1003 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1004 | 1005 | has-unicode@^2.0.0: 1006 | version "2.0.1" 1007 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1008 | 1009 | hawk@3.1.3, hawk@~3.1.3: 1010 | version "3.1.3" 1011 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1012 | dependencies: 1013 | boom "2.x.x" 1014 | cryptiles "2.x.x" 1015 | hoek "2.x.x" 1016 | sntp "1.x.x" 1017 | 1018 | hoek@2.x.x: 1019 | version "2.16.3" 1020 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1021 | 1022 | home-or-tmp@^2.0.0: 1023 | version "2.0.0" 1024 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1025 | dependencies: 1026 | os-homedir "^1.0.0" 1027 | os-tmpdir "^1.0.1" 1028 | 1029 | hosted-git-info@^2.1.4: 1030 | version "2.5.0" 1031 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 1032 | 1033 | http-signature@~1.1.0: 1034 | version "1.1.1" 1035 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1036 | dependencies: 1037 | assert-plus "^0.2.0" 1038 | jsprim "^1.2.2" 1039 | sshpk "^1.7.0" 1040 | 1041 | indent-string@^2.1.0: 1042 | version "2.1.0" 1043 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1044 | dependencies: 1045 | repeating "^2.0.0" 1046 | 1047 | indent-string@^3.0.0: 1048 | version "3.2.0" 1049 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" 1050 | 1051 | inflight@^1.0.4: 1052 | version "1.0.6" 1053 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1054 | dependencies: 1055 | once "^1.3.0" 1056 | wrappy "1" 1057 | 1058 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: 1059 | version "2.0.3" 1060 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1061 | 1062 | ini@^1.3.2, ini@~1.3.0: 1063 | version "1.3.4" 1064 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 1065 | 1066 | invariant@^2.2.2: 1067 | version "2.2.2" 1068 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1069 | dependencies: 1070 | loose-envify "^1.0.0" 1071 | 1072 | invert-kv@^2.0.0: 1073 | version "2.0.0" 1074 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 1075 | 1076 | is-arrayish@^0.2.1: 1077 | version "0.2.1" 1078 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1079 | 1080 | is-binary-path@^1.0.0: 1081 | version "1.0.1" 1082 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1083 | dependencies: 1084 | binary-extensions "^1.0.0" 1085 | 1086 | is-buffer@^1.1.5: 1087 | version "1.1.6" 1088 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1089 | 1090 | is-builtin-module@^1.0.0: 1091 | version "1.0.0" 1092 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1093 | dependencies: 1094 | builtin-modules "^1.0.0" 1095 | 1096 | is-dotfile@^1.0.0: 1097 | version "1.0.3" 1098 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1099 | 1100 | is-equal-shallow@^0.1.3: 1101 | version "0.1.3" 1102 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1103 | dependencies: 1104 | is-primitive "^2.0.0" 1105 | 1106 | is-extendable@^0.1.1: 1107 | version "0.1.1" 1108 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1109 | 1110 | is-extglob@^1.0.0: 1111 | version "1.0.0" 1112 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1113 | 1114 | is-finite@^1.0.0: 1115 | version "1.0.2" 1116 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1117 | dependencies: 1118 | number-is-nan "^1.0.0" 1119 | 1120 | is-fullwidth-code-point@^1.0.0: 1121 | version "1.0.0" 1122 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1123 | dependencies: 1124 | number-is-nan "^1.0.0" 1125 | 1126 | is-fullwidth-code-point@^2.0.0: 1127 | version "2.0.0" 1128 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1129 | 1130 | is-glob@^2.0.0, is-glob@^2.0.1: 1131 | version "2.0.1" 1132 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1133 | dependencies: 1134 | is-extglob "^1.0.0" 1135 | 1136 | is-number@^2.1.0: 1137 | version "2.1.0" 1138 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1139 | dependencies: 1140 | kind-of "^3.0.2" 1141 | 1142 | is-number@^3.0.0: 1143 | version "3.0.0" 1144 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1145 | dependencies: 1146 | kind-of "^3.0.2" 1147 | 1148 | is-obj@^1.0.0: 1149 | version "1.0.1" 1150 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1151 | 1152 | is-plain-obj@^1.1.0: 1153 | version "1.1.0" 1154 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 1155 | 1156 | is-posix-bracket@^0.1.0: 1157 | version "0.1.1" 1158 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1159 | 1160 | is-primitive@^2.0.0: 1161 | version "2.0.0" 1162 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1163 | 1164 | is-stream@^1.1.0: 1165 | version "1.1.0" 1166 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1167 | 1168 | is-text-path@^2.0.0: 1169 | version "2.0.0" 1170 | resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" 1171 | dependencies: 1172 | text-extensions "^2.0.0" 1173 | 1174 | is-typedarray@~1.0.0: 1175 | version "1.0.0" 1176 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1177 | 1178 | is-utf8@^0.2.0: 1179 | version "0.2.1" 1180 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1181 | 1182 | is-windows@^1.0.0: 1183 | version "1.0.1" 1184 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" 1185 | 1186 | isarray@1.0.0, isarray@~1.0.0: 1187 | version "1.0.0" 1188 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1189 | 1190 | isexe@^2.0.0: 1191 | version "2.0.0" 1192 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1193 | 1194 | isobject@^2.0.0: 1195 | version "2.1.0" 1196 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1197 | dependencies: 1198 | isarray "1.0.0" 1199 | 1200 | isstream@~0.1.2: 1201 | version "0.1.2" 1202 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1203 | 1204 | js-tokens@^3.0.0, js-tokens@^3.0.2: 1205 | version "3.0.2" 1206 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1207 | 1208 | jsbn@~0.1.0: 1209 | version "0.1.1" 1210 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1211 | 1212 | jsesc@^1.3.0: 1213 | version "1.3.0" 1214 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1215 | 1216 | json-parse-better-errors@^1.0.1: 1217 | version "1.0.2" 1218 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1219 | 1220 | json-schema@0.2.3: 1221 | version "0.2.3" 1222 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1223 | 1224 | json-stable-stringify@^1.0.1: 1225 | version "1.0.1" 1226 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1227 | dependencies: 1228 | jsonify "~0.0.0" 1229 | 1230 | json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: 1231 | version "5.0.1" 1232 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1233 | 1234 | json5@^0.5.1: 1235 | version "0.5.1" 1236 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1237 | 1238 | jsonify@~0.0.0: 1239 | version "0.0.0" 1240 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1241 | 1242 | jsonparse@^1.2.0: 1243 | version "1.3.1" 1244 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1245 | 1246 | jsprim@^1.2.2: 1247 | version "1.4.1" 1248 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1249 | dependencies: 1250 | assert-plus "1.0.0" 1251 | extsprintf "1.3.0" 1252 | json-schema "0.2.3" 1253 | verror "1.10.0" 1254 | 1255 | kind-of@^3.0.2: 1256 | version "3.2.2" 1257 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1258 | dependencies: 1259 | is-buffer "^1.1.5" 1260 | 1261 | kind-of@^4.0.0: 1262 | version "4.0.0" 1263 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1264 | dependencies: 1265 | is-buffer "^1.1.5" 1266 | 1267 | lcid@^2.0.0: 1268 | version "2.0.0" 1269 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 1270 | dependencies: 1271 | invert-kv "^2.0.0" 1272 | 1273 | load-json-file@^1.0.0: 1274 | version "1.1.0" 1275 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1276 | dependencies: 1277 | graceful-fs "^4.1.2" 1278 | parse-json "^2.2.0" 1279 | pify "^2.0.0" 1280 | pinkie-promise "^2.0.0" 1281 | strip-bom "^2.0.0" 1282 | 1283 | load-json-file@^4.0.0: 1284 | version "4.0.0" 1285 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1286 | dependencies: 1287 | graceful-fs "^4.1.2" 1288 | parse-json "^4.0.0" 1289 | pify "^3.0.0" 1290 | strip-bom "^3.0.0" 1291 | 1292 | locate-path@^2.0.0: 1293 | version "2.0.0" 1294 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1295 | dependencies: 1296 | p-locate "^2.0.0" 1297 | path-exists "^3.0.0" 1298 | 1299 | locate-path@^3.0.0: 1300 | version "3.0.0" 1301 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1302 | dependencies: 1303 | p-locate "^3.0.0" 1304 | path-exists "^3.0.0" 1305 | 1306 | lodash._reinterpolate@~3.0.0: 1307 | version "3.0.0" 1308 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" 1309 | 1310 | lodash.ismatch@^4.4.0: 1311 | version "4.4.0" 1312 | resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" 1313 | 1314 | lodash.template@^4.0.2: 1315 | version "4.4.0" 1316 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" 1317 | dependencies: 1318 | lodash._reinterpolate "~3.0.0" 1319 | lodash.templatesettings "^4.0.0" 1320 | 1321 | lodash.templatesettings@^4.0.0: 1322 | version "4.1.0" 1323 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" 1324 | dependencies: 1325 | lodash._reinterpolate "~3.0.0" 1326 | 1327 | lodash@^4.17.4, lodash@^4.2.1: 1328 | version "4.17.4" 1329 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1330 | 1331 | loose-envify@^1.0.0: 1332 | version "1.3.1" 1333 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1334 | dependencies: 1335 | js-tokens "^3.0.0" 1336 | 1337 | loud-rejection@^1.0.0: 1338 | version "1.6.0" 1339 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1340 | dependencies: 1341 | currently-unhandled "^0.4.1" 1342 | signal-exit "^3.0.0" 1343 | 1344 | map-age-cleaner@^0.1.1: 1345 | version "0.1.3" 1346 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 1347 | dependencies: 1348 | p-defer "^1.0.0" 1349 | 1350 | map-obj@^1.0.0, map-obj@^1.0.1: 1351 | version "1.0.1" 1352 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1353 | 1354 | map-obj@^2.0.0: 1355 | version "2.0.0" 1356 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" 1357 | 1358 | mem@^4.0.0: 1359 | version "4.3.0" 1360 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 1361 | dependencies: 1362 | map-age-cleaner "^0.1.1" 1363 | mimic-fn "^2.0.0" 1364 | p-is-promise "^2.0.0" 1365 | 1366 | meow@^3.3.0: 1367 | version "3.7.0" 1368 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1369 | dependencies: 1370 | camelcase-keys "^2.0.0" 1371 | decamelize "^1.1.2" 1372 | loud-rejection "^1.0.0" 1373 | map-obj "^1.0.1" 1374 | minimist "^1.1.3" 1375 | normalize-package-data "^2.3.4" 1376 | object-assign "^4.0.1" 1377 | read-pkg-up "^1.0.1" 1378 | redent "^1.0.0" 1379 | trim-newlines "^1.0.0" 1380 | 1381 | meow@^4.0.0: 1382 | version "4.0.1" 1383 | resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" 1384 | dependencies: 1385 | camelcase-keys "^4.0.0" 1386 | decamelize-keys "^1.0.0" 1387 | loud-rejection "^1.0.0" 1388 | minimist "^1.1.3" 1389 | minimist-options "^3.0.1" 1390 | normalize-package-data "^2.3.4" 1391 | read-pkg-up "^3.0.0" 1392 | redent "^2.0.0" 1393 | trim-newlines "^2.0.0" 1394 | 1395 | micromatch@^2.1.5: 1396 | version "2.3.11" 1397 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1398 | dependencies: 1399 | arr-diff "^2.0.0" 1400 | array-unique "^0.2.1" 1401 | braces "^1.8.2" 1402 | expand-brackets "^0.1.4" 1403 | extglob "^0.3.1" 1404 | filename-regex "^2.0.0" 1405 | is-extglob "^1.0.0" 1406 | is-glob "^2.0.1" 1407 | kind-of "^3.0.2" 1408 | normalize-path "^2.0.1" 1409 | object.omit "^2.0.0" 1410 | parse-glob "^3.0.4" 1411 | regex-cache "^0.4.2" 1412 | 1413 | mime-db@~1.30.0: 1414 | version "1.30.0" 1415 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 1416 | 1417 | mime-types@^2.1.12, mime-types@~2.1.7: 1418 | version "2.1.17" 1419 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 1420 | dependencies: 1421 | mime-db "~1.30.0" 1422 | 1423 | mimic-fn@^2.0.0: 1424 | version "2.1.0" 1425 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1426 | 1427 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: 1428 | version "3.0.4" 1429 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1430 | dependencies: 1431 | brace-expansion "^1.1.7" 1432 | 1433 | minimist-options@^3.0.1: 1434 | version "3.0.2" 1435 | resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" 1436 | dependencies: 1437 | arrify "^1.0.1" 1438 | is-plain-obj "^1.1.0" 1439 | 1440 | minimist@0.0.8: 1441 | version "0.0.8" 1442 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1443 | 1444 | minimist@^1.1.3, minimist@^1.2.0: 1445 | version "1.2.0" 1446 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1447 | 1448 | minimist@~0.0.1: 1449 | version "0.0.10" 1450 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1451 | 1452 | "mkdirp@>=0.5 0", mkdirp@^0.5.1: 1453 | version "0.5.1" 1454 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1455 | dependencies: 1456 | minimist "0.0.8" 1457 | 1458 | modify-values@^1.0.0: 1459 | version "1.0.0" 1460 | resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" 1461 | 1462 | ms@2.0.0: 1463 | version "2.0.0" 1464 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1465 | 1466 | nan@^2.3.0: 1467 | version "2.7.0" 1468 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" 1469 | 1470 | neo-async@^2.6.0: 1471 | version "2.6.1" 1472 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 1473 | 1474 | nice-try@^1.0.4: 1475 | version "1.0.5" 1476 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1477 | 1478 | node-pre-gyp@^0.6.36: 1479 | version "0.6.38" 1480 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" 1481 | dependencies: 1482 | hawk "3.1.3" 1483 | mkdirp "^0.5.1" 1484 | nopt "^4.0.1" 1485 | npmlog "^4.0.2" 1486 | rc "^1.1.7" 1487 | request "2.81.0" 1488 | rimraf "^2.6.1" 1489 | semver "^5.3.0" 1490 | tar "^2.2.1" 1491 | tar-pack "^3.4.0" 1492 | 1493 | nopt@^4.0.1: 1494 | version "4.0.1" 1495 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1496 | dependencies: 1497 | abbrev "1" 1498 | osenv "^0.1.4" 1499 | 1500 | normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: 1501 | version "2.4.0" 1502 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 1503 | dependencies: 1504 | hosted-git-info "^2.1.4" 1505 | is-builtin-module "^1.0.0" 1506 | semver "2 || 3 || 4 || 5" 1507 | validate-npm-package-license "^3.0.1" 1508 | 1509 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1510 | version "2.1.1" 1511 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1512 | dependencies: 1513 | remove-trailing-separator "^1.0.1" 1514 | 1515 | npm-run-path@^2.0.0: 1516 | version "2.0.2" 1517 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1518 | dependencies: 1519 | path-key "^2.0.0" 1520 | 1521 | npmlog@^4.0.2: 1522 | version "4.1.2" 1523 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1524 | dependencies: 1525 | are-we-there-yet "~1.1.2" 1526 | console-control-strings "~1.1.0" 1527 | gauge "~2.7.3" 1528 | set-blocking "~2.0.0" 1529 | 1530 | null-check@^1.0.0: 1531 | version "1.0.0" 1532 | resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" 1533 | 1534 | number-is-nan@^1.0.0: 1535 | version "1.0.1" 1536 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1537 | 1538 | oauth-sign@~0.8.1: 1539 | version "0.8.2" 1540 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1541 | 1542 | object-assign@^4.0.1, object-assign@^4.1.0: 1543 | version "4.1.1" 1544 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1545 | 1546 | object.omit@^2.0.0: 1547 | version "2.0.1" 1548 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1549 | dependencies: 1550 | for-own "^0.1.4" 1551 | is-extendable "^0.1.1" 1552 | 1553 | once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: 1554 | version "1.4.0" 1555 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1556 | dependencies: 1557 | wrappy "1" 1558 | 1559 | optimist@^0.6.1: 1560 | version "0.6.1" 1561 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1562 | dependencies: 1563 | minimist "~0.0.1" 1564 | wordwrap "~0.0.2" 1565 | 1566 | os-homedir@^1.0.0: 1567 | version "1.0.2" 1568 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1569 | 1570 | os-locale@^3.1.0: 1571 | version "3.1.0" 1572 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 1573 | dependencies: 1574 | execa "^1.0.0" 1575 | lcid "^2.0.0" 1576 | mem "^4.0.0" 1577 | 1578 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 1579 | version "1.0.2" 1580 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1581 | 1582 | osenv@^0.1.4: 1583 | version "0.1.4" 1584 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1585 | dependencies: 1586 | os-homedir "^1.0.0" 1587 | os-tmpdir "^1.0.0" 1588 | 1589 | output-file-sync@^1.1.2: 1590 | version "1.1.2" 1591 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 1592 | dependencies: 1593 | graceful-fs "^4.1.4" 1594 | mkdirp "^0.5.1" 1595 | object-assign "^4.1.0" 1596 | 1597 | p-defer@^1.0.0: 1598 | version "1.0.0" 1599 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 1600 | 1601 | p-finally@^1.0.0: 1602 | version "1.0.0" 1603 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1604 | 1605 | p-is-promise@^2.0.0: 1606 | version "2.1.0" 1607 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 1608 | 1609 | p-limit@^1.1.0: 1610 | version "1.1.0" 1611 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" 1612 | 1613 | p-limit@^2.0.0: 1614 | version "2.2.0" 1615 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 1616 | dependencies: 1617 | p-try "^2.0.0" 1618 | 1619 | p-locate@^2.0.0: 1620 | version "2.0.0" 1621 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1622 | dependencies: 1623 | p-limit "^1.1.0" 1624 | 1625 | p-locate@^3.0.0: 1626 | version "3.0.0" 1627 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1628 | dependencies: 1629 | p-limit "^2.0.0" 1630 | 1631 | p-try@^2.0.0: 1632 | version "2.2.0" 1633 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1634 | 1635 | parse-github-repo-url@^1.3.0: 1636 | version "1.4.1" 1637 | resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" 1638 | 1639 | parse-glob@^3.0.4: 1640 | version "3.0.4" 1641 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1642 | dependencies: 1643 | glob-base "^0.3.0" 1644 | is-dotfile "^1.0.0" 1645 | is-extglob "^1.0.0" 1646 | is-glob "^2.0.0" 1647 | 1648 | parse-json@^2.2.0: 1649 | version "2.2.0" 1650 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1651 | dependencies: 1652 | error-ex "^1.2.0" 1653 | 1654 | parse-json@^4.0.0: 1655 | version "4.0.0" 1656 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1657 | dependencies: 1658 | error-ex "^1.3.1" 1659 | json-parse-better-errors "^1.0.1" 1660 | 1661 | path-exists@^2.0.0: 1662 | version "2.1.0" 1663 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1664 | dependencies: 1665 | pinkie-promise "^2.0.0" 1666 | 1667 | path-exists@^3.0.0: 1668 | version "3.0.0" 1669 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1670 | 1671 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 1672 | version "1.0.1" 1673 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1674 | 1675 | path-key@^2.0.0, path-key@^2.0.1: 1676 | version "2.0.1" 1677 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1678 | 1679 | path-type@^1.0.0: 1680 | version "1.1.0" 1681 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1682 | dependencies: 1683 | graceful-fs "^4.1.2" 1684 | pify "^2.0.0" 1685 | pinkie-promise "^2.0.0" 1686 | 1687 | path-type@^3.0.0: 1688 | version "3.0.0" 1689 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1690 | dependencies: 1691 | pify "^3.0.0" 1692 | 1693 | performance-now@^0.2.0: 1694 | version "0.2.0" 1695 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1696 | 1697 | pify@^2.0.0, pify@^2.3.0: 1698 | version "2.3.0" 1699 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1700 | 1701 | pify@^3.0.0: 1702 | version "3.0.0" 1703 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1704 | 1705 | pinkie-promise@^2.0.0: 1706 | version "2.0.1" 1707 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1708 | dependencies: 1709 | pinkie "^2.0.0" 1710 | 1711 | pinkie@^2.0.0: 1712 | version "2.0.4" 1713 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1714 | 1715 | preserve@^0.2.0: 1716 | version "0.2.0" 1717 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1718 | 1719 | private@^0.1.7: 1720 | version "0.1.8" 1721 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1722 | 1723 | process-nextick-args@~1.0.6: 1724 | version "1.0.7" 1725 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1726 | 1727 | pump@^3.0.0: 1728 | version "3.0.0" 1729 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1730 | dependencies: 1731 | end-of-stream "^1.1.0" 1732 | once "^1.3.1" 1733 | 1734 | punycode@^1.4.1: 1735 | version "1.4.1" 1736 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1737 | 1738 | q@^1.5.1: 1739 | version "1.5.1" 1740 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" 1741 | 1742 | qs@~6.4.0: 1743 | version "6.4.0" 1744 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1745 | 1746 | quick-lru@^1.0.0: 1747 | version "1.1.0" 1748 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" 1749 | 1750 | randomatic@^1.1.3: 1751 | version "1.1.7" 1752 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" 1753 | dependencies: 1754 | is-number "^3.0.0" 1755 | kind-of "^4.0.0" 1756 | 1757 | rc@^1.1.7: 1758 | version "1.2.2" 1759 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" 1760 | dependencies: 1761 | deep-extend "~0.4.0" 1762 | ini "~1.3.0" 1763 | minimist "^1.2.0" 1764 | strip-json-comments "~2.0.1" 1765 | 1766 | read-pkg-up@^1.0.1: 1767 | version "1.0.1" 1768 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 1769 | dependencies: 1770 | find-up "^1.0.0" 1771 | read-pkg "^1.0.0" 1772 | 1773 | read-pkg-up@^3.0.0: 1774 | version "3.0.0" 1775 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" 1776 | dependencies: 1777 | find-up "^2.0.0" 1778 | read-pkg "^3.0.0" 1779 | 1780 | read-pkg@^1.0.0: 1781 | version "1.1.0" 1782 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 1783 | dependencies: 1784 | load-json-file "^1.0.0" 1785 | normalize-package-data "^2.3.2" 1786 | path-type "^1.0.0" 1787 | 1788 | read-pkg@^3.0.0: 1789 | version "3.0.0" 1790 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 1791 | dependencies: 1792 | load-json-file "^4.0.0" 1793 | normalize-package-data "^2.3.2" 1794 | path-type "^3.0.0" 1795 | 1796 | "readable-stream@2 || 3", readable-stream@^3.0.2: 1797 | version "3.4.0" 1798 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" 1799 | dependencies: 1800 | inherits "^2.0.3" 1801 | string_decoder "^1.1.1" 1802 | util-deprecate "^1.0.1" 1803 | 1804 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5: 1805 | version "2.3.3" 1806 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 1807 | dependencies: 1808 | core-util-is "~1.0.0" 1809 | inherits "~2.0.3" 1810 | isarray "~1.0.0" 1811 | process-nextick-args "~1.0.6" 1812 | safe-buffer "~5.1.1" 1813 | string_decoder "~1.0.3" 1814 | util-deprecate "~1.0.1" 1815 | 1816 | readdirp@^2.0.0: 1817 | version "2.1.0" 1818 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1819 | dependencies: 1820 | graceful-fs "^4.1.2" 1821 | minimatch "^3.0.2" 1822 | readable-stream "^2.0.2" 1823 | set-immediate-shim "^1.0.1" 1824 | 1825 | redent@^1.0.0: 1826 | version "1.0.0" 1827 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 1828 | dependencies: 1829 | indent-string "^2.1.0" 1830 | strip-indent "^1.0.1" 1831 | 1832 | redent@^2.0.0: 1833 | version "2.0.0" 1834 | resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" 1835 | dependencies: 1836 | indent-string "^3.0.0" 1837 | strip-indent "^2.0.0" 1838 | 1839 | regenerator-runtime@^0.10.5: 1840 | version "0.10.5" 1841 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 1842 | 1843 | regenerator-runtime@^0.11.0: 1844 | version "0.11.0" 1845 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" 1846 | 1847 | regex-cache@^0.4.2: 1848 | version "0.4.4" 1849 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 1850 | dependencies: 1851 | is-equal-shallow "^0.1.3" 1852 | 1853 | remove-trailing-separator@^1.0.1: 1854 | version "1.1.0" 1855 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1856 | 1857 | repeat-element@^1.1.2: 1858 | version "1.1.2" 1859 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1860 | 1861 | repeat-string@^1.5.2: 1862 | version "1.6.1" 1863 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1864 | 1865 | repeating@^2.0.0: 1866 | version "2.0.1" 1867 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1868 | dependencies: 1869 | is-finite "^1.0.0" 1870 | 1871 | request@2.81.0: 1872 | version "2.81.0" 1873 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 1874 | dependencies: 1875 | aws-sign2 "~0.6.0" 1876 | aws4 "^1.2.1" 1877 | caseless "~0.12.0" 1878 | combined-stream "~1.0.5" 1879 | extend "~3.0.0" 1880 | forever-agent "~0.6.1" 1881 | form-data "~2.1.1" 1882 | har-validator "~4.2.1" 1883 | hawk "~3.1.3" 1884 | http-signature "~1.1.0" 1885 | is-typedarray "~1.0.0" 1886 | isstream "~0.1.2" 1887 | json-stringify-safe "~5.0.1" 1888 | mime-types "~2.1.7" 1889 | oauth-sign "~0.8.1" 1890 | performance-now "^0.2.0" 1891 | qs "~6.4.0" 1892 | safe-buffer "^5.0.1" 1893 | stringstream "~0.0.4" 1894 | tough-cookie "~2.3.0" 1895 | tunnel-agent "^0.6.0" 1896 | uuid "^3.0.0" 1897 | 1898 | require-directory@^2.1.1: 1899 | version "2.1.1" 1900 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1901 | 1902 | require-main-filename@^2.0.0: 1903 | version "2.0.0" 1904 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1905 | 1906 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: 1907 | version "2.6.2" 1908 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1909 | dependencies: 1910 | glob "^7.0.5" 1911 | 1912 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1913 | version "5.1.1" 1914 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 1915 | 1916 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 1917 | version "5.4.1" 1918 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 1919 | 1920 | semver@6.0.0: 1921 | version "6.0.0" 1922 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" 1923 | 1924 | semver@^5.5.0: 1925 | version "5.7.0" 1926 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1927 | 1928 | semver@^6.0.0: 1929 | version "6.2.0" 1930 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" 1931 | 1932 | set-blocking@^2.0.0, set-blocking@~2.0.0: 1933 | version "2.0.0" 1934 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1935 | 1936 | set-immediate-shim@^1.0.1: 1937 | version "1.0.1" 1938 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1939 | 1940 | shebang-command@^1.2.0: 1941 | version "1.2.0" 1942 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1943 | dependencies: 1944 | shebang-regex "^1.0.0" 1945 | 1946 | shebang-regex@^1.0.0: 1947 | version "1.0.0" 1948 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1949 | 1950 | signal-exit@^3.0.0: 1951 | version "3.0.2" 1952 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1953 | 1954 | slash@^1.0.0: 1955 | version "1.0.0" 1956 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 1957 | 1958 | sntp@1.x.x: 1959 | version "1.0.9" 1960 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1961 | dependencies: 1962 | hoek "2.x.x" 1963 | 1964 | source-map-support@^0.4.15: 1965 | version "0.4.18" 1966 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 1967 | dependencies: 1968 | source-map "^0.5.6" 1969 | 1970 | source-map@^0.5.6: 1971 | version "0.5.7" 1972 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1973 | 1974 | source-map@^0.6.1, source-map@~0.6.1: 1975 | version "0.6.1" 1976 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1977 | 1978 | spdx-correct@~1.0.0: 1979 | version "1.0.2" 1980 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 1981 | dependencies: 1982 | spdx-license-ids "^1.0.2" 1983 | 1984 | spdx-expression-parse@~1.0.0: 1985 | version "1.0.4" 1986 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 1987 | 1988 | spdx-license-ids@^1.0.2: 1989 | version "1.2.2" 1990 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 1991 | 1992 | split2@^2.0.0: 1993 | version "2.2.0" 1994 | resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" 1995 | dependencies: 1996 | through2 "^2.0.2" 1997 | 1998 | split@^1.0.0: 1999 | version "1.0.1" 2000 | resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" 2001 | dependencies: 2002 | through "2" 2003 | 2004 | sshpk@^1.7.0: 2005 | version "1.13.1" 2006 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 2007 | dependencies: 2008 | asn1 "~0.2.3" 2009 | assert-plus "^1.0.0" 2010 | dashdash "^1.12.0" 2011 | getpass "^0.1.1" 2012 | optionalDependencies: 2013 | bcrypt-pbkdf "^1.0.0" 2014 | ecc-jsbn "~0.1.1" 2015 | jsbn "~0.1.0" 2016 | tweetnacl "~0.14.0" 2017 | 2018 | standard-version@6.0.1: 2019 | version "6.0.1" 2020 | resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-6.0.1.tgz#ad50e9770b73090d2f8f692e520d906813a3cefe" 2021 | dependencies: 2022 | chalk "2.4.2" 2023 | conventional-changelog "3.1.8" 2024 | conventional-changelog-config-spec "1.0.0" 2025 | conventional-recommended-bump "5.0.0" 2026 | detect-indent "6.0.0" 2027 | detect-newline "3.0.0" 2028 | dotgitignore "2.1.0" 2029 | figures "3.0.0" 2030 | find-up "3.0.0" 2031 | fs-access "1.0.1" 2032 | git-semver-tags "2.0.2" 2033 | semver "6.0.0" 2034 | stringify-package "1.0.0" 2035 | yargs "13.2.2" 2036 | 2037 | string-width@^1.0.1, string-width@^1.0.2: 2038 | version "1.0.2" 2039 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2040 | dependencies: 2041 | code-point-at "^1.0.0" 2042 | is-fullwidth-code-point "^1.0.0" 2043 | strip-ansi "^3.0.0" 2044 | 2045 | string-width@^2.1.1: 2046 | version "2.1.1" 2047 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2048 | dependencies: 2049 | is-fullwidth-code-point "^2.0.0" 2050 | strip-ansi "^4.0.0" 2051 | 2052 | string-width@^3.0.0: 2053 | version "3.1.0" 2054 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2055 | dependencies: 2056 | emoji-regex "^7.0.1" 2057 | is-fullwidth-code-point "^2.0.0" 2058 | strip-ansi "^5.1.0" 2059 | 2060 | string_decoder@^1.1.1: 2061 | version "1.2.0" 2062 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" 2063 | dependencies: 2064 | safe-buffer "~5.1.0" 2065 | 2066 | string_decoder@~1.0.3: 2067 | version "1.0.3" 2068 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 2069 | dependencies: 2070 | safe-buffer "~5.1.0" 2071 | 2072 | stringify-package@1.0.0: 2073 | version "1.0.0" 2074 | resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz#e02828089333d7d45cd8c287c30aa9a13375081b" 2075 | 2076 | stringstream@~0.0.4: 2077 | version "0.0.5" 2078 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2079 | 2080 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2081 | version "3.0.1" 2082 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2083 | dependencies: 2084 | ansi-regex "^2.0.0" 2085 | 2086 | strip-ansi@^4.0.0: 2087 | version "4.0.0" 2088 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2089 | dependencies: 2090 | ansi-regex "^3.0.0" 2091 | 2092 | strip-ansi@^5.1.0: 2093 | version "5.2.0" 2094 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2095 | dependencies: 2096 | ansi-regex "^4.1.0" 2097 | 2098 | strip-bom@^2.0.0: 2099 | version "2.0.0" 2100 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 2101 | dependencies: 2102 | is-utf8 "^0.2.0" 2103 | 2104 | strip-bom@^3.0.0: 2105 | version "3.0.0" 2106 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2107 | 2108 | strip-eof@^1.0.0: 2109 | version "1.0.0" 2110 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2111 | 2112 | strip-indent@^1.0.1: 2113 | version "1.0.1" 2114 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 2115 | dependencies: 2116 | get-stdin "^4.0.1" 2117 | 2118 | strip-indent@^2.0.0: 2119 | version "2.0.0" 2120 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 2121 | 2122 | strip-json-comments@~2.0.1: 2123 | version "2.0.1" 2124 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2125 | 2126 | supports-color@^2.0.0: 2127 | version "2.0.0" 2128 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2129 | 2130 | supports-color@^5.3.0: 2131 | version "5.5.0" 2132 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2133 | dependencies: 2134 | has-flag "^3.0.0" 2135 | 2136 | tar-pack@^3.4.0: 2137 | version "3.4.1" 2138 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" 2139 | dependencies: 2140 | debug "^2.2.0" 2141 | fstream "^1.0.10" 2142 | fstream-ignore "^1.0.5" 2143 | once "^1.3.3" 2144 | readable-stream "^2.1.4" 2145 | rimraf "^2.5.1" 2146 | tar "^2.2.1" 2147 | uid-number "^0.0.6" 2148 | 2149 | tar@^2.2.1: 2150 | version "2.2.1" 2151 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 2152 | dependencies: 2153 | block-stream "*" 2154 | fstream "^1.0.2" 2155 | inherits "2" 2156 | 2157 | text-extensions@^2.0.0: 2158 | version "2.0.0" 2159 | resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" 2160 | 2161 | through2@^2.0.0, through2@^2.0.2: 2162 | version "2.0.3" 2163 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 2164 | dependencies: 2165 | readable-stream "^2.1.5" 2166 | xtend "~4.0.1" 2167 | 2168 | through2@^3.0.0: 2169 | version "3.0.1" 2170 | resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" 2171 | dependencies: 2172 | readable-stream "2 || 3" 2173 | 2174 | through@2, "through@>=2.2.7 <3": 2175 | version "2.3.8" 2176 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2177 | 2178 | to-fast-properties@^1.0.3: 2179 | version "1.0.3" 2180 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 2181 | 2182 | tough-cookie@~2.3.0: 2183 | version "2.3.3" 2184 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 2185 | dependencies: 2186 | punycode "^1.4.1" 2187 | 2188 | trim-newlines@^1.0.0: 2189 | version "1.0.0" 2190 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 2191 | 2192 | trim-newlines@^2.0.0: 2193 | version "2.0.0" 2194 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" 2195 | 2196 | trim-off-newlines@^1.0.0: 2197 | version "1.0.1" 2198 | resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" 2199 | 2200 | trim-right@^1.0.1: 2201 | version "1.0.1" 2202 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2203 | 2204 | tunnel-agent@^0.6.0: 2205 | version "0.6.0" 2206 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2207 | dependencies: 2208 | safe-buffer "^5.0.1" 2209 | 2210 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2211 | version "0.14.5" 2212 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2213 | 2214 | typedarray@^0.0.6: 2215 | version "0.0.6" 2216 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2217 | 2218 | uglify-js@^3.1.4: 2219 | version "3.6.0" 2220 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" 2221 | dependencies: 2222 | commander "~2.20.0" 2223 | source-map "~0.6.1" 2224 | 2225 | uid-number@^0.0.6: 2226 | version "0.0.6" 2227 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2228 | 2229 | user-home@^1.1.1: 2230 | version "1.1.1" 2231 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 2232 | 2233 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 2234 | version "1.0.2" 2235 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2236 | 2237 | uuid@^3.0.0: 2238 | version "3.1.0" 2239 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 2240 | 2241 | v8flags@^2.1.1: 2242 | version "2.1.1" 2243 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 2244 | dependencies: 2245 | user-home "^1.1.1" 2246 | 2247 | validate-npm-package-license@^3.0.1: 2248 | version "3.0.1" 2249 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 2250 | dependencies: 2251 | spdx-correct "~1.0.0" 2252 | spdx-expression-parse "~1.0.0" 2253 | 2254 | verror@1.10.0: 2255 | version "1.10.0" 2256 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2257 | dependencies: 2258 | assert-plus "^1.0.0" 2259 | core-util-is "1.0.2" 2260 | extsprintf "^1.2.0" 2261 | 2262 | which-module@^2.0.0: 2263 | version "2.0.0" 2264 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2265 | 2266 | which@^1.2.9: 2267 | version "1.3.0" 2268 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 2269 | dependencies: 2270 | isexe "^2.0.0" 2271 | 2272 | wide-align@^1.1.0: 2273 | version "1.1.2" 2274 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2275 | dependencies: 2276 | string-width "^1.0.2" 2277 | 2278 | wordwrap@~0.0.2: 2279 | version "0.0.3" 2280 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2281 | 2282 | wrap-ansi@^2.0.0: 2283 | version "2.1.0" 2284 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2285 | dependencies: 2286 | string-width "^1.0.1" 2287 | strip-ansi "^3.0.1" 2288 | 2289 | wrappy@1: 2290 | version "1.0.2" 2291 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2292 | 2293 | xtend@~4.0.1: 2294 | version "4.0.1" 2295 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2296 | 2297 | y18n@^4.0.0: 2298 | version "4.0.0" 2299 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2300 | 2301 | yargs-parser@^13.0.0: 2302 | version "13.1.1" 2303 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 2304 | dependencies: 2305 | camelcase "^5.0.0" 2306 | decamelize "^1.2.0" 2307 | 2308 | yargs@13.2.2: 2309 | version "13.2.2" 2310 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" 2311 | dependencies: 2312 | cliui "^4.0.0" 2313 | find-up "^3.0.0" 2314 | get-caller-file "^2.0.1" 2315 | os-locale "^3.1.0" 2316 | require-directory "^2.1.1" 2317 | require-main-filename "^2.0.0" 2318 | set-blocking "^2.0.0" 2319 | string-width "^3.0.0" 2320 | which-module "^2.0.0" 2321 | y18n "^4.0.0" 2322 | yargs-parser "^13.0.0" 2323 | --------------------------------------------------------------------------------