├── prettier.config.js ├── tsconfig.release.json ├── .gitignore ├── tslint.json ├── .circleci └── config.yml ├── tsconfig.json ├── package.json ├── src └── index.ts ├── README.md ├── LICENSE ├── test └── rbac.spec.ts └── yarn.lock /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | singleQuote: true 4 | }; -------------------------------------------------------------------------------- /tsconfig.release.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "compilerOptions": { 4 | "rootDir": "src", 5 | "outDir": "lib" 6 | }, 7 | "include": ["src/**/*.ts"], 8 | "exclude": ["test/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Node ### 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | 9 | # Coverage directory used by tools like istanbul 10 | coverage 11 | 12 | # nyc test coverage 13 | .nyc_output 14 | 15 | # Dependency directories 16 | node_modules/ 17 | 18 | lib 19 | 20 | ### macOS ### 21 | # General 22 | .DS_Store 23 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": ["node_modules", "lib"], 3 | "extends": ["tslint:latest"], 4 | "rules": { 5 | "ordered-imports": [ 6 | true, 7 | { 8 | "import-sources-order": "any", 9 | "named-imports-order": "any" 10 | } 11 | ], 12 | "semicolon": [true, "always", "strict-bound-class-methods"], 13 | "quotemark": [true, "single"], 14 | "no-implicit-dependencies": [true, "dev"], 15 | "no-submodule-imports": false, 16 | "object-literal-sort-keys": false, 17 | "trailing-comma": [ 18 | true, 19 | { 20 | "multiline": { 21 | "objects": "always", 22 | "arrays": "always", 23 | "functions": "always", 24 | "typeLiterals": "always" 25 | }, 26 | "esSpecCompliant": true 27 | } 28 | ], 29 | "arrow-parens": [true, "ban-single-arg-parens"] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | # specify the version you desire here 6 | - image: circleci/node:8 7 | 8 | working_directory: ~/repo 9 | 10 | steps: 11 | - checkout 12 | 13 | # Download and cache dependencies 14 | - restore_cache: 15 | keys: 16 | - v1-dependencies-{{ checksum "package.json" }} 17 | # fallback to using the latest cache if no exact match is found 18 | - v1-dependencies- 19 | 20 | - run: yarn install 21 | 22 | - save_cache: 23 | paths: 24 | - node_modules 25 | key: v1-dependencies-{{ checksum "package.json" }} 26 | 27 | # run tests 28 | - run: 29 | name: test 30 | command: yarn test 31 | 32 | - run: 33 | name: build 34 | command: yarn build 35 | 36 | 37 | workflows: 38 | version: 2 39 | build: 40 | jobs: 41 | - build -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 4 | "lib": ["es6", "dom", "esnext.asynciterable"], /* Specify library files to be included in the compilation. */ 5 | "declaration": true, /* Generates corresponding '.d.ts' file. */ 6 | "sourceMap": true, /* Generates corresponding '.map' file. */ 7 | "removeComments": true, /* Do not emit comments to output. */ 8 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 9 | "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 10 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 11 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 12 | }, 13 | "include": ["src/**/*.ts", "docs/**/*.ts", "test/*"], 14 | "exclude": ["./node_modules"] 15 | } 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql-rbac", 3 | "version": "1.0.1", 4 | "description": "GraphQL RBAC middleware", 5 | "main": "lib/index.js", 6 | "module": "./lib/index.js", 7 | "jsnext:main": "./lib/index.js", 8 | "typings": "./lib/index.d.ts", 9 | "files": [ 10 | "lib" 11 | ], 12 | "scripts": { 13 | "clean": "rimraf lib", 14 | "lint": "tslint --force --format verbose \"src/**/*.ts\" \"test/*\"", 15 | "build": "npm run clean && npm run lint && echo Using TypeScript && tsc --version && tsc -p ./tsconfig.release.json --pretty", 16 | "test": "mocha --timeout 100000 --compilers ts:ts-node/register --recursive \"test/**/*.spec.ts\"", 17 | "coverage": "nyc npm run test", 18 | "prepublishOnly": "npm run build" 19 | }, 20 | "keywords": [ 21 | "rbac", 22 | "graphql" 23 | ], 24 | "author": "", 25 | "license": "Apache-2.0", 26 | "devDependencies": { 27 | "@types/chai": "^4.1.7", 28 | "@types/graphql": "^14.0.3", 29 | "@types/mocha": "^5.2.5", 30 | "@types/node": "^10.12.9", 31 | "chai": "^4.2.0", 32 | "graphql": "^14.0.2", 33 | "graphql-middleware": "^2.0.2", 34 | "graphql-tools": "^4.0.3", 35 | "mocha": "^5.2.0", 36 | "nyc": "^13.1.0", 37 | "ts-node": "^7.0.1", 38 | "tslint": "^5.11.0", 39 | "typescript": "^3.1.6" 40 | }, 41 | "dependencies": { 42 | "graphql-shield": "^4.1.0", 43 | "lodash": "^4.17.11" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { reduce } from 'lodash'; 2 | import { IMiddlewareGenerator } from 'graphql-middleware'; 3 | import { IRule, or, rule, shield } from 'graphql-shield'; 4 | 5 | type IGetUserFunc = (ctx?: any) => IUser | Promise; 6 | 7 | interface IRBACArgs { 8 | roles: string[]; 9 | schema: ISchema; 10 | getUser: IGetUserFunc; 11 | } 12 | 13 | interface IRBAC { 14 | middleware(): IMiddlewareGenerator; 15 | context(): IContext; 16 | } 17 | 18 | type TSource = any; 19 | type TContext = any; 20 | type TArgs = any; 21 | 22 | interface ISchema { 23 | [key: string]: string[] | Record; 24 | } 25 | 26 | interface IContext { 27 | user: IGetUserFunc; 28 | } 29 | 30 | interface IUser { 31 | role: string; 32 | } 33 | 34 | export class RBAC implements IRBAC { 35 | private roles: string[]; 36 | private schema: ISchema; 37 | private getUser: IGetUserFunc; 38 | 39 | constructor({ 40 | roles, 41 | schema, 42 | getUser, 43 | }: IRBACArgs) { 44 | this.roles = roles; 45 | this.schema = schema; 46 | this.getUser = getUser; 47 | } 48 | 49 | public middleware(): IMiddlewareGenerator { 50 | // roleRuleMap 51 | // { 52 | // [role: string]: IRule 53 | // } 54 | const roleRuleMap: Record = reduce( 55 | this.roles, 56 | (result, role) => { 57 | result[role] = rule()(async (parent, args, ctx, info) => { 58 | return ctx.user.role === role; 59 | }); 60 | return result; 61 | }, 62 | {}, 63 | ); 64 | 65 | // shieldPermissions 66 | // { 67 | // Query: Record, 68 | // Mutation: Record, 69 | // [key: string]: LogicRule | Record, 70 | // } 71 | const shieldPermissions = {}; 72 | 73 | for (const queryType of Object.keys(this.schema)) { 74 | if (Array.isArray(this.schema[queryType])) { 75 | const ruleFuncs: IRule[] = (this.schema[queryType] as string[]) 76 | .map(role => roleRuleMap[role]); 77 | shieldPermissions[queryType] = or(...ruleFuncs); 78 | } else { 79 | shieldPermissions[queryType] = {}; 80 | for (const fieldName of Object.keys(this.schema[queryType])) { 81 | const ruleFuncs: IRule[] = this.schema[queryType][fieldName] 82 | .map(role => roleRuleMap[role]); 83 | shieldPermissions[queryType][fieldName] = or(...ruleFuncs); 84 | } 85 | } 86 | } 87 | 88 | return shield(shieldPermissions); 89 | } 90 | 91 | public context(): IContext { 92 | return { 93 | user: this.getUser, 94 | }; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GraphQL Role-based access control (RBAC) middleware 2 | 3 | [![CircleCI](https://circleci.com/gh/Canner/graphql-rbac/tree/master.svg?style=shield)](https://circleci.com/gh/Canner/graphql-rbac/tree/master) 4 | [![npm version](https://badge.fury.io/js/graphql-rbac.svg)](https://badge.fury.io/js/graphql-rbac) 5 | 6 | 7 | graphql-rbac provides you a simple way to use Role-based access control in GraphQL. This package integrates with [graphql-shield](https://github.com/maticzav/graphql-shield) which helps you create a permission layer for your application. Using a schema with array of role, graphql-rbac can help you generate rule functions in graphql-shield. So you can easily use RBAC in your application by providing a schema. 8 | 9 | ## Why graphql-rbac? 10 | 11 | * Easy to specify rule permissions for each field in GraphQL. 12 | * Don't need to write rule function by yourself. 13 | 14 | ## Installation 15 | 16 | ```bash 17 | yarn add graphql-rbac 18 | ``` 19 | 20 | ## How to use 21 | 22 | ```js 23 | import { RBAC } from 'graphql-rbac' 24 | 25 | const roles = ['ADMIN', 'DEVELOPER'] 26 | 27 | const schema = { 28 | Query: { 29 | users: ['ADMIN', 'DEVELOPER'] 30 | }, 31 | Mutation: { 32 | createUser: ['ADMIN', 'DEVELOPER'], 33 | updateUser: ['ADMIN', 'DEVELOPER'], 34 | deleteUser: ['ADMIN'] 35 | }, 36 | User: { 37 | password: ['ADMIN'] 38 | } 39 | } 40 | 41 | const typeDefs = ` 42 | type Query { 43 | users: [User!]! 44 | } 45 | 46 | type Mutation { 47 | createUser: User! 48 | updateUser: User! 49 | deleteUser: User 50 | } 51 | 52 | type User { 53 | username: String! 54 | password: String! 55 | } 56 | ` 57 | 58 | const resolvers = { 59 | Query: { 60 | users: () => [ 61 | { username: 'Tom', password: '****' }, 62 | { username: 'John', password: '****' }, 63 | ] 64 | }, 65 | Mutation: { 66 | createUser: () => { username: 'Tom', password: '****' }, 67 | updateUser: () => { username: 'John', password: '****' }, 68 | deleteUser: () => null 69 | } 70 | } 71 | 72 | const users = { 73 | admin: { role: 'ADMIN' }, 74 | developer: { role: 'DEVELOPER' } 75 | } 76 | 77 | const getUser = async (req) => { 78 | const auth = req.request.headers.authorization 79 | let user = {} 80 | if (users[auth]) { 81 | user = users[auth] 82 | } 83 | 84 | return user 85 | } 86 | 87 | const rbac = new RBAC({roles, schema, getUser}) 88 | 89 | const server = new GraphQLServer({ 90 | typeDefs, 91 | resolvers, 92 | middlewares: [rbac.middleware()], 93 | context: req => ({ 94 | user: rbac.context(req) 95 | }), 96 | }) 97 | ``` 98 | 99 | ## Run test 100 | 101 | ``` 102 | npm run test 103 | ``` 104 | 105 | ## License 106 | 107 | Apache-2.0 108 | 109 | ![footer banner](https://user-images.githubusercontent.com/26116324/37811196-a437d930-2e93-11e8-97d8-0653ace2a46d.png) 110 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text 120 | 121 | from the Work, provided 122 | that such additional attribution notices cannot be construed 123 | as modifying the License. 124 | 125 | You may add Your own copyright statement to Your modifications and 126 | may provide additional or different license terms and conditions 127 | for use, reproduction, or distribution of Your modifications, or 128 | for any such Derivative Works as a whole, provided Your use, 129 | reproduction, and distribution of the Work otherwise complies with 130 | the conditions stated in this License. 131 | 132 | 5. Submission of Contributions. Unless You explicitly state otherwise, 133 | any Contribution intentionally submitted for inclusion in the Work 134 | by You to the Licensor shall be under the terms and conditions of 135 | this License, without any additional terms or conditions. 136 | Notwithstanding the above, nothing herein shall supersede or modify 137 | the terms of any separate license agreement you may have executed 138 | with Licensor regarding such Contributions. 139 | 140 | 6. Trademarks. This License does not grant permission to use the trade 141 | names, trademarks, service marks, or product names of the Licensor, 142 | except as required for reasonable and customary use in describing the 143 | origin of the Work and reproducing the content of the NOTICE file. 144 | 145 | 7. Disclaimer of Warranty. Unless required by applicable law or 146 | agreed to in writing, Licensor provides the Work (and each 147 | Contributor provides its Contributions) on an "AS IS" BASIS, 148 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 149 | implied, including, without limitation, any warranties or conditions 150 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 151 | PARTICULAR PURPOSE. You are solely responsible for determining the 152 | appropriateness of using or redistributing the Work and assume any 153 | risks associated with Your exercise of permissions under this License. 154 | 155 | 8. Limitation of Liability. In no event and under no legal theory, 156 | whether in tort (including negligence), contract, or otherwise, 157 | unless required by applicable law (such as deliberate and grossly 158 | negligent acts) or agreed to in writing, shall any Contributor be 159 | liable to You for damages, including any direct, indirect, special, 160 | incidental, or consequential damages of any character arising as a 161 | result of this License or out of the use or inability to use the 162 | Work (including but not limited to damages for loss of goodwill, 163 | work stoppage, computer failure or malfunction, or any and all 164 | other commercial damages or losses), even if such Contributor 165 | has been advised of the possibility of such damages. 166 | 167 | 9. Accepting Warranty or Additional Liability. While redistributing 168 | the Work or Derivative Works thereof, You may choose to offer, 169 | and charge a fee for, acceptance of support, warranty, indemnity, 170 | or other liability obligations and/or rights consistent with this 171 | License. However, in accepting such obligations, You may act only 172 | on Your own behalf and on Your sole responsibility, not on behalf 173 | of any other Contributor, and only if You agree to indemnify, 174 | defend, and hold each Contributor harmless for any liability 175 | incurred by, or claims asserted against, such Contributor by reason 176 | of your accepting any such warranty or additional liability. 177 | 178 | END OF TERMS AND CONDITIONS 179 | 180 | APPENDIX: How to apply the Apache License to your work. 181 | 182 | To apply the Apache License to your work, attach the following 183 | boilerplate notice, with the fields enclosed by brackets "{}" 184 | replaced with your own identifying information. (Don't include 185 | the brackets!) The text should be enclosed in the appropriate 186 | comment syntax for the file format. We also recommend that a 187 | file or class name and description of purpose be included on the 188 | same "printed page" as the copyright notice for easier 189 | identification within third-party archives. 190 | 191 | Copyright 2018 Canner Inc. 192 | 193 | Licensed under the Apache License, Version 2.0 (the "License"); 194 | you may not use this file except in compliance with the License. 195 | You may obtain a copy of the License at 196 | 197 | http://www.apache.org/licenses/LICENSE-2.0 198 | 199 | Unless required by applicable law or agreed to in writing, software 200 | distributed under the License is distributed on an "AS IS" BASIS, 201 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 202 | See the License for the specific language governing permissions and 203 | limitations under the License. 204 | -------------------------------------------------------------------------------- /test/rbac.spec.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable:no-unused-expression */ 2 | import * as chai from 'chai'; 3 | import { graphql } from 'graphql'; 4 | import { applyMiddleware } from 'graphql-middleware'; 5 | import { makeExecutableSchema } from 'graphql-tools'; 6 | import { RBAC } from '../src/index'; 7 | 8 | const expect = chai.expect; 9 | 10 | describe('GraphQL RBAC Query', () => { 11 | it('access fieldName by ADMIN', async () => { 12 | const typeDefs = ` 13 | type Query { 14 | test: String! 15 | } 16 | `; 17 | const resolvers = { 18 | Query: { 19 | test: () => 'pass', 20 | }, 21 | }; 22 | const schema = makeExecutableSchema({ 23 | typeDefs, 24 | resolvers, 25 | }); 26 | 27 | const roles = ['ADMIN', 'DEVELOPER']; 28 | const roleSchema = { 29 | Query: { 30 | test: ['ADMIN'], 31 | }, 32 | }; 33 | const getUser = () => ({ role: 'ADMIN' }); 34 | 35 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 36 | 37 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 38 | // Execution 39 | const query = ` 40 | query { 41 | test 42 | } 43 | `; 44 | const res = await graphql(schemaWithPermissions, query, {}, { user: { role: 'ADMIN' } }); 45 | 46 | expect(res.data).to.be.eql({ 47 | test: 'pass', 48 | }); 49 | }); 50 | 51 | it('access fieldName by multiple role', async () => { 52 | const typeDefs = ` 53 | type Query { 54 | test: String! 55 | } 56 | `; 57 | const resolvers = { 58 | Query: { 59 | test: () => 'pass', 60 | }, 61 | }; 62 | const schema = makeExecutableSchema({ 63 | typeDefs, 64 | resolvers, 65 | }); 66 | 67 | const roles = ['ADMIN', 'DEVELOPER']; 68 | const roleSchema = { 69 | Query: { 70 | test: ['ADMIN', 'DEVELOPER'], 71 | }, 72 | }; 73 | const getUser = () => ({ role: 'ADMIN' }); 74 | 75 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 76 | 77 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 78 | // Execution 79 | const query = ` 80 | query { 81 | test 82 | } 83 | `; 84 | const adminRes = await graphql(schemaWithPermissions, query, {}, { user: { role: 'ADMIN' } }); 85 | const developerRes = await graphql(schemaWithPermissions, query, {}, { user: { role: 'DEVELOPER' } }); 86 | 87 | expect(adminRes.data).to.be.eql({ 88 | test: 'pass', 89 | }); 90 | expect(developerRes.data).to.be.eql({ 91 | test: 'pass', 92 | }); 93 | }); 94 | 95 | it('deny fieldName for DEVELOPER', async () => { 96 | const typeDefs = ` 97 | type Query { 98 | test: String! 99 | } 100 | `; 101 | const resolvers = { 102 | Query: { 103 | test: () => 'deny', 104 | }, 105 | }; 106 | const schema = makeExecutableSchema({ 107 | typeDefs, 108 | resolvers, 109 | }); 110 | 111 | const roles = ['ADMIN', 'DEVELOPER']; 112 | const roleSchema = { 113 | Query: { 114 | test: ['ADMIN'], 115 | }, 116 | }; 117 | const getUser = () => ({ role: 'ADMIN' }); 118 | 119 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 120 | 121 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 122 | // Execution 123 | const query = ` 124 | query { 125 | test 126 | } 127 | `; 128 | const res = await graphql(schemaWithPermissions, query, {}, { user: { role: 'DEVELOPER' } }); 129 | 130 | expect(res.data).to.be.null; 131 | expect(res.errors).to.not.be.null; 132 | }); 133 | }); 134 | 135 | describe('GraphQL RBAC Mutation', () => { 136 | it('access fieldName by ADMIN', async () => { 137 | const typeDefs = ` 138 | type Query { 139 | test: String! 140 | } 141 | 142 | type Mutation { 143 | test: String! 144 | } 145 | `; 146 | const resolvers = { 147 | Mutation: { 148 | test: () => 'pass', 149 | }, 150 | }; 151 | const schema = makeExecutableSchema({ 152 | typeDefs, 153 | resolvers, 154 | }); 155 | 156 | const roles = ['ADMIN', 'DEVELOPER']; 157 | const roleSchema = { 158 | Mutation: { 159 | test: ['ADMIN'], 160 | }, 161 | }; 162 | const getUser = () => ({ role: 'ADMIN' }); 163 | 164 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 165 | 166 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 167 | // Execution 168 | const mutation = ` 169 | mutation { 170 | test 171 | } 172 | `; 173 | const res = await graphql(schemaWithPermissions, mutation, {}, { user: { role: 'ADMIN' } }); 174 | 175 | expect(res.data).to.be.eql({ 176 | test: 'pass', 177 | }); 178 | }); 179 | 180 | it('access fieldName by multiple role', async () => { 181 | const typeDefs = ` 182 | type Query { 183 | test: String! 184 | } 185 | type Mutation { 186 | test: String! 187 | } 188 | `; 189 | const resolvers = { 190 | Mutation: { 191 | test: () => 'pass', 192 | }, 193 | }; 194 | const schema = makeExecutableSchema({ 195 | typeDefs, 196 | resolvers, 197 | }); 198 | 199 | const roles = ['ADMIN', 'DEVELOPER']; 200 | const roleSchema = { 201 | Mutation: { 202 | test: ['ADMIN', 'DEVELOPER'], 203 | }, 204 | }; 205 | const getUser = () => ({ role: 'ADMIN' }); 206 | 207 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 208 | 209 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 210 | // Execution 211 | const mutation = ` 212 | mutation { 213 | test 214 | } 215 | `; 216 | const adminRes = await graphql(schemaWithPermissions, mutation, {}, { user: { role: 'ADMIN' } }); 217 | const developerRes = await graphql(schemaWithPermissions, mutation, {}, { user: { role: 'DEVELOPER' } }); 218 | 219 | expect(adminRes.data).to.be.eql({ 220 | test: 'pass', 221 | }); 222 | expect(developerRes.data).to.be.eql({ 223 | test: 'pass', 224 | }); 225 | }); 226 | 227 | it('deny fieldName for DEVELOPER', async () => { 228 | const typeDefs = ` 229 | type Query { 230 | test: String! 231 | } 232 | 233 | type Mutation { 234 | test: String! 235 | } 236 | `; 237 | const resolvers = { 238 | Mutation: { 239 | test: () => 'deny', 240 | }, 241 | }; 242 | const schema = makeExecutableSchema({ 243 | typeDefs, 244 | resolvers, 245 | }); 246 | 247 | const roles = ['ADMIN', 'DEVELOPER']; 248 | const roleSchema = { 249 | Mutation: { 250 | test: ['ADMIN'], 251 | }, 252 | }; 253 | const getUser = () => ({ role: 'ADMIN' }); 254 | 255 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 256 | 257 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 258 | // Execution 259 | const mutation = ` 260 | mutation { 261 | test 262 | } 263 | `; 264 | const res = await graphql(schemaWithPermissions, mutation, {}, { user: { role: 'DEVELOPER' } }); 265 | 266 | expect(res.data).to.be.null; 267 | expect(res.errors).to.not.be.null; 268 | }); 269 | }); 270 | 271 | describe('GraphQL RBAC Return Type', () => { 272 | it('access by ADMIN', async () => { 273 | const typeDefs = ` 274 | type Query { 275 | test: Obj! 276 | } 277 | 278 | type Obj { 279 | name: String! 280 | } 281 | `; 282 | const resolvers = { 283 | Query: { 284 | test: () => ({ name: 'pass' }), 285 | }, 286 | }; 287 | const schema = makeExecutableSchema({ 288 | typeDefs, 289 | resolvers, 290 | }); 291 | 292 | const roles = ['ADMIN', 'DEVELOPER']; 293 | const roleSchema = { 294 | Obj: ['ADMIN'], 295 | }; 296 | const getUser = () => ({ role: 'ADMIN' }); 297 | 298 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 299 | 300 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 301 | // Execution 302 | const query = ` 303 | query { 304 | test { 305 | name 306 | } 307 | } 308 | `; 309 | const res = await graphql(schemaWithPermissions, query, {}, { user: { role: 'ADMIN' } }); 310 | 311 | expect(res.data).to.be.eql({ 312 | test: { name: 'pass' }, 313 | }); 314 | }); 315 | 316 | it('access by multiple role', async () => { 317 | const typeDefs = ` 318 | type Query { 319 | test: Obj! 320 | } 321 | 322 | type Obj { 323 | name: String! 324 | } 325 | `; 326 | const resolvers = { 327 | Query: { 328 | test: () => ({ name: 'pass' }), 329 | }, 330 | }; 331 | const schema = makeExecutableSchema({ 332 | typeDefs, 333 | resolvers, 334 | }); 335 | 336 | const roles = ['ADMIN', 'DEVELOPER']; 337 | const roleSchema = { 338 | Obj: ['ADMIN', 'DEVELOPER'], 339 | }; 340 | const getUser = () => ({ role: 'ADMIN' }); 341 | 342 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 343 | 344 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 345 | // Execution 346 | const query = ` 347 | query { 348 | test { 349 | name 350 | } 351 | } 352 | `; 353 | const adminRes = await graphql(schemaWithPermissions, query, {}, { user: { role: 'ADMIN' } }); 354 | const developerRes = await graphql(schemaWithPermissions, query, {}, { user: { role: 'DEVELOPER' } }); 355 | 356 | expect(adminRes.data).to.be.eql({ 357 | test: { name: 'pass' }, 358 | }); 359 | expect(developerRes.data).to.be.eql({ 360 | test: { name: 'pass' }, 361 | }); 362 | }); 363 | 364 | it('deny for DEVELOPER', async () => { 365 | const typeDefs = ` 366 | type Query { 367 | test: Obj! 368 | } 369 | 370 | type Obj { 371 | name: String! 372 | } 373 | `; 374 | const resolvers = { 375 | Query: { 376 | test: () => ({ name: 'deny' }), 377 | }, 378 | }; 379 | const schema = makeExecutableSchema({ 380 | typeDefs, 381 | resolvers, 382 | }); 383 | 384 | const roles = ['ADMIN', 'DEVELOPER']; 385 | const roleSchema = { 386 | Obj: ['ADMIN'], 387 | }; 388 | const getUser = () => ({ role: 'ADMIN' }); 389 | 390 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 391 | 392 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 393 | // Execution 394 | const query = ` 395 | query { 396 | test { 397 | name 398 | } 399 | } 400 | `; 401 | const res = await graphql(schemaWithPermissions, query, {}, { user: { role: 'DEVELOPER' } }); 402 | 403 | expect(res.data).to.be.null; 404 | expect(res.errors).to.not.be.null; 405 | }); 406 | }); 407 | 408 | describe('GraphQL RBAC Return Type column', () => { 409 | it('access by ADMIN', async () => { 410 | const typeDefs = ` 411 | type Query { 412 | test: Obj! 413 | } 414 | 415 | type Obj { 416 | name: String! 417 | secret: String! 418 | } 419 | `; 420 | const resolvers = { 421 | Query: { 422 | test: () => ({ name: 'pass', secret: 'pass' }), 423 | }, 424 | }; 425 | const schema = makeExecutableSchema({ 426 | typeDefs, 427 | resolvers, 428 | }); 429 | 430 | const roles = ['ADMIN', 'DEVELOPER']; 431 | const roleSchema = { 432 | Obj: { 433 | secret: ['ADMIN'], 434 | }, 435 | }; 436 | const getUser = () => ({ role: 'ADMIN' }); 437 | 438 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 439 | 440 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 441 | // Execution 442 | const query = ` 443 | query { 444 | test { 445 | name 446 | secret 447 | } 448 | } 449 | `; 450 | const res = await graphql(schemaWithPermissions, query, {}, { user: { role: 'ADMIN' } }); 451 | 452 | expect(res.data).to.be.eql({ 453 | test: { name: 'pass', secret: 'pass' }, 454 | }); 455 | }); 456 | 457 | it('access by multiple role', async () => { 458 | const typeDefs = ` 459 | type Query { 460 | test: Obj! 461 | } 462 | 463 | type Obj { 464 | name: String! 465 | secret: String! 466 | } 467 | `; 468 | const resolvers = { 469 | Query: { 470 | test: () => ({ name: 'pass', secret: 'pass' }), 471 | }, 472 | }; 473 | const schema = makeExecutableSchema({ 474 | typeDefs, 475 | resolvers, 476 | }); 477 | 478 | const roles = ['ADMIN', 'DEVELOPER']; 479 | const roleSchema = { 480 | Obj: { 481 | secret: ['ADMIN', 'DEVELOPER'], 482 | }, 483 | }; 484 | const getUser = () => ({ role: 'ADMIN' }); 485 | 486 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 487 | 488 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 489 | // Execution 490 | const query = ` 491 | query { 492 | test { 493 | name 494 | secret 495 | } 496 | } 497 | `; 498 | const adminRes = await graphql(schemaWithPermissions, query, {}, { user: { role: 'ADMIN' } }); 499 | const developerRes = await graphql(schemaWithPermissions, query, {}, { user: { role: 'DEVELOPER' } }); 500 | 501 | expect(adminRes.data).to.be.eql({ 502 | test: { name: 'pass', secret: 'pass' }, 503 | }); 504 | expect(developerRes.data).to.be.eql({ 505 | test: { name: 'pass', secret: 'pass' }, 506 | }); 507 | }); 508 | 509 | it('deny for DEVELOPER', async () => { 510 | const typeDefs = ` 511 | type Query { 512 | test: Obj! 513 | } 514 | 515 | type Obj { 516 | name: String! 517 | secret: String! 518 | } 519 | `; 520 | const resolvers = { 521 | Query: { 522 | test: () => ({ name: 'pass', secret: 'deny' }), 523 | }, 524 | }; 525 | const schema = makeExecutableSchema({ 526 | typeDefs, 527 | resolvers, 528 | }); 529 | 530 | const roles = ['ADMIN', 'DEVELOPER']; 531 | const roleSchema = { 532 | Obj: { 533 | secret: ['ADMIN'], 534 | }, 535 | }; 536 | const getUser = () => ({ role: 'ADMIN' }); 537 | 538 | const rbac = new RBAC({roles, schema: roleSchema, getUser}); 539 | 540 | const schemaWithPermissions = applyMiddleware(schema, rbac.middleware()); 541 | // Execution 542 | const query = ` 543 | query { 544 | test { 545 | name 546 | secret 547 | } 548 | } 549 | `; 550 | const res = await graphql(schemaWithPermissions, query, {}, { user: { role: 'DEVELOPER' } }); 551 | 552 | expect(res.data).to.be.null; 553 | expect(res.errors).to.not.be.null; 554 | }); 555 | }); 556 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/generator@^7.0.0", "@babel/generator@^7.1.6": 13 | version "7.1.6" 14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" 15 | integrity sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ== 16 | dependencies: 17 | "@babel/types" "^7.1.6" 18 | jsesc "^2.5.1" 19 | lodash "^4.17.10" 20 | source-map "^0.5.0" 21 | trim-right "^1.0.1" 22 | 23 | "@babel/helper-function-name@^7.1.0": 24 | version "7.1.0" 25 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 26 | integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== 27 | dependencies: 28 | "@babel/helper-get-function-arity" "^7.0.0" 29 | "@babel/template" "^7.1.0" 30 | "@babel/types" "^7.0.0" 31 | 32 | "@babel/helper-get-function-arity@^7.0.0": 33 | version "7.0.0" 34 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 35 | integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== 36 | dependencies: 37 | "@babel/types" "^7.0.0" 38 | 39 | "@babel/helper-split-export-declaration@^7.0.0": 40 | version "7.0.0" 41 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" 42 | integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== 43 | dependencies: 44 | "@babel/types" "^7.0.0" 45 | 46 | "@babel/highlight@^7.0.0": 47 | version "7.0.0" 48 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 49 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 50 | dependencies: 51 | chalk "^2.0.0" 52 | esutils "^2.0.2" 53 | js-tokens "^4.0.0" 54 | 55 | "@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.6": 56 | version "7.1.6" 57 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" 58 | integrity sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ== 59 | 60 | "@babel/template@^7.0.0", "@babel/template@^7.1.0": 61 | version "7.1.2" 62 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" 63 | integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== 64 | dependencies: 65 | "@babel/code-frame" "^7.0.0" 66 | "@babel/parser" "^7.1.2" 67 | "@babel/types" "^7.1.2" 68 | 69 | "@babel/traverse@^7.0.0": 70 | version "7.1.6" 71 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" 72 | integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ== 73 | dependencies: 74 | "@babel/code-frame" "^7.0.0" 75 | "@babel/generator" "^7.1.6" 76 | "@babel/helper-function-name" "^7.1.0" 77 | "@babel/helper-split-export-declaration" "^7.0.0" 78 | "@babel/parser" "^7.1.6" 79 | "@babel/types" "^7.1.6" 80 | debug "^4.1.0" 81 | globals "^11.1.0" 82 | lodash "^4.17.10" 83 | 84 | "@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.6": 85 | version "7.1.6" 86 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" 87 | integrity sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w== 88 | dependencies: 89 | esutils "^2.0.2" 90 | lodash "^4.17.10" 91 | to-fast-properties "^2.0.0" 92 | 93 | "@types/chai@^4.1.7": 94 | version "4.1.7" 95 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" 96 | integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== 97 | 98 | "@types/graphql@^14.0.3": 99 | version "14.0.3" 100 | resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-14.0.3.tgz#389e2e5b83ecdb376d9f98fae2094297bc112c1c" 101 | integrity sha512-TcFkpEjcQK7w8OcrQcd7iIBPjU0rdyi3ldj6d0iJ4PPSzbWqPBvXj9KSwO14hTOX2dm9RoiH7VuxksJLNYdXUQ== 102 | 103 | "@types/mocha@^5.2.5": 104 | version "5.2.5" 105 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.5.tgz#8a4accfc403c124a0bafe8a9fc61a05ec1032073" 106 | integrity sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww== 107 | 108 | "@types/node@^10.12.9": 109 | version "10.12.9" 110 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.9.tgz#a07bfa74331471e1dc22a47eb72026843f7b95c8" 111 | integrity sha512-eajkMXG812/w3w4a1OcBlaTwsFPO5F7fJ/amy+tieQxEMWBlbV1JGSjkFM+zkHNf81Cad+dfIRA+IBkvmvdAeA== 112 | 113 | ansi-escapes@^1.1.0: 114 | version "1.4.0" 115 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 116 | integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= 117 | 118 | ansi-regex@^2.0.0: 119 | version "2.1.1" 120 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 121 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 122 | 123 | ansi-regex@^3.0.0: 124 | version "3.0.0" 125 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 126 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 127 | 128 | ansi-styles@^2.2.1: 129 | version "2.2.1" 130 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 131 | integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= 132 | 133 | ansi-styles@^3.2.1: 134 | version "3.2.1" 135 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 136 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 137 | dependencies: 138 | color-convert "^1.9.0" 139 | 140 | apollo-link@^1.2.3: 141 | version "1.2.3" 142 | resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.3.tgz#9bd8d5fe1d88d31dc91dae9ecc22474d451fb70d" 143 | integrity sha512-iL9yS2OfxYhigme5bpTbmRyC+Htt6tyo2fRMHT3K1XRL/C5IQDDz37OjpPy4ndx7WInSvfSZaaOTKFja9VWqSw== 144 | dependencies: 145 | apollo-utilities "^1.0.0" 146 | zen-observable-ts "^0.8.10" 147 | 148 | apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: 149 | version "1.0.25" 150 | resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.25.tgz#899b00f5f990fb451675adf84cb3de82eb6372ea" 151 | integrity sha512-AXvqkhni3Ir1ffm4SA1QzXn8k8I5BBl4PVKEyak734i4jFdp+xgfUyi2VCqF64TJlFTA/B73TRDUvO2D+tKtZg== 152 | dependencies: 153 | fast-json-stable-stringify "^2.0.0" 154 | 155 | append-transform@^1.0.0: 156 | version "1.0.0" 157 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" 158 | integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== 159 | dependencies: 160 | default-require-extensions "^2.0.0" 161 | 162 | archy@^1.0.0: 163 | version "1.0.0" 164 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 165 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 166 | 167 | argparse@^1.0.7: 168 | version "1.0.10" 169 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 170 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 171 | dependencies: 172 | sprintf-js "~1.0.2" 173 | 174 | arrify@^1.0.0, arrify@^1.0.1: 175 | version "1.0.1" 176 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 177 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 178 | 179 | assertion-error@^1.1.0: 180 | version "1.1.0" 181 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 182 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 183 | 184 | async@^2.5.0: 185 | version "2.6.1" 186 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" 187 | integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== 188 | dependencies: 189 | lodash "^4.17.10" 190 | 191 | babel-code-frame@^6.22.0: 192 | version "6.26.0" 193 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 194 | integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= 195 | dependencies: 196 | chalk "^1.1.3" 197 | esutils "^2.0.2" 198 | js-tokens "^3.0.2" 199 | 200 | babel-polyfill@6.23.0: 201 | version "6.23.0" 202 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" 203 | integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0= 204 | dependencies: 205 | babel-runtime "^6.22.0" 206 | core-js "^2.4.0" 207 | regenerator-runtime "^0.10.0" 208 | 209 | babel-runtime@^6.22.0: 210 | version "6.26.0" 211 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 212 | integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 213 | dependencies: 214 | core-js "^2.4.0" 215 | regenerator-runtime "^0.11.0" 216 | 217 | balanced-match@^1.0.0: 218 | version "1.0.0" 219 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 220 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 221 | 222 | brace-expansion@^1.1.7: 223 | version "1.1.11" 224 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 225 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 226 | dependencies: 227 | balanced-match "^1.0.0" 228 | concat-map "0.0.1" 229 | 230 | browser-stdout@1.3.1: 231 | version "1.3.1" 232 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 233 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 234 | 235 | buffer-from@^1.0.0, buffer-from@^1.1.0: 236 | version "1.1.1" 237 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 238 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 239 | 240 | builtin-modules@^1.0.0, builtin-modules@^1.1.1: 241 | version "1.1.1" 242 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 243 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 244 | 245 | caching-transform@^2.0.0: 246 | version "2.0.0" 247 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-2.0.0.tgz#e1292bd92d35b6e8b1ed7075726724b3bd64eea0" 248 | integrity sha512-tTfemGmFWe7KZ3KN6VsSgQZbd9Bgo7A40wlp4PTsJJvFu4YAnEC5YnfdiKq6Vh2i9XJLnA9n8OXD46orVpnPMw== 249 | dependencies: 250 | make-dir "^1.0.0" 251 | md5-hex "^2.0.0" 252 | package-hash "^2.0.0" 253 | write-file-atomic "^2.0.0" 254 | 255 | camelcase@^4.1.0: 256 | version "4.1.0" 257 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 258 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 259 | 260 | chai@^4.2.0: 261 | version "4.2.0" 262 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 263 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== 264 | dependencies: 265 | assertion-error "^1.1.0" 266 | check-error "^1.0.2" 267 | deep-eql "^3.0.1" 268 | get-func-name "^2.0.0" 269 | pathval "^1.1.0" 270 | type-detect "^4.0.5" 271 | 272 | chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.3: 273 | version "1.1.3" 274 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 275 | integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= 276 | dependencies: 277 | ansi-styles "^2.2.1" 278 | escape-string-regexp "^1.0.2" 279 | has-ansi "^2.0.0" 280 | strip-ansi "^3.0.0" 281 | supports-color "^2.0.0" 282 | 283 | chalk@^2.0.0, chalk@^2.3.0: 284 | version "2.4.1" 285 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 286 | integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== 287 | dependencies: 288 | ansi-styles "^3.2.1" 289 | escape-string-regexp "^1.0.5" 290 | supports-color "^5.3.0" 291 | 292 | chardet@^0.4.0: 293 | version "0.4.2" 294 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 295 | integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= 296 | 297 | check-error@^1.0.2: 298 | version "1.0.2" 299 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 300 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 301 | 302 | cli-cursor@^2.1.0: 303 | version "2.1.0" 304 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 305 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 306 | dependencies: 307 | restore-cursor "^2.0.0" 308 | 309 | cli-width@^2.0.0: 310 | version "2.2.0" 311 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 312 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 313 | 314 | cliui@^4.0.0: 315 | version "4.1.0" 316 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 317 | integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 318 | dependencies: 319 | string-width "^2.1.1" 320 | strip-ansi "^4.0.0" 321 | wrap-ansi "^2.0.0" 322 | 323 | code-point-at@^1.0.0: 324 | version "1.1.0" 325 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 326 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 327 | 328 | color-convert@^1.9.0: 329 | version "1.9.3" 330 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 331 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 332 | dependencies: 333 | color-name "1.1.3" 334 | 335 | color-name@1.1.3: 336 | version "1.1.3" 337 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 338 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 339 | 340 | commander@2.15.1: 341 | version "2.15.1" 342 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" 343 | integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== 344 | 345 | commander@^2.12.1: 346 | version "2.19.0" 347 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" 348 | integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== 349 | 350 | commander@~2.17.1: 351 | version "2.17.1" 352 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 353 | integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== 354 | 355 | commondir@^1.0.1: 356 | version "1.0.1" 357 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 358 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 359 | 360 | concat-map@0.0.1: 361 | version "0.0.1" 362 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 363 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 364 | 365 | convert-source-map@^1.6.0: 366 | version "1.6.0" 367 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 368 | integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== 369 | dependencies: 370 | safe-buffer "~5.1.1" 371 | 372 | core-js@^2.4.0: 373 | version "2.5.7" 374 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" 375 | integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== 376 | 377 | cross-spawn@^4: 378 | version "4.0.2" 379 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" 380 | integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= 381 | dependencies: 382 | lru-cache "^4.0.1" 383 | which "^1.2.9" 384 | 385 | cross-spawn@^5.0.1: 386 | version "5.1.0" 387 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 388 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 389 | dependencies: 390 | lru-cache "^4.0.1" 391 | shebang-command "^1.2.0" 392 | which "^1.2.9" 393 | 394 | debug-log@^1.0.1: 395 | version "1.0.1" 396 | resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 397 | integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= 398 | 399 | debug@3.1.0: 400 | version "3.1.0" 401 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 402 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 403 | dependencies: 404 | ms "2.0.0" 405 | 406 | debug@^3.1.0: 407 | version "3.2.6" 408 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 409 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 410 | dependencies: 411 | ms "^2.1.1" 412 | 413 | debug@^4.1.0: 414 | version "4.1.0" 415 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" 416 | integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== 417 | dependencies: 418 | ms "^2.1.1" 419 | 420 | decamelize@^1.1.1: 421 | version "1.2.0" 422 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 423 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 424 | 425 | deep-eql@^3.0.1: 426 | version "3.0.1" 427 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 428 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 429 | dependencies: 430 | type-detect "^4.0.0" 431 | 432 | default-require-extensions@^2.0.0: 433 | version "2.0.0" 434 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" 435 | integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= 436 | dependencies: 437 | strip-bom "^3.0.0" 438 | 439 | deprecated-decorator@^0.1.6: 440 | version "0.1.6" 441 | resolved "https://registry.yarnpkg.com/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz#00966317b7a12fe92f3cc831f7583af329b86c37" 442 | integrity sha1-AJZjF7ehL+kvPMgx91g68ym4bDc= 443 | 444 | diff@3.5.0, diff@^3.1.0, diff@^3.2.0: 445 | version "3.5.0" 446 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 447 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 448 | 449 | encoding@^0.1.11: 450 | version "0.1.12" 451 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 452 | integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= 453 | dependencies: 454 | iconv-lite "~0.4.13" 455 | 456 | error-ex@^1.3.1: 457 | version "1.3.2" 458 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 459 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 460 | dependencies: 461 | is-arrayish "^0.2.1" 462 | 463 | es6-error@^4.0.1: 464 | version "4.1.1" 465 | resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" 466 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== 467 | 468 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 469 | version "1.0.5" 470 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 471 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 472 | 473 | esprima@^4.0.0: 474 | version "4.0.1" 475 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 476 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 477 | 478 | esutils@^2.0.2: 479 | version "2.0.2" 480 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 481 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 482 | 483 | execa@^0.7.0: 484 | version "0.7.0" 485 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 486 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 487 | dependencies: 488 | cross-spawn "^5.0.1" 489 | get-stream "^3.0.0" 490 | is-stream "^1.1.0" 491 | npm-run-path "^2.0.0" 492 | p-finally "^1.0.0" 493 | signal-exit "^3.0.0" 494 | strip-eof "^1.0.0" 495 | 496 | external-editor@^2.0.1: 497 | version "2.2.0" 498 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 499 | integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== 500 | dependencies: 501 | chardet "^0.4.0" 502 | iconv-lite "^0.4.17" 503 | tmp "^0.0.33" 504 | 505 | fast-json-stable-stringify@^2.0.0: 506 | version "2.0.0" 507 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 508 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 509 | 510 | figures@^2.0.0: 511 | version "2.0.0" 512 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 513 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 514 | dependencies: 515 | escape-string-regexp "^1.0.5" 516 | 517 | find-cache-dir@^2.0.0: 518 | version "2.0.0" 519 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" 520 | integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== 521 | dependencies: 522 | commondir "^1.0.1" 523 | make-dir "^1.0.0" 524 | pkg-dir "^3.0.0" 525 | 526 | find-up@^2.1.0: 527 | version "2.1.0" 528 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 529 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 530 | dependencies: 531 | locate-path "^2.0.0" 532 | 533 | find-up@^3.0.0: 534 | version "3.0.0" 535 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 536 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 537 | dependencies: 538 | locate-path "^3.0.0" 539 | 540 | foreground-child@^1.5.6: 541 | version "1.5.6" 542 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" 543 | integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= 544 | dependencies: 545 | cross-spawn "^4" 546 | signal-exit "^3.0.0" 547 | 548 | fs.realpath@^1.0.0: 549 | version "1.0.0" 550 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 551 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 552 | 553 | get-caller-file@^1.0.1: 554 | version "1.0.3" 555 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 556 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 557 | 558 | get-func-name@^2.0.0: 559 | version "2.0.0" 560 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 561 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 562 | 563 | get-stream@^3.0.0: 564 | version "3.0.0" 565 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 566 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 567 | 568 | glob@7.1.2: 569 | version "7.1.2" 570 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 571 | integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== 572 | dependencies: 573 | fs.realpath "^1.0.0" 574 | inflight "^1.0.4" 575 | inherits "2" 576 | minimatch "^3.0.4" 577 | once "^1.3.0" 578 | path-is-absolute "^1.0.0" 579 | 580 | glob@^7.0.5, glob@^7.1.1, glob@^7.1.3: 581 | version "7.1.3" 582 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 583 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 584 | dependencies: 585 | fs.realpath "^1.0.0" 586 | inflight "^1.0.4" 587 | inherits "2" 588 | minimatch "^3.0.4" 589 | once "^1.3.0" 590 | path-is-absolute "^1.0.0" 591 | 592 | globals@^11.1.0: 593 | version "11.9.0" 594 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" 595 | integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== 596 | 597 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 598 | version "4.1.15" 599 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 600 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== 601 | 602 | graphql-middleware@^2.0.2: 603 | version "2.0.2" 604 | resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-2.0.2.tgz#99a3b0ff3f3e3fa66c6ddc8608e6e4eb1d2bb99c" 605 | integrity sha512-qDmot+DU2XTRnWS3SJGRUUPQ9jhma9AtUR1GtWnqq3JkzoqzT/dprxS7eszIj0c1gD5UrySpm4yM1fNbQcazwA== 606 | dependencies: 607 | graphql-tools "^4.0.3" 608 | 609 | graphql-shield@^4.1.0: 610 | version "4.1.0" 611 | resolved "https://registry.yarnpkg.com/graphql-shield/-/graphql-shield-4.1.0.tgz#8bd55179fd28d00e64ca5a7dbd3cffe82e282e73" 612 | integrity sha512-r3m5t7FpLDyJQIby0IKyNrtp8k62hP/syhPcrpdT67UVNKh0jjjl+zpjXh/3PXeNZHPEAiBQTHhFjnC7H2B4SA== 613 | dependencies: 614 | object-hash "^1.3.0" 615 | opencollective "1.0.3" 616 | 617 | graphql-tools@^4.0.3: 618 | version "4.0.3" 619 | resolved "https://registry.yarnpkg.com/graphql-tools/-/graphql-tools-4.0.3.tgz#23b5cb52c519212b1b2e4630a361464396ad264b" 620 | integrity sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg== 621 | dependencies: 622 | apollo-link "^1.2.3" 623 | apollo-utilities "^1.0.1" 624 | deprecated-decorator "^0.1.6" 625 | iterall "^1.1.3" 626 | uuid "^3.1.0" 627 | 628 | graphql@^14.0.2: 629 | version "14.0.2" 630 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.0.2.tgz#7dded337a4c3fd2d075692323384034b357f5650" 631 | integrity sha512-gUC4YYsaiSJT1h40krG3J+USGlwhzNTXSb4IOZljn9ag5Tj+RkoXrWp+Kh7WyE3t1NCfab5kzCuxBIvOMERMXw== 632 | dependencies: 633 | iterall "^1.2.2" 634 | 635 | growl@1.10.5: 636 | version "1.10.5" 637 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 638 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 639 | 640 | handlebars@^4.0.11: 641 | version "4.0.12" 642 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" 643 | integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== 644 | dependencies: 645 | async "^2.5.0" 646 | optimist "^0.6.1" 647 | source-map "^0.6.1" 648 | optionalDependencies: 649 | uglify-js "^3.1.4" 650 | 651 | has-ansi@^2.0.0: 652 | version "2.0.0" 653 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 654 | integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= 655 | dependencies: 656 | ansi-regex "^2.0.0" 657 | 658 | has-flag@^3.0.0: 659 | version "3.0.0" 660 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 661 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 662 | 663 | he@1.1.1: 664 | version "1.1.1" 665 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 666 | integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= 667 | 668 | hosted-git-info@^2.1.4: 669 | version "2.7.1" 670 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 671 | integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== 672 | 673 | iconv-lite@^0.4.17, iconv-lite@~0.4.13: 674 | version "0.4.24" 675 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 676 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 677 | dependencies: 678 | safer-buffer ">= 2.1.2 < 3" 679 | 680 | imurmurhash@^0.1.4: 681 | version "0.1.4" 682 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 683 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 684 | 685 | inflight@^1.0.4: 686 | version "1.0.6" 687 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 688 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 689 | dependencies: 690 | once "^1.3.0" 691 | wrappy "1" 692 | 693 | inherits@2: 694 | version "2.0.3" 695 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 696 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 697 | 698 | inquirer@3.0.6: 699 | version "3.0.6" 700 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" 701 | integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c= 702 | dependencies: 703 | ansi-escapes "^1.1.0" 704 | chalk "^1.0.0" 705 | cli-cursor "^2.1.0" 706 | cli-width "^2.0.0" 707 | external-editor "^2.0.1" 708 | figures "^2.0.0" 709 | lodash "^4.3.0" 710 | mute-stream "0.0.7" 711 | run-async "^2.2.0" 712 | rx "^4.1.0" 713 | string-width "^2.0.0" 714 | strip-ansi "^3.0.0" 715 | through "^2.3.6" 716 | 717 | invert-kv@^1.0.0: 718 | version "1.0.0" 719 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 720 | integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= 721 | 722 | is-arrayish@^0.2.1: 723 | version "0.2.1" 724 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 725 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 726 | 727 | is-builtin-module@^1.0.0: 728 | version "1.0.0" 729 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 730 | integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= 731 | dependencies: 732 | builtin-modules "^1.0.0" 733 | 734 | is-fullwidth-code-point@^1.0.0: 735 | version "1.0.0" 736 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 737 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 738 | dependencies: 739 | number-is-nan "^1.0.0" 740 | 741 | is-fullwidth-code-point@^2.0.0: 742 | version "2.0.0" 743 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 744 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 745 | 746 | is-promise@^2.1.0: 747 | version "2.1.0" 748 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 749 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 750 | 751 | is-stream@^1.0.1, is-stream@^1.1.0: 752 | version "1.1.0" 753 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 754 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 755 | 756 | isexe@^2.0.0: 757 | version "2.0.0" 758 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 759 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 760 | 761 | istanbul-lib-coverage@^2.0.1: 762 | version "2.0.1" 763 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#2aee0e073ad8c5f6a0b00e0dfbf52b4667472eda" 764 | integrity sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA== 765 | 766 | istanbul-lib-hook@^2.0.1: 767 | version "2.0.1" 768 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.1.tgz#918a57b75a0f951d552a08487ca1fa5336433d72" 769 | integrity sha512-ufiZoiJ8CxY577JJWEeFuxXZoMqiKpq/RqZtOAYuQLvlkbJWscq9n3gc4xrCGH9n4pW0qnTxOz1oyMmVtk8E1w== 770 | dependencies: 771 | append-transform "^1.0.0" 772 | 773 | istanbul-lib-instrument@^3.0.0: 774 | version "3.0.0" 775 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz#b5f066b2a161f75788be17a9d556f40a0cf2afc9" 776 | integrity sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ== 777 | dependencies: 778 | "@babel/generator" "^7.0.0" 779 | "@babel/parser" "^7.0.0" 780 | "@babel/template" "^7.0.0" 781 | "@babel/traverse" "^7.0.0" 782 | "@babel/types" "^7.0.0" 783 | istanbul-lib-coverage "^2.0.1" 784 | semver "^5.5.0" 785 | 786 | istanbul-lib-report@^2.0.2: 787 | version "2.0.2" 788 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.2.tgz#430a2598519113e1da7af274ba861bd42dd97535" 789 | integrity sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q== 790 | dependencies: 791 | istanbul-lib-coverage "^2.0.1" 792 | make-dir "^1.3.0" 793 | supports-color "^5.4.0" 794 | 795 | istanbul-lib-source-maps@^2.0.1: 796 | version "2.0.1" 797 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-2.0.1.tgz#ce8b45131d8293fdeaa732f4faf1852d13d0a97e" 798 | integrity sha512-30l40ySg+gvBLcxTrLzR4Z2XTRj3HgRCA/p2rnbs/3OiTaoj054gAbuP5DcLOtwqmy4XW8qXBHzrmP2/bQ9i3A== 799 | dependencies: 800 | debug "^3.1.0" 801 | istanbul-lib-coverage "^2.0.1" 802 | make-dir "^1.3.0" 803 | rimraf "^2.6.2" 804 | source-map "^0.6.1" 805 | 806 | istanbul-reports@^2.0.1: 807 | version "2.0.1" 808 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.0.1.tgz#fb8d6ea850701a3984350b977a969e9a556116a7" 809 | integrity sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw== 810 | dependencies: 811 | handlebars "^4.0.11" 812 | 813 | iterall@^1.1.3, iterall@^1.2.2: 814 | version "1.2.2" 815 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" 816 | integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== 817 | 818 | js-tokens@^3.0.2: 819 | version "3.0.2" 820 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 821 | integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= 822 | 823 | js-tokens@^4.0.0: 824 | version "4.0.0" 825 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 826 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 827 | 828 | js-yaml@^3.7.0: 829 | version "3.12.0" 830 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" 831 | integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== 832 | dependencies: 833 | argparse "^1.0.7" 834 | esprima "^4.0.0" 835 | 836 | jsesc@^2.5.1: 837 | version "2.5.2" 838 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 839 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 840 | 841 | json-parse-better-errors@^1.0.1: 842 | version "1.0.2" 843 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 844 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 845 | 846 | lcid@^1.0.0: 847 | version "1.0.0" 848 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 849 | integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= 850 | dependencies: 851 | invert-kv "^1.0.0" 852 | 853 | load-json-file@^4.0.0: 854 | version "4.0.0" 855 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 856 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 857 | dependencies: 858 | graceful-fs "^4.1.2" 859 | parse-json "^4.0.0" 860 | pify "^3.0.0" 861 | strip-bom "^3.0.0" 862 | 863 | locate-path@^2.0.0: 864 | version "2.0.0" 865 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 866 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 867 | dependencies: 868 | p-locate "^2.0.0" 869 | path-exists "^3.0.0" 870 | 871 | locate-path@^3.0.0: 872 | version "3.0.0" 873 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 874 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 875 | dependencies: 876 | p-locate "^3.0.0" 877 | path-exists "^3.0.0" 878 | 879 | lodash.flattendeep@^4.4.0: 880 | version "4.4.0" 881 | resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" 882 | integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= 883 | 884 | lodash@^4.17.10, lodash@^4.17.11, lodash@^4.3.0: 885 | version "4.17.11" 886 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 887 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== 888 | 889 | lru-cache@^4.0.1: 890 | version "4.1.3" 891 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" 892 | integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== 893 | dependencies: 894 | pseudomap "^1.0.2" 895 | yallist "^2.1.2" 896 | 897 | make-dir@^1.0.0, make-dir@^1.3.0: 898 | version "1.3.0" 899 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 900 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== 901 | dependencies: 902 | pify "^3.0.0" 903 | 904 | make-error@^1.1.1: 905 | version "1.3.5" 906 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 907 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 908 | 909 | md5-hex@^2.0.0: 910 | version "2.0.0" 911 | resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" 912 | integrity sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM= 913 | dependencies: 914 | md5-o-matic "^0.1.1" 915 | 916 | md5-o-matic@^0.1.1: 917 | version "0.1.1" 918 | resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" 919 | integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= 920 | 921 | mem@^1.1.0: 922 | version "1.1.0" 923 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 924 | integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= 925 | dependencies: 926 | mimic-fn "^1.0.0" 927 | 928 | merge-source-map@^1.1.0: 929 | version "1.1.0" 930 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 931 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== 932 | dependencies: 933 | source-map "^0.6.1" 934 | 935 | mimic-fn@^1.0.0: 936 | version "1.2.0" 937 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 938 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 939 | 940 | minimatch@3.0.4, minimatch@^3.0.4: 941 | version "3.0.4" 942 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 943 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 944 | dependencies: 945 | brace-expansion "^1.1.7" 946 | 947 | minimist@0.0.8: 948 | version "0.0.8" 949 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 950 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 951 | 952 | minimist@1.2.0, minimist@^1.2.0: 953 | version "1.2.0" 954 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 955 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 956 | 957 | minimist@~0.0.1: 958 | version "0.0.10" 959 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 960 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 961 | 962 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 963 | version "0.5.1" 964 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 965 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 966 | dependencies: 967 | minimist "0.0.8" 968 | 969 | mocha@^5.2.0: 970 | version "5.2.0" 971 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" 972 | integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== 973 | dependencies: 974 | browser-stdout "1.3.1" 975 | commander "2.15.1" 976 | debug "3.1.0" 977 | diff "3.5.0" 978 | escape-string-regexp "1.0.5" 979 | glob "7.1.2" 980 | growl "1.10.5" 981 | he "1.1.1" 982 | minimatch "3.0.4" 983 | mkdirp "0.5.1" 984 | supports-color "5.4.0" 985 | 986 | ms@2.0.0: 987 | version "2.0.0" 988 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 989 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 990 | 991 | ms@^2.1.1: 992 | version "2.1.1" 993 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 994 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 995 | 996 | mute-stream@0.0.7: 997 | version "0.0.7" 998 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 999 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1000 | 1001 | node-fetch@1.6.3: 1002 | version "1.6.3" 1003 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" 1004 | integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ= 1005 | dependencies: 1006 | encoding "^0.1.11" 1007 | is-stream "^1.0.1" 1008 | 1009 | normalize-package-data@^2.3.2: 1010 | version "2.4.0" 1011 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 1012 | integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== 1013 | dependencies: 1014 | hosted-git-info "^2.1.4" 1015 | is-builtin-module "^1.0.0" 1016 | semver "2 || 3 || 4 || 5" 1017 | validate-npm-package-license "^3.0.1" 1018 | 1019 | npm-run-path@^2.0.0: 1020 | version "2.0.2" 1021 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1022 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1023 | dependencies: 1024 | path-key "^2.0.0" 1025 | 1026 | number-is-nan@^1.0.0: 1027 | version "1.0.1" 1028 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1029 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1030 | 1031 | nyc@^13.1.0: 1032 | version "13.1.0" 1033 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-13.1.0.tgz#463665c7ff6b5798e322624a5eb449a678db90e3" 1034 | integrity sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg== 1035 | dependencies: 1036 | archy "^1.0.0" 1037 | arrify "^1.0.1" 1038 | caching-transform "^2.0.0" 1039 | convert-source-map "^1.6.0" 1040 | debug-log "^1.0.1" 1041 | find-cache-dir "^2.0.0" 1042 | find-up "^3.0.0" 1043 | foreground-child "^1.5.6" 1044 | glob "^7.1.3" 1045 | istanbul-lib-coverage "^2.0.1" 1046 | istanbul-lib-hook "^2.0.1" 1047 | istanbul-lib-instrument "^3.0.0" 1048 | istanbul-lib-report "^2.0.2" 1049 | istanbul-lib-source-maps "^2.0.1" 1050 | istanbul-reports "^2.0.1" 1051 | make-dir "^1.3.0" 1052 | merge-source-map "^1.1.0" 1053 | resolve-from "^4.0.0" 1054 | rimraf "^2.6.2" 1055 | signal-exit "^3.0.2" 1056 | spawn-wrap "^1.4.2" 1057 | test-exclude "^5.0.0" 1058 | uuid "^3.3.2" 1059 | yargs "11.1.0" 1060 | yargs-parser "^9.0.2" 1061 | 1062 | object-assign@^4.0.1: 1063 | version "4.1.1" 1064 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1065 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1066 | 1067 | object-hash@^1.3.0: 1068 | version "1.3.1" 1069 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" 1070 | integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== 1071 | 1072 | once@^1.3.0: 1073 | version "1.4.0" 1074 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1075 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1076 | dependencies: 1077 | wrappy "1" 1078 | 1079 | onetime@^2.0.0: 1080 | version "2.0.1" 1081 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1082 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1083 | dependencies: 1084 | mimic-fn "^1.0.0" 1085 | 1086 | opencollective@1.0.3: 1087 | version "1.0.3" 1088 | resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1" 1089 | integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE= 1090 | dependencies: 1091 | babel-polyfill "6.23.0" 1092 | chalk "1.1.3" 1093 | inquirer "3.0.6" 1094 | minimist "1.2.0" 1095 | node-fetch "1.6.3" 1096 | opn "4.0.2" 1097 | 1098 | opn@4.0.2: 1099 | version "4.0.2" 1100 | resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" 1101 | integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU= 1102 | dependencies: 1103 | object-assign "^4.0.1" 1104 | pinkie-promise "^2.0.0" 1105 | 1106 | optimist@^0.6.1: 1107 | version "0.6.1" 1108 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1109 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 1110 | dependencies: 1111 | minimist "~0.0.1" 1112 | wordwrap "~0.0.2" 1113 | 1114 | os-homedir@^1.0.1: 1115 | version "1.0.2" 1116 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1117 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1118 | 1119 | os-locale@^2.0.0: 1120 | version "2.1.0" 1121 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 1122 | integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== 1123 | dependencies: 1124 | execa "^0.7.0" 1125 | lcid "^1.0.0" 1126 | mem "^1.1.0" 1127 | 1128 | os-tmpdir@~1.0.2: 1129 | version "1.0.2" 1130 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1131 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1132 | 1133 | p-finally@^1.0.0: 1134 | version "1.0.0" 1135 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1136 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1137 | 1138 | p-limit@^1.1.0: 1139 | version "1.3.0" 1140 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1141 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1142 | dependencies: 1143 | p-try "^1.0.0" 1144 | 1145 | p-limit@^2.0.0: 1146 | version "2.0.0" 1147 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" 1148 | integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== 1149 | dependencies: 1150 | p-try "^2.0.0" 1151 | 1152 | p-locate@^2.0.0: 1153 | version "2.0.0" 1154 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1155 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1156 | dependencies: 1157 | p-limit "^1.1.0" 1158 | 1159 | p-locate@^3.0.0: 1160 | version "3.0.0" 1161 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1162 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1163 | dependencies: 1164 | p-limit "^2.0.0" 1165 | 1166 | p-try@^1.0.0: 1167 | version "1.0.0" 1168 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 1169 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1170 | 1171 | p-try@^2.0.0: 1172 | version "2.0.0" 1173 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" 1174 | integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== 1175 | 1176 | package-hash@^2.0.0: 1177 | version "2.0.0" 1178 | resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-2.0.0.tgz#78ae326c89e05a4d813b68601977af05c00d2a0d" 1179 | integrity sha1-eK4ybIngWk2BO2hgGXevBcANKg0= 1180 | dependencies: 1181 | graceful-fs "^4.1.11" 1182 | lodash.flattendeep "^4.4.0" 1183 | md5-hex "^2.0.0" 1184 | release-zalgo "^1.0.0" 1185 | 1186 | parse-json@^4.0.0: 1187 | version "4.0.0" 1188 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1189 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1190 | dependencies: 1191 | error-ex "^1.3.1" 1192 | json-parse-better-errors "^1.0.1" 1193 | 1194 | path-exists@^3.0.0: 1195 | version "3.0.0" 1196 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1197 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1198 | 1199 | path-is-absolute@^1.0.0: 1200 | version "1.0.1" 1201 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1202 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1203 | 1204 | path-key@^2.0.0: 1205 | version "2.0.1" 1206 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1207 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1208 | 1209 | path-parse@^1.0.5: 1210 | version "1.0.6" 1211 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1212 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1213 | 1214 | path-type@^3.0.0: 1215 | version "3.0.0" 1216 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1217 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 1218 | dependencies: 1219 | pify "^3.0.0" 1220 | 1221 | pathval@^1.1.0: 1222 | version "1.1.0" 1223 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 1224 | integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= 1225 | 1226 | pify@^3.0.0: 1227 | version "3.0.0" 1228 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1229 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1230 | 1231 | pinkie-promise@^2.0.0: 1232 | version "2.0.1" 1233 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1234 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 1235 | dependencies: 1236 | pinkie "^2.0.0" 1237 | 1238 | pinkie@^2.0.0: 1239 | version "2.0.4" 1240 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1241 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 1242 | 1243 | pkg-dir@^3.0.0: 1244 | version "3.0.0" 1245 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 1246 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 1247 | dependencies: 1248 | find-up "^3.0.0" 1249 | 1250 | pseudomap@^1.0.2: 1251 | version "1.0.2" 1252 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1253 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1254 | 1255 | read-pkg-up@^4.0.0: 1256 | version "4.0.0" 1257 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 1258 | integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== 1259 | dependencies: 1260 | find-up "^3.0.0" 1261 | read-pkg "^3.0.0" 1262 | 1263 | read-pkg@^3.0.0: 1264 | version "3.0.0" 1265 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 1266 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 1267 | dependencies: 1268 | load-json-file "^4.0.0" 1269 | normalize-package-data "^2.3.2" 1270 | path-type "^3.0.0" 1271 | 1272 | regenerator-runtime@^0.10.0: 1273 | version "0.10.5" 1274 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 1275 | integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= 1276 | 1277 | regenerator-runtime@^0.11.0: 1278 | version "0.11.1" 1279 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 1280 | integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== 1281 | 1282 | release-zalgo@^1.0.0: 1283 | version "1.0.0" 1284 | resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" 1285 | integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= 1286 | dependencies: 1287 | es6-error "^4.0.1" 1288 | 1289 | require-directory@^2.1.1: 1290 | version "2.1.1" 1291 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1292 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1293 | 1294 | require-main-filename@^1.0.1: 1295 | version "1.0.1" 1296 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1297 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 1298 | 1299 | resolve-from@^4.0.0: 1300 | version "4.0.0" 1301 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1302 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1303 | 1304 | resolve@^1.3.2: 1305 | version "1.8.1" 1306 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" 1307 | integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== 1308 | dependencies: 1309 | path-parse "^1.0.5" 1310 | 1311 | restore-cursor@^2.0.0: 1312 | version "2.0.0" 1313 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1314 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1315 | dependencies: 1316 | onetime "^2.0.0" 1317 | signal-exit "^3.0.2" 1318 | 1319 | rimraf@^2.6.2: 1320 | version "2.6.2" 1321 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1322 | integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== 1323 | dependencies: 1324 | glob "^7.0.5" 1325 | 1326 | run-async@^2.2.0: 1327 | version "2.3.0" 1328 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1329 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 1330 | dependencies: 1331 | is-promise "^2.1.0" 1332 | 1333 | rx@^4.1.0: 1334 | version "4.1.0" 1335 | resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" 1336 | integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= 1337 | 1338 | safe-buffer@~5.1.1: 1339 | version "5.1.2" 1340 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1341 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1342 | 1343 | "safer-buffer@>= 2.1.2 < 3": 1344 | version "2.1.2" 1345 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1346 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1347 | 1348 | "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0: 1349 | version "5.6.0" 1350 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" 1351 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== 1352 | 1353 | set-blocking@^2.0.0: 1354 | version "2.0.0" 1355 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1356 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1357 | 1358 | shebang-command@^1.2.0: 1359 | version "1.2.0" 1360 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1361 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 1362 | dependencies: 1363 | shebang-regex "^1.0.0" 1364 | 1365 | shebang-regex@^1.0.0: 1366 | version "1.0.0" 1367 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1368 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 1369 | 1370 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1371 | version "3.0.2" 1372 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1373 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1374 | 1375 | source-map-support@^0.5.6: 1376 | version "0.5.9" 1377 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" 1378 | integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== 1379 | dependencies: 1380 | buffer-from "^1.0.0" 1381 | source-map "^0.6.0" 1382 | 1383 | source-map@^0.5.0: 1384 | version "0.5.7" 1385 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1386 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1387 | 1388 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 1389 | version "0.6.1" 1390 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1391 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1392 | 1393 | spawn-wrap@^1.4.2: 1394 | version "1.4.2" 1395 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" 1396 | integrity sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg== 1397 | dependencies: 1398 | foreground-child "^1.5.6" 1399 | mkdirp "^0.5.0" 1400 | os-homedir "^1.0.1" 1401 | rimraf "^2.6.2" 1402 | signal-exit "^3.0.2" 1403 | which "^1.3.0" 1404 | 1405 | spdx-correct@^3.0.0: 1406 | version "3.0.2" 1407 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" 1408 | integrity sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ== 1409 | dependencies: 1410 | spdx-expression-parse "^3.0.0" 1411 | spdx-license-ids "^3.0.0" 1412 | 1413 | spdx-exceptions@^2.1.0: 1414 | version "2.2.0" 1415 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 1416 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 1417 | 1418 | spdx-expression-parse@^3.0.0: 1419 | version "3.0.0" 1420 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 1421 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 1422 | dependencies: 1423 | spdx-exceptions "^2.1.0" 1424 | spdx-license-ids "^3.0.0" 1425 | 1426 | spdx-license-ids@^3.0.0: 1427 | version "3.0.2" 1428 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" 1429 | integrity sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg== 1430 | 1431 | sprintf-js@~1.0.2: 1432 | version "1.0.3" 1433 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1434 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1435 | 1436 | string-width@^1.0.1: 1437 | version "1.0.2" 1438 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1439 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1440 | dependencies: 1441 | code-point-at "^1.0.0" 1442 | is-fullwidth-code-point "^1.0.0" 1443 | strip-ansi "^3.0.0" 1444 | 1445 | string-width@^2.0.0, string-width@^2.1.1: 1446 | version "2.1.1" 1447 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1448 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1449 | dependencies: 1450 | is-fullwidth-code-point "^2.0.0" 1451 | strip-ansi "^4.0.0" 1452 | 1453 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1454 | version "3.0.1" 1455 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1456 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1457 | dependencies: 1458 | ansi-regex "^2.0.0" 1459 | 1460 | strip-ansi@^4.0.0: 1461 | version "4.0.0" 1462 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1463 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1464 | dependencies: 1465 | ansi-regex "^3.0.0" 1466 | 1467 | strip-bom@^3.0.0: 1468 | version "3.0.0" 1469 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1470 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1471 | 1472 | strip-eof@^1.0.0: 1473 | version "1.0.0" 1474 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1475 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 1476 | 1477 | supports-color@5.4.0: 1478 | version "5.4.0" 1479 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" 1480 | integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== 1481 | dependencies: 1482 | has-flag "^3.0.0" 1483 | 1484 | supports-color@^2.0.0: 1485 | version "2.0.0" 1486 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1487 | integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= 1488 | 1489 | supports-color@^5.3.0, supports-color@^5.4.0: 1490 | version "5.5.0" 1491 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1492 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1493 | dependencies: 1494 | has-flag "^3.0.0" 1495 | 1496 | test-exclude@^5.0.0: 1497 | version "5.0.0" 1498 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.0.0.tgz#cdce7cece785e0e829cd5c2b27baf18bc583cfb7" 1499 | integrity sha512-bO3Lj5+qFa9YLfYW2ZcXMOV1pmQvw+KS/DpjqhyX6Y6UZ8zstpZJ+mA2ERkXfpOqhxsJlQiLeVXD3Smsrs6oLw== 1500 | dependencies: 1501 | arrify "^1.0.1" 1502 | minimatch "^3.0.4" 1503 | read-pkg-up "^4.0.0" 1504 | require-main-filename "^1.0.1" 1505 | 1506 | through@^2.3.6: 1507 | version "2.3.8" 1508 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1509 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1510 | 1511 | tmp@^0.0.33: 1512 | version "0.0.33" 1513 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1514 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 1515 | dependencies: 1516 | os-tmpdir "~1.0.2" 1517 | 1518 | to-fast-properties@^2.0.0: 1519 | version "2.0.0" 1520 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1521 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1522 | 1523 | trim-right@^1.0.1: 1524 | version "1.0.1" 1525 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1526 | integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= 1527 | 1528 | ts-node@^7.0.1: 1529 | version "7.0.1" 1530 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1531 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1532 | dependencies: 1533 | arrify "^1.0.0" 1534 | buffer-from "^1.1.0" 1535 | diff "^3.1.0" 1536 | make-error "^1.1.1" 1537 | minimist "^1.2.0" 1538 | mkdirp "^0.5.1" 1539 | source-map-support "^0.5.6" 1540 | yn "^2.0.0" 1541 | 1542 | tslib@^1.8.0, tslib@^1.8.1: 1543 | version "1.9.3" 1544 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 1545 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== 1546 | 1547 | tslint@^5.11.0: 1548 | version "5.11.0" 1549 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" 1550 | integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0= 1551 | dependencies: 1552 | babel-code-frame "^6.22.0" 1553 | builtin-modules "^1.1.1" 1554 | chalk "^2.3.0" 1555 | commander "^2.12.1" 1556 | diff "^3.2.0" 1557 | glob "^7.1.1" 1558 | js-yaml "^3.7.0" 1559 | minimatch "^3.0.4" 1560 | resolve "^1.3.2" 1561 | semver "^5.3.0" 1562 | tslib "^1.8.0" 1563 | tsutils "^2.27.2" 1564 | 1565 | tsutils@^2.27.2: 1566 | version "2.29.0" 1567 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 1568 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 1569 | dependencies: 1570 | tslib "^1.8.1" 1571 | 1572 | type-detect@^4.0.0, type-detect@^4.0.5: 1573 | version "4.0.8" 1574 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1575 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1576 | 1577 | typescript@^3.1.6: 1578 | version "3.1.6" 1579 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68" 1580 | integrity sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA== 1581 | 1582 | uglify-js@^3.1.4: 1583 | version "3.4.9" 1584 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" 1585 | integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== 1586 | dependencies: 1587 | commander "~2.17.1" 1588 | source-map "~0.6.1" 1589 | 1590 | uuid@^3.1.0, uuid@^3.3.2: 1591 | version "3.3.2" 1592 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 1593 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 1594 | 1595 | validate-npm-package-license@^3.0.1: 1596 | version "3.0.4" 1597 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 1598 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 1599 | dependencies: 1600 | spdx-correct "^3.0.0" 1601 | spdx-expression-parse "^3.0.0" 1602 | 1603 | which-module@^2.0.0: 1604 | version "2.0.0" 1605 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1606 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1607 | 1608 | which@^1.2.9, which@^1.3.0: 1609 | version "1.3.1" 1610 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1611 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1612 | dependencies: 1613 | isexe "^2.0.0" 1614 | 1615 | wordwrap@~0.0.2: 1616 | version "0.0.3" 1617 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1618 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 1619 | 1620 | wrap-ansi@^2.0.0: 1621 | version "2.1.0" 1622 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 1623 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 1624 | dependencies: 1625 | string-width "^1.0.1" 1626 | strip-ansi "^3.0.1" 1627 | 1628 | wrappy@1: 1629 | version "1.0.2" 1630 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1631 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1632 | 1633 | write-file-atomic@^2.0.0: 1634 | version "2.3.0" 1635 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" 1636 | integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== 1637 | dependencies: 1638 | graceful-fs "^4.1.11" 1639 | imurmurhash "^0.1.4" 1640 | signal-exit "^3.0.2" 1641 | 1642 | y18n@^3.2.1: 1643 | version "3.2.1" 1644 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 1645 | integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= 1646 | 1647 | yallist@^2.1.2: 1648 | version "2.1.2" 1649 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1650 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1651 | 1652 | yargs-parser@^9.0.2: 1653 | version "9.0.2" 1654 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" 1655 | integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= 1656 | dependencies: 1657 | camelcase "^4.1.0" 1658 | 1659 | yargs@11.1.0: 1660 | version "11.1.0" 1661 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" 1662 | integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== 1663 | dependencies: 1664 | cliui "^4.0.0" 1665 | decamelize "^1.1.1" 1666 | find-up "^2.1.0" 1667 | get-caller-file "^1.0.1" 1668 | os-locale "^2.0.0" 1669 | require-directory "^2.1.1" 1670 | require-main-filename "^1.0.1" 1671 | set-blocking "^2.0.0" 1672 | string-width "^2.0.0" 1673 | which-module "^2.0.0" 1674 | y18n "^3.2.1" 1675 | yargs-parser "^9.0.2" 1676 | 1677 | yn@^2.0.0: 1678 | version "2.0.0" 1679 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1680 | integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= 1681 | 1682 | zen-observable-ts@^0.8.10: 1683 | version "0.8.10" 1684 | resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.10.tgz#18e2ce1c89fe026e9621fd83cc05168228fce829" 1685 | integrity sha512-5vqMtRggU/2GhePC9OU4sYEWOdvmayp2k3gjPf4F0mXwB3CSbbNznfDUvDJx9O2ZTa1EIXdJhPchQveFKwNXPQ== 1686 | dependencies: 1687 | zen-observable "^0.8.0" 1688 | 1689 | zen-observable@^0.8.0: 1690 | version "0.8.11" 1691 | resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.11.tgz#d3415885eeeb42ee5abb9821c95bb518fcd6d199" 1692 | integrity sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ== 1693 | --------------------------------------------------------------------------------