├── .env.dist ├── .gitignore ├── .prettierrc ├── .travis.yml ├── LICENSE ├── README.md ├── package.json ├── src ├── __tests__ │ ├── __stubs__ │ │ └── config │ │ │ └── braintree.ts │ ├── braintree.controller.spec.ts │ ├── braintree.module.spec.ts │ ├── braintree.provider.spec.ts │ ├── braintree.subscription.spec.ts │ ├── braintree.transactions.spec.ts │ ├── braintree.webhook.controller.options.spec.ts │ ├── braintree.webhook.provider.spec.ts │ ├── e2e │ │ └── braintree.controller.e2e-spec.ts │ └── webhooks.spec.ts ├── braintree.constants.ts ├── braintree.core.module.ts ├── braintree.module.ts ├── braintree.provider.ts ├── braintree.webhook.controller.ts ├── braintree.webhook.module.ts ├── braintree.webhook.provider.ts ├── decorators │ ├── braintree.webhook.handler.ts │ ├── index.ts │ ├── inject.braintree.provider.ts │ └── webhooks │ │ ├── braintree.webhook.method.decorator.ts │ │ ├── index.ts │ │ └── subscriptions.ts ├── index.ts └── interfaces │ ├── braintree.options.interface.ts │ ├── braintree.transaction.interface.ts │ ├── braintree.webhook.methods.interface.ts │ ├── braintree.webhook.notification.interface.ts │ ├── braintree.webhook.options.interface.ts │ ├── braintree.webhook.payload.interface.ts │ └── index.ts ├── tsconfig.json └── yarn.lock /.env.dist: -------------------------------------------------------------------------------- 1 | BRAINTREE_MERCHANT_ID=merchantId 2 | BRAINTREE_PUBLIC_KEY=publicKey 3 | BRAINTREE_PRIVATE_KEY=privateKey -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | coverage 4 | .env -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "printWidth": 80, 4 | "proseWrap": "always", 5 | "tabWidth": 2, 6 | "useTabs": false, 7 | "trailingComma": "all", 8 | "bracketSpacing": true, 9 | "jsxBracketSameLine": false, 10 | "semi": true 11 | } 12 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "8" 4 | - "10" 5 | - "node" 6 | git: 7 | depth: 5 8 | addons: 9 | firefox: "latest" 10 | before_install: 11 | - npm i -g npm@latest 12 | - npm i -g yarn 13 | install: 14 | - yarn 15 | script: 16 | - yarn run test 17 | after_success: yarn run coveralls 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nestjs Community 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |

3 | 4 | 5 | 6 | Coverage Status 7 |

8 |

Nestjs Braintree

9 | 10 |

A module for Braintree reoccurring payments and transactions built for the Nestjs framework.

11 |
12 |

Using the Braintree node SDK.

13 | 14 | > NOTE! Currently building 15 | 16 | ## Install 17 | 18 | ```bash 19 | $ yarn add nestjs-braintree 20 | ``` 21 | 22 | ## Use 23 | 24 | ### Basic use 25 | 26 | ```typescript 27 | import { Module } from '@nestjs/common'; 28 | import { BraintreeModule } from 'nestjs-braintree'; 29 | import * as braintree from 'braintree'; 30 | 31 | @Module({ 32 | imports: [ 33 | BraintreeModule.forRoot({ 34 | environment: braintree.Environment.Sandbox, 35 | merchantId: '', 36 | publicKey: '', 37 | privateKey: '', 38 | }), 39 | ], 40 | }) 41 | export default class AppModule {} 42 | ``` 43 | 44 | ### In a subModule 45 | ```typescript 46 | import { Module } from '@nestjs/common'; 47 | import { BraintreeModule } from 'nestjs-braintree'; 48 | 49 | @Module({ 50 | imports: [ 51 | BraintreeModule.forFeature(), 52 | ], 53 | }) 54 | export default class SubModule {} 55 | ``` 56 | 57 | ### Use with nestjs-config 58 | 59 | ```typescript 60 | import { Module } from '@nestjs/common'; 61 | import { BraintreeModule } from 'nestjs-braintree'; 62 | import { ConfigModule, ConfigService } from 'nestjs-config'; 63 | 64 | @Module({ 65 | imports: [ 66 | ConfigModule.load('root/to/config/*/**.{ts,js}'), 67 | BraintreeModule.forRootAsync({ 68 | useFactory: async (config: ConfigService) => config.get('braintree'), 69 | inject: [ConfigService], 70 | }), 71 | ], 72 | }) 73 | export default class AppModule {} 74 | 75 | //config/braintree.ts 76 | import * as braintree from 'braintree'; 77 | 78 | export default { 79 | environment: 80 | process.env.NODE_ENV == 'development' 81 | ? braintree.Environment.Sandbox 82 | : braintree.Environment.Live, 83 | merchantId: process.env.BRAINTREE_MERCHANT_ID, 84 | publicKey: process.env.BRAINTREE_PUBLIC_KEY, 85 | privateKey: process.env.BRAINTREE_PRIVATE_KEY, 86 | }; 87 | ``` 88 | 89 | ## Transactions 90 | 91 | Braintree is capable of making one off transactions 92 | 93 | ```typescript 94 | import { Module } from '@nestjs/common'; 95 | import { BraintreeModule, InjectBraintreeProvider } from 'nestjs-braintree'; 96 | import { ConfigModule, ConfigService } from 'nestjs-config'; 97 | 98 | class TransactionProvider { 99 | constructor( 100 | @InjectBraintreeProvider() 101 | private readonly braintreeProvider: BraintreeProvider, 102 | ) {} 103 | 104 | takePayment(amount: string, nonce: string) { 105 | this.braintreeProvider.sale({ 106 | payment_method_nonce: nonce, 107 | amount, 108 | }); 109 | } 110 | } 111 | 112 | @Module({ 113 | imports: [ 114 | ConfigModule.load('root/to/config/*/**.{ts,js}'), 115 | BraintreeModule.forRoot({ 116 | useFactory: async (config: ConfigService) => config.get('braintree'), 117 | inject: [ConfigService], 118 | }), 119 | ], 120 | providers: [TransactionProvider], 121 | }) 122 | export default class AppModule {} 123 | ``` 124 | 125 | Available methods relating to transactions are 126 | 127 | #### Sale 128 | `braintreeProvider.sale(transaction: BraintreeTransactionInterface): Promise` 129 | 130 | #### Refund 131 | `braintreeProvider.refund(transactionId: string, amount?: string, orderId?: string): Promise` 132 | 133 | #### Find 134 | `braintreeProvider.find(transactionId: string): Promise` 135 | 136 | > The braintree SDK does offer additional methods. I will implement them soon hopefully 137 | 138 | ## Webhooks 139 | 140 | When using subscriptions with braintree, braintree will issue webhooks to your 141 | endpoint which you can use the decorators to handle those actions. 142 | 143 | ```typescript 144 | import { Module } from '@nestjs/common'; 145 | import { 146 | BraintreeModule, 147 | BraintreeWebhookModule, 148 | BraintreeSubscriptionCanceled, 149 | BraintreeSubscriptionExpired, 150 | BraintreeWebhookHandler, 151 | } from 'nestjs-braintree'; 152 | import { ConfigModule, ConfigService } from 'nestjs-config'; 153 | 154 | @BraintreeWebhookHandler() 155 | class SubscriptionProvider { 156 | @BraintreeSubscriptionCanceled() 157 | canceled() { 158 | console.log('subscription canceled'); 159 | } 160 | 161 | @BraintreeSubscriptionExpired() 162 | expired() { 163 | console.log('subscription expired'); 164 | } 165 | } 166 | 167 | @Module({ 168 | imports: [ 169 | ConfigModule.load('root/to/config/*/**.{ts,js}'), 170 | BraintreeModule.forRootAsync({ 171 | useFactory: async (config: ConfigService) => config.get('braintree'), 172 | inject: [ConfigService], 173 | }), 174 | BraintreeWebhookModule, 175 | ], 176 | providers: [SubscriptionProvider], 177 | }) 178 | export default class AppModule {} 179 | ``` 180 | 181 | ### Use Example 182 | The idea of the Braintree Webhook Module is to make implementation of actions a lot easier. For example we can build a provider like this one to cancel canceled subscriptions. 183 | 184 | ```ts 185 | @BraintreeWebhookHandler() 186 | export class SubscriptionProvider { 187 | constructor(@InjectRepository(Subscription) private readonly subscriptionRepository: Repository) {} 188 | 189 | async findByBraintreeId(braintreeId: string): Promise { 190 | return await this.subscriptionRepository.find({ 191 | where: { 192 | braintreeId, 193 | }, 194 | }); 195 | } 196 | 197 | async update(subscription: Subscription): Promise { 198 | return await this.subscriptionRepository.update(subscription); 199 | } 200 | 201 | @BraintreeSubscriptionCanceled() 202 | async canceled(webhook: BraintreeWebhook) { 203 | const subscription = await this.findByBraintreeId(webhook.subscription.id); 204 | if (!subscription) { 205 | return; 206 | } 207 | subscription.active = false; 208 | await this.update(subscription); 209 | } 210 | } 211 | ``` 212 | 213 | ### Available webhooks 214 | 215 | Shortname | Braintree webhook name/const/key | NestJS decorator 216 | --- | --- | --- 217 | Subscription Canceled | `subscription_canceled` | `@BraintreeSubscriptionCanceled()` 218 | Subscription Expired | `subscription_expired` | `@BraintreeSubscriptionExpired()` 219 | Subscription Charged Successfully | `subscription_charged_successfully` | `@BraintreeSubscriptionChargedSuccessfully()` 220 | Subscription Charged Unsuccessfully | `subscription_charged_unsuccessfully` | `@BraintreeSubscriptionChargedUnsuccessfully()` 221 | Subscription Went Active | `subscription_went_active` | `@BraintreeSubscriptionWentActive()` 222 | Subscription Went Past Due | `subscription_went_past_due` | `@BraintreeSubscriptionWentPastDue()` 223 | Subscription Trial Ended | `subscription_trial_ended` | `@BraintreeSubscriptionTrialEnded()` 224 | 225 | You can find out more about the webhooks [here](https://developers.braintreepayments.com/reference/general/webhooks/overview). 226 | 227 | #### Custom routing for webhooks 228 | You may want to divert from the default routing of `{your_domain}/braintree/webhook` for whatever reason. You can do so using the `forRoot` method on the `BraintreeWebhookModule` like so 229 | 230 | ```ts 231 | @Module({ 232 | imports: [ 233 | ConfigModule.load('root/to/config/*/**.{ts,js}'), 234 | BraintreeModule.forRootAsync({ 235 | useFactory: async (config: ConfigService) => config.get('braintree'), 236 | inject: [ConfigService], 237 | }), 238 | BraintreeWebhookModule.forRoot({ 239 | root: 'replace-braintree', 240 | handle: 'replace-webhook', 241 | }), 242 | ], 243 | providers: [SubscriptionProvider], 244 | }) 245 | export default class AppModule {} 246 | ``` 247 | 248 | The above will result in your route for your braintree webhooks being `{your_domain}/replace-braintree/replace-webhook` 249 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nestjs-braintree", 3 | "version": "0.0.2", 4 | "description": "Nestjs braintree module", 5 | "main": "dist/index.js", 6 | "repository": "git@github.com:nestjs-community/nestjs-braintree.git", 7 | "author": "ashleigh ", 8 | "license": "MIT", 9 | "keywords": [ 10 | "nestjs", 11 | "braintree", 12 | "payments", 13 | "subscriptions", 14 | "webhook", 15 | "gatway" 16 | ], 17 | "devDependencies": { 18 | "@nestjs/common": "^5.2.2", 19 | "@nestjs/core": "^5.2.2", 20 | "@nestjs/testing": "^5.2.2", 21 | "@types/jest": "^23.3.1", 22 | "@types/node": "^12.7.9", 23 | "coveralls": "^3.0.2", 24 | "jest": "^24.9.0", 25 | "nestjs-config": "^1.2.2", 26 | "prettier": "^1.14.2", 27 | "supertest": "^3.3.0", 28 | "ts-jest": "^23.1.4", 29 | "typescript": "^3.0.3" 30 | }, 31 | "dependencies": { 32 | "braintree": "^2.12.0", 33 | "reflect-metadata": "^0.1.12" 34 | }, 35 | "scripts": { 36 | "test": "jest", 37 | "coverage": "jest --coverage", 38 | "coveralls": "yarn run coverage --coverageReporters=text-lcov | coveralls", 39 | "test:watch": "jest --watch", 40 | "build": "rm -rf ./dist && tsc", 41 | "format": "prettier **/**/*.ts --ignore-path ./.prettierignore --write && git status", 42 | "prepublish": "npm run format && npm run build" 43 | }, 44 | "jest": { 45 | "moduleFileExtensions": [ 46 | "js", 47 | "json", 48 | "ts" 49 | ], 50 | "rootDir": "src", 51 | "testRegex": ".spec.ts$", 52 | "transform": { 53 | "^.+\\.(t|j)s$": "ts-jest" 54 | }, 55 | "coverageDirectory": "./coverage" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/__tests__/__stubs__/config/braintree.ts: -------------------------------------------------------------------------------- 1 | import * as braintree from 'braintree'; 2 | 3 | export default { 4 | environment: braintree.Environment.Sandbox, 5 | merchantId: process.env.BRAINTREE_MERCHANT_ID, 6 | publicKey: process.env.BRAINTREE_PUBLIC_KEY, 7 | privateKey: process.env.BRAINTREE_PRIVATE_KEY, 8 | } -------------------------------------------------------------------------------- /src/__tests__/braintree.controller.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import * as path from 'path'; 3 | import { ConfigModule, ConfigService } from 'nestjs-config'; 4 | import { 5 | BraintreeModule, 6 | BraintreeWebhookController, 7 | BraintreeWebhookModule, 8 | BraintreeSubscriptionCanceled, 9 | BraintreeSubscriptionExpired, 10 | } from './..'; 11 | import BraintreeProvider from '../braintree.provider'; 12 | import BraintreeWebhookProvider from '../braintree.webhook.provider'; 13 | 14 | class SubscriptionProvider { 15 | @BraintreeSubscriptionCanceled() 16 | canceled() {} 17 | 18 | @BraintreeSubscriptionExpired() 19 | expired() {} 20 | } 21 | 22 | describe('BraintreeWebhookController', async () => { 23 | let module: TestingModule; 24 | 25 | beforeEach(async () => { 26 | module = await Test.createTestingModule({ 27 | imports: [ 28 | ConfigModule.load( 29 | path.resolve(__dirname, '__stubs__', 'config', '*.ts'), 30 | ), 31 | BraintreeModule.forRootAsync({ 32 | useFactory: async config => config.get('braintree'), 33 | inject: [ConfigService], 34 | }), 35 | BraintreeWebhookModule, 36 | ], 37 | providers: [SubscriptionProvider], 38 | }).compile(); 39 | }); 40 | 41 | it('Webhook controller must instance', () => { 42 | const controller = module.get( 43 | BraintreeWebhookController, 44 | ); 45 | 46 | expect(controller).toBeInstanceOf(BraintreeWebhookController); 47 | }); 48 | 49 | it('webhookmodule should instance subscription provider', () => { 50 | const provider = module.get(SubscriptionProvider); 51 | 52 | expect(provider).toBeInstanceOf(SubscriptionProvider); 53 | }); 54 | 55 | it('wehook controller instances', () => { 56 | const braintreeWebhookController = module.get( 57 | BraintreeWebhookController, 58 | ); 59 | 60 | expect(braintreeWebhookController.braintree).toBeInstanceOf( 61 | BraintreeProvider, 62 | ); 63 | expect(braintreeWebhookController.webhookProvider).toBeInstanceOf( 64 | BraintreeWebhookProvider, 65 | ); 66 | }); 67 | }); 68 | -------------------------------------------------------------------------------- /src/__tests__/braintree.module.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import * as braintree from 'braintree'; 3 | import { ConfigService, ConfigModule } from 'nestjs-config'; 4 | import * as path from 'path'; 5 | import { 6 | BraintreeModule, 7 | BRAINTREE_OPTIONS_PROVIDER, 8 | BraintreeProvider, 9 | InjectBraintreeProvider, 10 | } from '..'; 11 | import { Injectable, Module } from '@nestjs/common'; 12 | 13 | describe('Braintree Module', () => { 14 | it('Does it instance with options using registry', async () => { 15 | const module = await Test.createTestingModule({ 16 | imports: [ 17 | BraintreeModule.forRoot({ 18 | environment: braintree.Environment.Sandbox, 19 | merchantId: 'merchantId', 20 | publicKey: 'publicKey', 21 | privateKey: 'privateKey', 22 | }), 23 | ], 24 | }).compile(); 25 | 26 | const options = module.get(BRAINTREE_OPTIONS_PROVIDER); 27 | const provider = module.get(BraintreeProvider); 28 | 29 | expect(options.environment).toBe(braintree.Environment.Sandbox); 30 | expect(options.merchantId).toBe('merchantId'); 31 | expect(options.publicKey).toBe('publicKey'); 32 | expect(options.privateKey).toBe('privateKey'); 33 | expect(provider).toBeInstanceOf(BraintreeProvider); 34 | }); 35 | 36 | it('Does it instance with options using async registry', async () => { 37 | const module = await Test.createTestingModule({ 38 | imports: [ 39 | ConfigModule.load( 40 | path.resolve(__dirname, '__stubs__', 'config', '*.ts'), 41 | ), 42 | BraintreeModule.forRootAsync({ 43 | useFactory: config => config.get('braintree'), 44 | inject: [ConfigService], 45 | }), 46 | ], 47 | }).compile(); 48 | 49 | const options = module.get(BRAINTREE_OPTIONS_PROVIDER); 50 | const provider = module.get(BraintreeProvider); 51 | 52 | expect(options.environment).toBe(braintree.Environment.Sandbox); 53 | expect(typeof options.merchantId).toBe('string'); 54 | expect(typeof options.publicKey).toBe('string'); 55 | expect(typeof options.privateKey).toBe('string'); 56 | expect(provider).toBeInstanceOf(BraintreeProvider); 57 | }); 58 | 59 | it('BraintreeProvider is avaliable to providers', async () => { 60 | class TestProvider { 61 | constructor( 62 | @InjectBraintreeProvider() 63 | private readonly braintreeProvider: BraintreeProvider, 64 | ) {} 65 | 66 | getProvider(): BraintreeProvider { 67 | return this.braintreeProvider; 68 | } 69 | } 70 | 71 | const module = await Test.createTestingModule({ 72 | imports: [ 73 | ConfigModule.load( 74 | path.resolve(__dirname, '__stubs__', 'config', '*.ts'), 75 | ), 76 | BraintreeModule.forRootAsync({ 77 | useFactory: config => config.get('braintree'), 78 | inject: [ConfigService], 79 | }), 80 | ], 81 | providers: [TestProvider], 82 | }).compile(); 83 | 84 | const provider = module.get(TestProvider); 85 | 86 | expect(provider.getProvider()).toBeInstanceOf(BraintreeProvider); 87 | }); 88 | it('BraintreeModule.forFeature', async () => { 89 | @Module({ 90 | imports: [BraintreeModule.forFeature()], 91 | }) 92 | class TestModule {} 93 | 94 | const module: TestingModule = await Test.createTestingModule({ 95 | imports: [ 96 | BraintreeModule.forRoot({ 97 | environment: braintree.Environment.Sandbox, 98 | merchantId: 'merchantId', 99 | publicKey: 'publicKey', 100 | privateKey: 'privateKey', 101 | }), 102 | TestModule, 103 | ], 104 | }).compile(); 105 | 106 | const testProvider = module.select(TestModule).get(BraintreeProvider); 107 | 108 | expect(testProvider).toBeInstanceOf(BraintreeProvider); 109 | }); 110 | }); 111 | -------------------------------------------------------------------------------- /src/__tests__/braintree.provider.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestingModule, Test } from '@nestjs/testing'; 2 | import { BraintreeModule, BraintreeProvider } from './..'; 3 | import * as braintree from 'braintree'; 4 | 5 | describe('BraintreeProvider', () => { 6 | let module: TestingModule; 7 | 8 | beforeEach(async () => { 9 | module = await Test.createTestingModule({ 10 | imports: [ 11 | BraintreeModule.forRoot({ 12 | environment: braintree.Environment.Sandbox, 13 | merchantId: 'merchantId', 14 | publicKey: 'publicKey', 15 | privateKey: 'privateKey', 16 | }), 17 | ], 18 | }).compile(); 19 | }); 20 | 21 | it('WebhookProvider shoud return BraintreeWebhookNotificationInterface with sample payload', async () => { 22 | const gateway = braintree.connect({ 23 | environment: braintree.Environment.Sandbox, 24 | merchantId: 'merchantId', 25 | publicKey: 'publicKey', 26 | privateKey: 'privateKey', 27 | }); 28 | const braintreeProvider = module.get(BraintreeProvider); 29 | 30 | const result = await braintreeProvider.parseWebhook( 31 | gateway.webhookTesting.sampleNotification( 32 | braintree.WebhookNotification.Kind.SubscriptionCanceled, 33 | ), 34 | ); 35 | 36 | expect(result).toHaveProperty('kind'); 37 | expect(result).toHaveProperty('subject'); 38 | expect(result).toHaveProperty('timestamp'); 39 | }); 40 | }); 41 | -------------------------------------------------------------------------------- /src/__tests__/braintree.subscription.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestingModule, Test } from '@nestjs/testing'; 2 | import { ConfigModule, ConfigService } from 'nestjs-config'; 3 | import * as path from 'path'; 4 | import { BraintreeModule, BraintreeProvider } from './../../src'; 5 | 6 | describe('Braintree subscription methods', () => { 7 | let module: TestingModule; 8 | let provider: BraintreeProvider; 9 | 10 | beforeEach(async () => { 11 | module = await Test.createTestingModule({ 12 | imports: [ 13 | ConfigModule.load( 14 | path.resolve(__dirname, '__stubs__', 'config', '*.ts'), 15 | ), 16 | BraintreeModule.forRootAsync({ 17 | useFactory: async config => config.get('braintree'), 18 | inject: [ConfigService], 19 | }), 20 | ], 21 | }).compile(); 22 | 23 | provider = module.get(BraintreeProvider); 24 | }); 25 | 26 | it('', () => {}); 27 | 28 | // it('Create Subscription', async () => { 29 | 30 | // //TODO implement paymentMethodToken somehow. Try this https://developers.braintreepayments.com/reference/request/payment-method/create/node 31 | 32 | // // const result = await provider.createSubscription({ 33 | // // paymentMethodToken: '', 34 | // // planId: 'c8vr', 35 | // // }); 36 | // }); 37 | }); 38 | -------------------------------------------------------------------------------- /src/__tests__/braintree.transactions.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestingModule, Test } from '@nestjs/testing'; 2 | import { ConfigModule, ConfigService } from 'nestjs-config'; 3 | import * as path from 'path'; 4 | import { BraintreeModule, BraintreeProvider } from './../../src'; 5 | 6 | const nonces = { 7 | valid: 'fake-valid-nonce', 8 | }; 9 | 10 | describe('Braintree transaction methods', () => { 11 | let module: TestingModule; 12 | let provider: BraintreeProvider; 13 | let transactionId: string; 14 | 15 | beforeEach(async () => { 16 | module = await Test.createTestingModule({ 17 | imports: [ 18 | ConfigModule.load( 19 | path.resolve(__dirname, '__stubs__', 'config', '*.ts'), 20 | ), 21 | BraintreeModule.forRootAsync({ 22 | useFactory: async config => config.get('braintree'), 23 | inject: [ConfigService], 24 | }), 25 | ], 26 | }).compile(); 27 | 28 | provider = module.get(BraintreeProvider); 29 | }); 30 | 31 | it('Create Transaction', async () => { 32 | const result = await provider.sale({ 33 | payment_method_nonce: nonces.valid, 34 | amount: '10.00', 35 | }); 36 | 37 | transactionId = result.transaction.id; 38 | 39 | expect(result.success).toBeTruthy(); 40 | expect(result).toHaveProperty('transaction'); 41 | expect(result.transaction).toHaveProperty('amount'); 42 | expect(result.transaction.amount).toEqual('10.00'); 43 | }); 44 | 45 | it('Find Transaction', async () => { 46 | const transaction = await provider.find(transactionId); 47 | 48 | expect(transaction).toHaveProperty('id'); 49 | expect(transaction).toHaveProperty('status'); 50 | expect(transaction).toHaveProperty('type'); 51 | expect(transaction).toHaveProperty('amount'); 52 | expect(transaction).toHaveProperty('createdAt'); 53 | expect(transaction).toHaveProperty('updatedAt'); 54 | }); 55 | 56 | //it('Refund Transaction', async () => { 57 | //const refundResult = await provider.refund(transactionId); 58 | 59 | //console.log('refund', refundResult); 60 | //}); 61 | }); 62 | -------------------------------------------------------------------------------- /src/__tests__/braintree.webhook.controller.options.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import BraintreeModule from '../braintree.module'; 3 | import BraintreeWebhookModule from '../braintree.webhook.module'; 4 | import * as braintree from 'braintree'; 5 | import { BraintreeWebhookController } from '..'; 6 | import { PATH_METADATA, METHOD_METADATA } from '@nestjs/common/constants'; 7 | import { RequestMethod } from '@nestjs/common'; 8 | 9 | describe('BraintreeWebhookController', () => { 10 | it('Should instance with default route', async () => { 11 | const module: TestingModule = await Test.createTestingModule({ 12 | imports: [ 13 | BraintreeModule.forRoot({ 14 | environment: braintree.Environment.Sandbox, 15 | merchantId: 'merchantId', 16 | publicKey: 'publicKey', 17 | privateKey: 'privateKey', 18 | }), 19 | BraintreeWebhookModule, 20 | ], 21 | }).compile(); 22 | const controller = module.get(BraintreeWebhookController); 23 | 24 | expect(controller).toBeInstanceOf(BraintreeWebhookController); 25 | expect(Reflect.getMetadata(PATH_METADATA, BraintreeWebhookController)).toBe( 26 | 'braintree', 27 | ); 28 | expect( 29 | Reflect.getMetadata( 30 | METHOD_METADATA, 31 | Object.getOwnPropertyDescriptor( 32 | BraintreeWebhookController.prototype, 33 | 'handle', 34 | ).value, 35 | ), 36 | ).toBe(RequestMethod.POST); 37 | expect( 38 | Reflect.getMetadata( 39 | PATH_METADATA, 40 | Object.getOwnPropertyDescriptor( 41 | BraintreeWebhookController.prototype, 42 | 'handle', 43 | ).value, 44 | ), 45 | ).toBe('webhook'); 46 | }); 47 | 48 | it('Should instance with forRoot', async () => { 49 | const module: TestingModule = await Test.createTestingModule({ 50 | imports: [ 51 | BraintreeModule.forRoot({ 52 | environment: braintree.Environment.Sandbox, 53 | merchantId: 'merchantId', 54 | publicKey: 'publicKey', 55 | privateKey: 'privateKey', 56 | }), 57 | BraintreeWebhookModule.forRoot({ 58 | root: 'testing', 59 | handle: 'this', 60 | }), 61 | ], 62 | }).compile(); 63 | const controller = module.get(BraintreeWebhookController); 64 | 65 | expect(controller).toBeInstanceOf(BraintreeWebhookController); 66 | expect(Reflect.getMetadata(PATH_METADATA, BraintreeWebhookController)).toBe( 67 | 'testing', 68 | ); 69 | expect( 70 | Reflect.getMetadata( 71 | METHOD_METADATA, 72 | Object.getOwnPropertyDescriptor( 73 | BraintreeWebhookController.prototype, 74 | 'handle', 75 | ).value, 76 | ), 77 | ).toBe(RequestMethod.POST); 78 | expect( 79 | Reflect.getMetadata( 80 | PATH_METADATA, 81 | Object.getOwnPropertyDescriptor( 82 | BraintreeWebhookController.prototype, 83 | 'handle', 84 | ).value, 85 | ), 86 | ).toBe('this'); 87 | }); 88 | }); 89 | -------------------------------------------------------------------------------- /src/__tests__/braintree.webhook.provider.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { 3 | BraintreeModule, 4 | BraintreeWebhookModule, 5 | BraintreeSubscriptionCanceled, 6 | BraintreeSubscriptionExpired, 7 | BraintreeProvider, 8 | BraintreeWebhookHandler, 9 | } from './..'; 10 | import * as braintree from 'braintree'; 11 | import BraintreeWebhookProvider from '../braintree.webhook.provider'; 12 | import { Injectable } from '@nestjs/common'; 13 | import { ModuleRef } from '@nestjs/core'; 14 | import { ModulesContainer } from '@nestjs/core/injector/modules-container'; 15 | 16 | describe('BraintreeWebhookController', async () => { 17 | it('Decorator methods should be called from WebhookProvider', async () => { 18 | @BraintreeWebhookHandler() 19 | class SubscriptionProvider { 20 | public static called = false; 21 | 22 | @BraintreeSubscriptionCanceled() 23 | canceled(webhook) { 24 | //this is a work around the jest spyon reflect issue 25 | SubscriptionProvider.called = true; 26 | } 27 | 28 | @BraintreeSubscriptionExpired() 29 | expired(webhook) {} 30 | } 31 | 32 | const module: TestingModule = await Test.createTestingModule({ 33 | imports: [ 34 | BraintreeModule.forRoot({ 35 | environment: braintree.Environment.Sandbox, 36 | merchantId: 'merchantId', 37 | publicKey: 'publicKey', 38 | privateKey: 'privateKey', 39 | }), 40 | BraintreeWebhookModule, 41 | ], 42 | providers: [SubscriptionProvider], 43 | }).compile(); 44 | 45 | const gateway = braintree.connect({ 46 | environment: braintree.Environment.Sandbox, 47 | merchantId: 'merchantId', 48 | publicKey: 'publicKey', 49 | privateKey: 'privateKey', 50 | }); 51 | 52 | const braintreeProvider = module.get(BraintreeProvider); 53 | const webhookProvider = module.get( 54 | BraintreeWebhookProvider, 55 | ); 56 | 57 | const webhookNotification = await braintreeProvider.parseWebhook( 58 | gateway.webhookTesting.sampleNotification( 59 | braintree.WebhookNotification.Kind.SubscriptionCanceled, 60 | ), 61 | ); 62 | 63 | webhookProvider.handle(webhookNotification); 64 | 65 | expect(SubscriptionProvider.called).toBeTruthy(); 66 | }); 67 | 68 | it('Make sure providers are still instanced with DI', async () => { 69 | @Injectable() 70 | class UselessProvider { 71 | public static called = false; 72 | callMe() { 73 | UselessProvider.called = true; 74 | } 75 | } 76 | 77 | @BraintreeWebhookHandler() 78 | class SubscriptionProvider { 79 | constructor(private readonly uselessProvider: UselessProvider) { 80 | this.uselessProvider = uselessProvider; 81 | } 82 | 83 | @BraintreeSubscriptionCanceled() 84 | canceled() { 85 | this.uselessProvider.callMe(); 86 | } 87 | } 88 | 89 | const module: TestingModule = await Test.createTestingModule({ 90 | imports: [ 91 | BraintreeModule.forRoot({ 92 | environment: braintree.Environment.Sandbox, 93 | merchantId: 'merchantId', 94 | publicKey: 'publicKey', 95 | privateKey: 'privateKey', 96 | }), 97 | BraintreeWebhookModule, 98 | ], 99 | providers: [UselessProvider, SubscriptionProvider], 100 | }).compile(); 101 | 102 | const gateway = braintree.connect({ 103 | environment: braintree.Environment.Sandbox, 104 | merchantId: 'merchantId', 105 | publicKey: 'publicKey', 106 | privateKey: 'privateKey', 107 | }); 108 | 109 | const braintreeProvider = module.get(BraintreeProvider); 110 | const webhookProvider = module.get( 111 | BraintreeWebhookProvider, 112 | ); 113 | 114 | const webhookNotification = await braintreeProvider.parseWebhook( 115 | gateway.webhookTesting.sampleNotification( 116 | braintree.WebhookNotification.Kind.SubscriptionCanceled, 117 | ), 118 | ); 119 | 120 | webhookProvider.handle(webhookNotification); 121 | 122 | expect(UselessProvider.called).toBeTruthy(); 123 | }); 124 | 125 | it('Instances', async () => { 126 | const module: TestingModule = await Test.createTestingModule({ 127 | imports: [ 128 | BraintreeModule.forRoot({ 129 | environment: braintree.Environment.Sandbox, 130 | merchantId: 'merchantId', 131 | publicKey: 'publicKey', 132 | privateKey: 'privateKey', 133 | }), 134 | BraintreeWebhookModule, 135 | ], 136 | }).compile(); 137 | 138 | const braintreeWebhookModule = module.get( 139 | BraintreeWebhookModule, 140 | ); 141 | 142 | expect(braintreeWebhookModule.moduleRef).toBeInstanceOf(ModuleRef); 143 | expect(braintreeWebhookModule.modulesContainer).toBeInstanceOf( 144 | ModulesContainer, 145 | ); 146 | expect(braintreeWebhookModule.braintreeWebhookProvider).toBeInstanceOf( 147 | BraintreeWebhookProvider, 148 | ); 149 | }); 150 | }); 151 | -------------------------------------------------------------------------------- /src/__tests__/e2e/braintree.controller.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { INestApplication } from "@nestjs/common"; 2 | import { TestingModule, Test } from "@nestjs/testing"; 3 | import { BraintreeWebhookModule } from "../.."; 4 | import { ConfigService, ConfigModule } from "nestjs-config"; 5 | import BraintreeModule from "../../braintree.module"; 6 | import * as path from 'path'; 7 | import * as request from 'supertest'; 8 | import * as braintree from 'braintree'; 9 | import { BraintreeWebhookHandler, BraintreeSubscriptionCanceled, BraintreeSubscriptionChargedSuccessfully } from "../../decorators"; 10 | 11 | describe('BraintreeWebhookController', async () => { 12 | let app: INestApplication; 13 | let module: TestingModule; 14 | 15 | const gateway = braintree.connect({ 16 | environment: braintree.Environment.Sandbox, 17 | merchantId: 'merchantId', 18 | publicKey: 'publicKey', 19 | privateKey: 'privateKey', 20 | }); 21 | 22 | beforeAll(async () => { 23 | 24 | @BraintreeWebhookHandler() 25 | class TestProvider { 26 | @BraintreeSubscriptionCanceled() 27 | canceled() { 28 | return true; 29 | } 30 | 31 | @BraintreeSubscriptionChargedSuccessfully() 32 | callMe() { 33 | throw new Error('hello I am errors'); 34 | } 35 | } 36 | 37 | module = await Test.createTestingModule({ 38 | imports: [ 39 | ConfigModule.load( 40 | path.resolve(__dirname, '../', '__stubs__', 'config', '*.ts'), 41 | ), 42 | BraintreeModule.forRoot({ 43 | environment: braintree.Environment.Sandbox, 44 | merchantId: 'merchantId', 45 | publicKey: 'publicKey', 46 | privateKey: 'privateKey', 47 | }), 48 | BraintreeWebhookModule, 49 | ], 50 | providers: [TestProvider], 51 | }).compile(); 52 | 53 | app = module.createNestApplication(); 54 | await app.init(); 55 | }); 56 | 57 | it('/braintree/webhook (POST) Canceled', async () => { 58 | const webhook = gateway.webhookTesting.sampleNotification( 59 | braintree.WebhookNotification.Kind.SubscriptionCanceled, 60 | ); 61 | 62 | return await request(app.getHttpServer()) 63 | .post('/braintree/webhook') 64 | .set('Content-Type', 'application/json') 65 | .send(webhook) 66 | .expect(201); 67 | }); 68 | 69 | afterAll(async () => { 70 | await app.close(); 71 | }); 72 | }); -------------------------------------------------------------------------------- /src/__tests__/webhooks.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test, TestingModule } from '@nestjs/testing'; 2 | import { BraintreeModule, BraintreeWebhookModule } from './../'; 3 | import * as braintree from 'braintree'; 4 | import { 5 | BraintreeWebhookHandler, 6 | BraintreeSubscriptionCanceled, 7 | BraintreeSubscriptionExpired, 8 | BraintreeSubscriptionChargedSuccessfully, 9 | BraintreeSubscriptionChargedUnSuccessfully, 10 | BraintreeSubscriptionTrialEnded, 11 | BraintreeSubscriptionWentPastDue, 12 | BraintreeSubscriptionWentActive, 13 | } from '../decorators'; 14 | import BraintreeProvider from '../braintree.provider'; 15 | import BraintreeWebhookProvider from '../braintree.webhook.provider'; 16 | 17 | describe('Braintree Webhooks', async () => { 18 | let module: TestingModule; 19 | 20 | @BraintreeWebhookHandler() 21 | class TestProvider { 22 | public static called = null; 23 | 24 | @BraintreeSubscriptionCanceled() 25 | canceled() { 26 | TestProvider.called = 'canceled'; 27 | } 28 | 29 | @BraintreeSubscriptionExpired() 30 | expired() { 31 | TestProvider.called = 'expired'; 32 | } 33 | 34 | @BraintreeSubscriptionChargedSuccessfully() 35 | chargedSuccessFully() { 36 | TestProvider.called = 'chargedSuccessfully'; 37 | } 38 | 39 | @BraintreeSubscriptionChargedUnSuccessfully() 40 | chargedUnsuccessfully() { 41 | TestProvider.called = 'chargedUnsuccessfully'; 42 | } 43 | 44 | @BraintreeSubscriptionTrialEnded() 45 | trialEnded() { 46 | TestProvider.called = 'trialEnded'; 47 | } 48 | 49 | @BraintreeSubscriptionWentPastDue() 50 | wentPastDue() { 51 | TestProvider.called = 'wentPastDue'; 52 | } 53 | 54 | @BraintreeSubscriptionWentActive() 55 | wentActive() { 56 | TestProvider.called = 'wentActive'; 57 | } 58 | } 59 | 60 | const gateway = braintree.connect({ 61 | environment: braintree.Environment.Sandbox, 62 | merchantId: 'merchantId', 63 | publicKey: 'publicKey', 64 | privateKey: 'privateKey', 65 | }); 66 | 67 | beforeEach(async () => { 68 | module = await Test.createTestingModule({ 69 | imports: [ 70 | BraintreeModule.forRoot({ 71 | environment: braintree.Environment.Sandbox, 72 | merchantId: 'merchantId', 73 | publicKey: 'publicKey', 74 | privateKey: 'privateKey', 75 | }), 76 | BraintreeWebhookModule, 77 | ], 78 | providers: [TestProvider], 79 | }).compile(); 80 | 81 | TestProvider.called = null; 82 | }); 83 | 84 | it('Canceled', async () => { 85 | const braintreeProvider = module.get(BraintreeProvider); 86 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 87 | 88 | const webhookNotification = await braintreeProvider.parseWebhook( 89 | gateway.webhookTesting.sampleNotification( 90 | braintree.WebhookNotification.Kind.SubscriptionCanceled, 91 | ), 92 | ); 93 | 94 | braintreeWebhookProvider.handle(webhookNotification); 95 | 96 | expect(TestProvider.called).toBe('canceled'); 97 | }); 98 | 99 | it('Expired', async () => { 100 | const braintreeProvider = module.get(BraintreeProvider); 101 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 102 | 103 | const webhookNotification = await braintreeProvider.parseWebhook( 104 | gateway.webhookTesting.sampleNotification( 105 | braintree.WebhookNotification.Kind.SubscriptionExpired, 106 | ), 107 | ); 108 | 109 | braintreeWebhookProvider.handle(webhookNotification); 110 | 111 | expect(TestProvider.called).toBe('expired'); 112 | }); 113 | 114 | it('ChargedSuccessfully', async () => { 115 | const braintreeProvider = module.get(BraintreeProvider); 116 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 117 | 118 | const webhookNotification = await braintreeProvider.parseWebhook( 119 | gateway.webhookTesting.sampleNotification( 120 | braintree.WebhookNotification.Kind.SubscriptionChargedSuccessfully, 121 | ), 122 | ); 123 | 124 | braintreeWebhookProvider.handle(webhookNotification); 125 | 126 | expect(TestProvider.called).toBe('chargedSuccessfully'); 127 | }); 128 | 129 | it('ChargedUnSuccessfully', async () => { 130 | const braintreeProvider = module.get(BraintreeProvider); 131 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 132 | 133 | const webhookNotification = await braintreeProvider.parseWebhook( 134 | gateway.webhookTesting.sampleNotification( 135 | braintree.WebhookNotification.Kind.SubscriptionChargedUnsuccessfully, 136 | ), 137 | ); 138 | 139 | braintreeWebhookProvider.handle(webhookNotification); 140 | 141 | expect(TestProvider.called).toBe('chargedUnsuccessfully'); 142 | }); 143 | 144 | it('TrialEnded', async () => { 145 | const braintreeProvider = module.get(BraintreeProvider); 146 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 147 | 148 | const webhookNotification = await braintreeProvider.parseWebhook( 149 | gateway.webhookTesting.sampleNotification( 150 | braintree.WebhookNotification.Kind.SubscriptionTrialEnded, 151 | ), 152 | ); 153 | 154 | braintreeWebhookProvider.handle(webhookNotification); 155 | 156 | expect(TestProvider.called).toBe('trialEnded'); 157 | }); 158 | 159 | it('wentPastDue', async () => { 160 | const braintreeProvider = module.get(BraintreeProvider); 161 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 162 | 163 | const webhookNotification = await braintreeProvider.parseWebhook( 164 | gateway.webhookTesting.sampleNotification( 165 | braintree.WebhookNotification.Kind.SubscriptionWentPastDue, 166 | ), 167 | ); 168 | 169 | braintreeWebhookProvider.handle(webhookNotification); 170 | 171 | expect(TestProvider.called).toBe('wentPastDue'); 172 | }); 173 | 174 | it('wentActive', async () => { 175 | const braintreeProvider = module.get(BraintreeProvider); 176 | const braintreeWebhookProvider = module.get(BraintreeWebhookProvider); 177 | 178 | const webhookNotification = await braintreeProvider.parseWebhook( 179 | gateway.webhookTesting.sampleNotification( 180 | braintree.WebhookNotification.Kind.SubscriptionWentActive, 181 | ), 182 | ); 183 | 184 | braintreeWebhookProvider.handle(webhookNotification); 185 | 186 | expect(TestProvider.called).toBe('wentActive'); 187 | }); 188 | }); 189 | -------------------------------------------------------------------------------- /src/braintree.constants.ts: -------------------------------------------------------------------------------- 1 | export const BRAINTREE_OPTIONS_PROVIDER = 'BRAINTREE_OPTIONS_PROVIDER'; 2 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_CANCELED = 'subscription_canceled'; 3 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_EXPIRED = 'subscription_expired'; 4 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_SUCCESSFULLY = 'subscription_charged_successfully'; 5 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_UNSUCCESSFULLY = 'subscription_charged_unsuccessfully'; 6 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_ACTIVE = 'subscription_went_active'; 7 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_TRIAL_ENDED = 'subscription_trial_ended'; 8 | export const BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_PAST_DUE = 'subscription_went_past_due'; 9 | export const BRAINTREE_WEBHOOK_METHOD = 'BRAINTREE_WEBHOOK_METHOD'; 10 | export const BRAINTREE_WEBHOOK_PROVIDER = 'BRAINTREE_WEBHOOK_PROVIDER'; -------------------------------------------------------------------------------- /src/braintree.core.module.ts: -------------------------------------------------------------------------------- 1 | import {Module, DynamicModule, Provider, Global} from '@nestjs/common'; 2 | import { BRAINTREE_OPTIONS_PROVIDER} from './braintree.constants'; 3 | import BraintreeProvider from './braintree.provider'; 4 | import { BraintreeOptions, BraintreeAsyncOptions } from './interfaces'; 5 | 6 | @Global() 7 | @Module({}) 8 | export default class BraintreeCoreModule { 9 | 10 | private static provider = { 11 | provide: BraintreeProvider, 12 | useFactory: (options: BraintreeOptions) => new BraintreeProvider(options), 13 | inject: [BRAINTREE_OPTIONS_PROVIDER], 14 | }; 15 | 16 | public static forRoot(options: BraintreeOptions): DynamicModule { 17 | return { 18 | module: BraintreeCoreModule, 19 | providers: [ 20 | { 21 | provide: BRAINTREE_OPTIONS_PROVIDER, 22 | useValue: options, 23 | }, 24 | this.provider, 25 | ], 26 | exports: [BraintreeProvider], 27 | }; 28 | } 29 | 30 | public static forRootAsync(options: BraintreeAsyncOptions): DynamicModule { 31 | return { 32 | module: BraintreeCoreModule, 33 | providers: [ 34 | this.createOptionsProvider(options), 35 | this.provider, 36 | ], 37 | exports: [BraintreeProvider], 38 | }; 39 | } 40 | 41 | private static createOptionsProvider(options: BraintreeAsyncOptions): Provider { 42 | return { 43 | provide: BRAINTREE_OPTIONS_PROVIDER, 44 | useFactory: options.useFactory, 45 | inject: options.inject || [], 46 | }; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/braintree.module.ts: -------------------------------------------------------------------------------- 1 | import {Module, DynamicModule} from '@nestjs/common'; 2 | import { BraintreeOptions, BraintreeAsyncOptions } from './interfaces'; 3 | import BraintreeCoreModule from './braintree.core.module'; 4 | 5 | @Module({ 6 | }) 7 | export default class BraintreeModule { 8 | 9 | public static forRoot(options: BraintreeOptions): DynamicModule { 10 | return { 11 | module: BraintreeModule, 12 | imports: [BraintreeCoreModule.forRoot(options)], 13 | }; 14 | } 15 | 16 | public static forRootAsync(options: BraintreeAsyncOptions): DynamicModule { 17 | return { 18 | module: BraintreeModule, 19 | imports: [BraintreeCoreModule.forRootAsync(options)], 20 | }; 21 | } 22 | 23 | public static forFeature(): DynamicModule { 24 | return { 25 | module: BraintreeModule, 26 | imports: [BraintreeCoreModule], 27 | }; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/braintree.provider.ts: -------------------------------------------------------------------------------- 1 | import {Injectable, Inject} from '@nestjs/common'; 2 | import { 3 | BraintreeOptions, 4 | BraintreeWebhookPayloadInterface, 5 | BraintreeWebhookNotificationInterface, 6 | BraintreeTransactionInterface, 7 | BraintreeTransactionResultInterface, 8 | BraintreeSubscriptionInterface, 9 | BraintreeSubscriptionResultInterface, 10 | } from './interfaces'; 11 | import * as braintree from 'braintree'; 12 | import { BRAINTREE_OPTIONS_PROVIDER } from './braintree.constants'; 13 | 14 | @Injectable() 15 | export default class BraintreeProvider { 16 | 17 | protected readonly gateway; 18 | 19 | constructor(@Inject(BRAINTREE_OPTIONS_PROVIDER) options: BraintreeOptions) { 20 | this.gateway = braintree.connect(options); 21 | } 22 | 23 | async parseWebhook(payload: BraintreeWebhookPayloadInterface): Promise { 24 | return await this.gateway.webhookNotification.parse(payload.bt_signature, payload.bt_payload); 25 | } 26 | 27 | async sale(transaction: BraintreeTransactionInterface): Promise { 28 | 29 | return await this.gateway.transaction.sale(transaction); 30 | } 31 | 32 | async refund(transactionId: string, amount?: string, orderId?: string): Promise { 33 | return await this.gateway.transaction.refund(transactionId, amount, orderId); 34 | } 35 | 36 | async find(transactionId: string): Promise { 37 | return await this.gateway.transaction.find(transactionId); 38 | } 39 | 40 | async createSubscription(subscription: BraintreeSubscriptionInterface): Promise { 41 | return await this.gateway.subscription.create(subscription); 42 | } 43 | 44 | async cancelSubscription(subscriptionId: string): Promise { 45 | return await this.gateway.subscription.cancel(subscriptionId); 46 | } 47 | 48 | async findSubscription(subscriptionId: string): Promise { 49 | return await this.gateway.subscription.find(subscriptionId); 50 | } 51 | 52 | async updateSubscription(subscriptionId: string, subscription: BraintreeSubscriptionInterface): Promise { 53 | return await this.gateway.subscription.update(subscriptionId, subscription); 54 | } 55 | 56 | // TODO implement confusing looking search plans 57 | // https://developers.braintreepayments.com/reference/request/subscription/search/node#search-results 58 | } -------------------------------------------------------------------------------- /src/braintree.webhook.controller.ts: -------------------------------------------------------------------------------- 1 | import {Controller, Req, Logger, HttpException, RequestMethod} from '@nestjs/common'; 2 | import BraintreeProvider from './braintree.provider'; 3 | import BraintreeWebhookProvider from './braintree.webhook.provider'; 4 | import { BraintreeWebhookNotificationInterface } from './interfaces'; 5 | import { PATH_METADATA, METHOD_METADATA } from '@nestjs/common/constants'; 6 | 7 | @Controller() 8 | export default class BraintreeWebhookController { 9 | 10 | constructor( 11 | private readonly braintree: BraintreeProvider, 12 | private readonly webhookProvider: BraintreeWebhookProvider, 13 | ) {} 14 | 15 | public static forRoot(root: string = 'braintree', handle: string = 'webhook') { 16 | Reflect.defineMetadata(PATH_METADATA, root, BraintreeWebhookController); 17 | Reflect.defineMetadata( 18 | METHOD_METADATA, 19 | RequestMethod.POST, 20 | Object.getOwnPropertyDescriptor(BraintreeWebhookController.prototype, 'handle').value, 21 | ); 22 | Reflect.defineMetadata( 23 | PATH_METADATA, 24 | handle, 25 | Object.getOwnPropertyDescriptor(BraintreeWebhookController.prototype, 'handle').value, 26 | ); 27 | return BraintreeWebhookController; 28 | } 29 | 30 | async handle(@Req() request) { 31 | let webhook: BraintreeWebhookNotificationInterface; 32 | try { 33 | webhook = await this.braintree.parseWebhook({ 34 | bt_signature: request.body.bt_signature, 35 | bt_payload: request.body.bt_payload, 36 | }); 37 | await this.webhookProvider.handle(webhook); 38 | } catch (e) { 39 | //TODO log something? see braintree for correct proceedure on signature failure 40 | Logger.warn('Failed to process webhook', this.constructor.name); 41 | throw new HttpException('Failed', 500); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /src/braintree.webhook.module.ts: -------------------------------------------------------------------------------- 1 | import {Module, OnModuleInit,} from '@nestjs/common'; 2 | import {ModuleRef} from '@nestjs/core'; 3 | import BraintreeWebhookController from './braintree.webhook.controller'; 4 | import BraintreeWebhookProvider from './braintree.webhook.provider'; 5 | import BraintreeModule from './braintree.module'; 6 | import { ModulesContainer } from '@nestjs/core/injector/modules-container'; 7 | import { metadata as NEST_METADATA_CONSTANTS } from '@nestjs/common/constants'; 8 | import { BRAINTREE_WEBHOOK_PROVIDER, BRAINTREE_WEBHOOK_METHOD } from './braintree.constants'; 9 | import { MetadataScanner } from '@nestjs/core/metadata-scanner'; 10 | import { Injectable, DynamicModule } from '@nestjs/common/interfaces'; 11 | import { BraintreeWebhookOptionsInterface } from './interfaces'; 12 | 13 | @Module({ 14 | imports: [BraintreeModule], 15 | providers: [BraintreeWebhookProvider], 16 | controllers: [BraintreeWebhookController.forRoot('braintree', 'webhook')], 17 | }) 18 | export default class BraintreeWebhookModule implements OnModuleInit { 19 | 20 | constructor( 21 | private readonly moduleRef: ModuleRef, 22 | private readonly modulesContainer: ModulesContainer, 23 | private readonly braintreeWebhookProvider: BraintreeWebhookProvider, 24 | ) { 25 | this.onModuleInit(); 26 | } 27 | 28 | onModuleInit() { 29 | [...this.modulesContainer.values()].forEach(({metatype}) => { 30 | const metadata = Reflect.getMetadata(NEST_METADATA_CONSTANTS.PROVIDERS, metatype) || []; 31 | const providers = [...metadata.filter(metatype => typeof metatype === 'function')]; 32 | providers.map(provider => { 33 | if (Reflect.getOwnMetadata(BRAINTREE_WEBHOOK_PROVIDER, provider)) { 34 | 35 | const realProvider = this.moduleRef.get(provider, {strict: false}); 36 | 37 | this.braintreeWebhookProvider.addProvider(realProvider); 38 | 39 | const metadataScanner = new MetadataScanner(); 40 | 41 | metadataScanner.scanFromPrototype(null, provider['prototype'], method => { 42 | const descriptor = Reflect.getOwnPropertyDescriptor( 43 | provider['prototype'], 44 | method, 45 | ); 46 | 47 | const hook = Reflect.getMetadata(BRAINTREE_WEBHOOK_METHOD, descriptor.value); 48 | 49 | if (hook) { 50 | this.braintreeWebhookProvider.addMethod(hook, method, realProvider.constructor.name); 51 | } 52 | }); 53 | 54 | } 55 | }); 56 | }); 57 | } 58 | 59 | public static forRoot(webhookOptions: BraintreeWebhookOptionsInterface): DynamicModule { 60 | return { 61 | module: BraintreeWebhookModule, 62 | imports: [BraintreeModule], 63 | providers: [BraintreeWebhookProvider], 64 | controllers: [BraintreeWebhookController.forRoot(webhookOptions.root, webhookOptions.handle)], 65 | }; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/braintree.webhook.provider.ts: -------------------------------------------------------------------------------- 1 | import {Injectable, Provider, Logger, HttpException} from '@nestjs/common'; 2 | import { 3 | BraintreeWebhookNotificationInterface, 4 | BraintreeWebhookMethodInterface, 5 | BraintreeWebhookMethodTreeInterface, 6 | } from './interfaces'; 7 | import { 8 | BRAINTREE_WEBHOOK_SUBSCRIPTION_CANCELED, 9 | BRAINTREE_WEBHOOK_SUBSCRIPTION_EXPIRED, 10 | BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_SUCCESSFULLY, 11 | BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_UNSUCCESSFULLY, 12 | BRAINTREE_WEBHOOK_SUBSCRIPTION_TRIAL_ENDED, 13 | BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_ACTIVE, 14 | BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_PAST_DUE, 15 | } from './braintree.constants'; 16 | 17 | @Injectable() 18 | export default class BraintreeWebhookProvider { 19 | 20 | private providers: {[k: string]: Provider} = {}; 21 | private methods: BraintreeWebhookMethodTreeInterface = { 22 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_CANCELED]: [], 23 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_EXPIRED]: [], 24 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_SUCCESSFULLY]: [], 25 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_UNSUCCESSFULLY]: [], 26 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_TRIAL_ENDED]: [], 27 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_ACTIVE]: [], 28 | [BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_PAST_DUE]: [], 29 | }; 30 | 31 | async handle(webhook: BraintreeWebhookNotificationInterface): Promise { 32 | if (Object.keys(this.methods).includes(webhook.kind)) { 33 | this.methods[webhook.kind].forEach(async (methodProto: BraintreeWebhookMethodInterface) => { 34 | try { 35 | await this.providers[methodProto.provider][methodProto.method](webhook); 36 | } catch(e) { 37 | Logger.error(`There was an error calling ${methodProto.method} from ${methodProto.provider}`, e.stack, 'BraintreeWebhookProvider'); 38 | throw HttpException; 39 | } 40 | }); 41 | } 42 | } 43 | 44 | addProvider(provider: Provider) { 45 | this.providers[provider.constructor.name] = provider; 46 | Logger.log(`Added provider [${provider.constructor.name}]`, 'BraintreeWebhookProvider'); 47 | } 48 | 49 | addMethod(hook: string, method: string, provider: string) { 50 | this.methods[hook] = [ 51 | ...this.methods[hook], 52 | { 53 | provider, 54 | method, 55 | }, 56 | ]; 57 | Logger.log(`Added method [${method}]`, 'BraintreeWebhookProvider'); 58 | } 59 | } -------------------------------------------------------------------------------- /src/decorators/braintree.webhook.handler.ts: -------------------------------------------------------------------------------- 1 | import { BRAINTREE_WEBHOOK_PROVIDER } from './../braintree.constants'; 2 | 3 | export const BraintreeWebhookHandler = (): ClassDecorator => { 4 | return target => { 5 | Reflect.defineMetadata(BRAINTREE_WEBHOOK_PROVIDER, true, target); 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /src/decorators/index.ts: -------------------------------------------------------------------------------- 1 | import InjectBraintreeProvider from './inject.braintree.provider'; 2 | 3 | export { InjectBraintreeProvider }; 4 | 5 | export * from './braintree.webhook.handler'; 6 | export * from './webhooks'; 7 | -------------------------------------------------------------------------------- /src/decorators/inject.braintree.provider.ts: -------------------------------------------------------------------------------- 1 | import { Inject } from '@nestjs/common'; 2 | import BraintreeProvider from './../braintree.provider'; 3 | 4 | const InjectBraintreeProvider = () => Inject(BraintreeProvider); 5 | 6 | export default InjectBraintreeProvider; 7 | -------------------------------------------------------------------------------- /src/decorators/webhooks/braintree.webhook.method.decorator.ts: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | import { 3 | BRAINTREE_WEBHOOK_METHOD, 4 | } from './../../braintree.constants'; 5 | 6 | export const BraintreeWebhookMethodDecorator = (method) => (): MethodDecorator => { 7 | return ( 8 | target: Object, 9 | key: string | symbol, 10 | descriptor: PropertyDescriptor, 11 | ) => { 12 | Reflect.defineMetadata( 13 | BRAINTREE_WEBHOOK_METHOD, 14 | method, 15 | descriptor.value, 16 | ); 17 | return descriptor; 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /src/decorators/webhooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './subscriptions'; -------------------------------------------------------------------------------- /src/decorators/webhooks/subscriptions.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BRAINTREE_WEBHOOK_SUBSCRIPTION_CANCELED, 3 | BRAINTREE_WEBHOOK_SUBSCRIPTION_EXPIRED, 4 | BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_SUCCESSFULLY, 5 | BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_UNSUCCESSFULLY, 6 | BRAINTREE_WEBHOOK_SUBSCRIPTION_TRIAL_ENDED, 7 | BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_ACTIVE, 8 | BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_PAST_DUE 9 | } from './../../braintree.constants'; 10 | import {BraintreeWebhookMethodDecorator} from './braintree.webhook.method.decorator'; 11 | 12 | export const BraintreeSubscriptionCanceled = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_CANCELED); 13 | export const BraintreeSubscriptionExpired = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_EXPIRED); 14 | export const BraintreeSubscriptionChargedSuccessfully = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_SUCCESSFULLY); 15 | export const BraintreeSubscriptionChargedUnSuccessfully = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_CHARGED_UNSUCCESSFULLY); 16 | export const BraintreeSubscriptionTrialEnded = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_TRIAL_ENDED); 17 | export const BraintreeSubscriptionWentActive = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_ACTIVE); 18 | export const BraintreeSubscriptionWentPastDue = BraintreeWebhookMethodDecorator(BRAINTREE_WEBHOOK_SUBSCRIPTION_WENT_PAST_DUE); 19 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import BraintreeModule from './braintree.module'; 2 | import BraintreeProvider from './braintree.provider'; 3 | import BraintreeWebhookController from './braintree.webhook.controller'; 4 | import {BraintreeOptions, BraintreeAsyncOptions} from './interfaces/braintree.options.interface'; 5 | import BraintreeWebhookModule from './braintree.webhook.module'; 6 | 7 | export * from './braintree.constants'; 8 | export * from './decorators'; 9 | export * from './interfaces'; 10 | 11 | export { 12 | BraintreeModule, 13 | BraintreeProvider, 14 | BraintreeAsyncOptions, 15 | BraintreeOptions, 16 | BraintreeWebhookController, 17 | BraintreeWebhookModule, 18 | }; -------------------------------------------------------------------------------- /src/interfaces/braintree.options.interface.ts: -------------------------------------------------------------------------------- 1 | export interface BraintreeOptions { 2 | environment: string; 3 | merchantId: string; 4 | publicKey: string; 5 | privateKey: string; 6 | } 7 | 8 | export interface BraintreeAsyncOptions { 9 | inject?: any[]; 10 | useFactory?: (...args: any[]) => Promise; 11 | } 12 | -------------------------------------------------------------------------------- /src/interfaces/braintree.transaction.interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | CreditCard, 3 | DisbursementDetails, 4 | PayPalAccount, 5 | ApplePayCard, 6 | AndroidPayCard, 7 | CoinbaseAccount, 8 | VisaCheckoutCard, 9 | MasterpassCard, 10 | SamsungPayCard, 11 | } from 'braintree'; 12 | 13 | export interface BraintreeTransactionOptionsInterface { 14 | submitForSettlement?: boolean; 15 | addBillingAddressToPaymentMethod?: boolean; 16 | holdInEscrow?: boolean; 17 | paypal?: BraintreePayPalOptionsInterface; 18 | skipAdvancedFraudChecking?: boolean; 19 | skipAvs?: boolean; 20 | skipCvv?: boolean; 21 | storeInVault?: boolean; 22 | storeInVaultOnSuccess?: boolean; 23 | storeShippingAddressInVault?: boolean; 24 | treeDSecure?: { 25 | required: boolean; 26 | }; 27 | venmo?: { 28 | profileId: string; 29 | }; 30 | } 31 | 32 | export interface BraintreePayPalOptionsInterface { 33 | customField: string; 34 | description: string; 35 | } 36 | 37 | export interface BraintreeDescriptorInterface { 38 | name?: string; 39 | phone?: string; 40 | url?: string; 41 | } 42 | 43 | export interface BraintreeAddressInterface { 44 | company?: string; 45 | countryName?: string; 46 | countryCodeAlpha2?: string; 47 | countryCodeAlpha3?: string; 48 | countryCodeNumeric?: string; 49 | extendedAddress?: string; 50 | firstName?: string; 51 | lastName?: string; 52 | locality?: string; 53 | postalCode?: string; 54 | region?: string; 55 | streetAddress?: string; 56 | } 57 | 58 | export interface BraintreeCustomerInterface { 59 | id?: string; 60 | firstName?: string; 61 | lastName?: string; 62 | company?: string; 63 | phone?: string; 64 | fax?: string; 65 | website?: string; 66 | email?: string; 67 | } 68 | 69 | export interface BraintreeTransactionInterface { 70 | payment_method_nonce: string; 71 | amount: string; 72 | billing?: BraintreeAddressInterface; 73 | billingAddressId?: string; 74 | channel?: string; 75 | customFields?: { [s: string]: string }; 76 | customerId?: string; 77 | deviceSessionId?: string; 78 | discountAmount?: string; 79 | merchantAccountId?: string; 80 | options?: BraintreeTransactionInterface; 81 | orderId?: string; 82 | paymentMethodToken?: string; 83 | purchaseOrderNumber?: string; 84 | serviceFeeAmount?: string; 85 | sharedBillingAddress?: string; 86 | sharedCustomerId?: string; 87 | sharedPaymentMethodNonce?: string; 88 | sharedPaymentMethodToken?: string; 89 | sharedSippingAddressId?: string; 90 | shipping?: BraintreeAddressInterface; 91 | shippingAddressId?: string; 92 | shippingAmount?: string; 93 | shippingFromPostalCode?: string; 94 | taxAmount?: string; 95 | taxExempt?: boolean; 96 | transactionSource?: 'recurring' | 'unscheduled' | 'recurring_first' | 'moto'; 97 | descriptor?: BraintreeDescriptorInterface; 98 | } 99 | 100 | export interface BraintreeTransactionResultInterface { 101 | success: boolean; 102 | transaction: BraintreeTransaction; 103 | } 104 | 105 | export interface BraintreeSubscriptionOptionsInterface { 106 | doNotInheritAddOnsOrDiscounts?: boolean; 107 | paypal?: { 108 | description?: string; 109 | }; 110 | startImmediately?: boolean; 111 | } 112 | 113 | export interface BraintreeSubscriptionInterface { 114 | paymentMethodToken: string; 115 | planId: string; 116 | price?: string; 117 | paymentMethodNonce?: string; 118 | options?: BraintreeSubscriptionOptionsInterface; 119 | trialDuration?: number; 120 | trialDurationUnit?: 'day' | 'month'; 121 | trialPeriod?: boolean; 122 | numberOfBillingCycles?: number; 123 | neverExpires?: boolean; 124 | merchantAccountId?: string; 125 | id?: string; 126 | firstBillingDate?: Date; 127 | discounts?: { 128 | add?: { 129 | amount?: string; 130 | inheritFromId: string; 131 | neverExpires?: boolean; 132 | numberOfBillingCycles?: string; 133 | quantity?: number; 134 | }[]; 135 | remove: string[]; 136 | update: { 137 | amount?: string; 138 | existingId: string; 139 | neverExpires?: boolean; 140 | numberOfBillingCycles?: number; 141 | quantity?: number; 142 | }[]; 143 | }; 144 | descriptor?: BraintreeDescriptorInterface; 145 | } 146 | 147 | export interface BraintreeTransaction { 148 | id: string; 149 | status: string; 150 | type: string; 151 | currencyIsoCode: string; 152 | amount: string; 153 | merchantAccountId: string; 154 | subMerchantAccountId: string | null; 155 | masterMerchantAccountId: string | null; 156 | orderId: string | null; 157 | createdAt: string; 158 | updatedAt: string; 159 | customer: { 160 | id: string | null; 161 | firstName: string | null; 162 | lastName: string | null; 163 | company: string | null; 164 | email: string | null; 165 | website: string | null; 166 | phone: string | null; 167 | fax: string | null; 168 | }; 169 | billing: { 170 | id: string | null; 171 | firstName: string | null; 172 | lastName: string | null; 173 | company: string | null; 174 | streetAddress: string | null; 175 | extendedAddress: string | null; 176 | locality: string | null; 177 | region: string | null; 178 | postalCode: string | null; 179 | countryName: string | null; 180 | countryCodeAlpha2: string | null; 181 | countryCodeAlpha3: string | null; 182 | countryCodeNumeric: string | null; 183 | }; 184 | refundId: string | null; 185 | refundIds: string[]; 186 | refundedTransactionId: string; 187 | partialSettlementTransactionIds: string[]; 188 | authorizedTransactionId: string | null; 189 | settlementBatchId: string | null; 190 | shipping: { 191 | id: string | null; 192 | firstName: string | null; 193 | lastName: string | null; 194 | company: string | null; 195 | streetAddress: string | null; 196 | extendedAddress: string | null; 197 | locality: string | null; 198 | region: string | null; 199 | postalCode: string | null; 200 | countryName: string | null; 201 | countryCodeAlpha2: string | null; 202 | countryCodeAlpha3: string | null; 203 | countryCodeNumeric: string | null; 204 | }; 205 | customFields: string | object; 206 | avsErrorResponseCode: string | null; 207 | avsPostalCodeResponseCode: string; 208 | avsStreetAddressResponseCode: string; 209 | cvvResponseCode: string; 210 | gatewayRejectionReason: null | string; 211 | processorAuthorizationCode: string; 212 | processorResponseCode: string; 213 | processorResponseText: string; 214 | additionalProcessorResponse: null | string; 215 | voiceReferralNumber: null | string; 216 | purchaseOrderNumber: null | string; 217 | taxAmount: null | string; 218 | taxExempt: boolean; 219 | creditCard: CreditCard; 220 | statusHistory: object; 221 | planId: null | string; 222 | subscriptionId: null | string; 223 | subscription: { 224 | billingPeriodEndDate: null | string; 225 | billingPeriodStartDate: null | string; 226 | }; 227 | addOns: []; 228 | discounts: []; 229 | descriptor: { 230 | name: string | null; 231 | phone: string | null; 232 | url: string | null; 233 | }; 234 | recurring: boolean; 235 | channel: null | string; 236 | serviceFeeAmount: null | string; 237 | escrowStatus: null | string; 238 | disbursementDetails: DisbursementDetails; 239 | disputes: []; 240 | authorizationAjustments: []; 241 | paymentInstrumentType: string; 242 | processorSettlementResponseCode: string; 243 | processorSettlementResponseText: string; 244 | threeDSecureInfo: null | string; 245 | shipsFromPostalCode: null | string; 246 | shippingAmount: null | string; 247 | discountAmount: null | string; 248 | networkTransactionId: string; 249 | refundGlobalIds: []; 250 | refundedTransactionGlobalId: null | string; 251 | partialSettlementTransactionGlobalIds: []; 252 | authorizedTransactionGlobalId: null | string; 253 | globalId: string; 254 | processorResponseType: string; 255 | paypalAccount: PayPalAccount; 256 | coinbaseAccount: CoinbaseAccount; 257 | applePayCard: ApplePayCard; 258 | androidPayCard: AndroidPayCard; 259 | visaCheckoutCard: VisaCheckoutCard; 260 | masterpassCard: MasterpassCard; 261 | samsungPayCard: SamsungPayCard; 262 | } 263 | 264 | export interface BraintreeSubscriptionResultInterface { 265 | transaction: BraintreeTransaction[]; 266 | subscription: {}; // TODO add result types 267 | } 268 | -------------------------------------------------------------------------------- /src/interfaces/braintree.webhook.methods.interface.ts: -------------------------------------------------------------------------------- 1 | export interface BraintreeWebhookMethodInterface { 2 | provider: string; 3 | method: string; 4 | } 5 | 6 | export interface BraintreeWebhookMethodTreeInterface { 7 | [k: string]: BraintreeWebhookMethodInterface[]; 8 | } 9 | -------------------------------------------------------------------------------- /src/interfaces/braintree.webhook.notification.interface.ts: -------------------------------------------------------------------------------- 1 | export interface BraintreeWebhookNotificationInterface { 2 | timestamp: string; 3 | kind: string; 4 | subject: object; //TODO add different types to what could be returned 5 | } 6 | -------------------------------------------------------------------------------- /src/interfaces/braintree.webhook.options.interface.ts: -------------------------------------------------------------------------------- 1 | export interface BraintreeWebhookOptionsInterface { 2 | root: string; 3 | handle: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/interfaces/braintree.webhook.payload.interface.ts: -------------------------------------------------------------------------------- 1 | export interface BraintreeWebhookPayloadInterface { 2 | bt_signature: string; 3 | bt_payload: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './braintree.options.interface'; 2 | export * from './braintree.webhook.payload.interface'; 3 | export * from './braintree.webhook.notification.interface'; 4 | export * from './braintree.webhook.methods.interface'; 5 | export * from './braintree.webhook.options.interface'; 6 | export * from './braintree.transaction.interface'; 7 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "node", 4 | "module": "commonjs", 5 | "declaration": true, 6 | "noImplicitAny": false, 7 | "noUnusedLocals": false, 8 | "removeComments": false, 9 | "noLib": false, 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "target": "es6", 13 | "sourceMap": false, 14 | "allowJs": false, 15 | "rootDir": "./src", 16 | "baseUrl": "./", 17 | "outDir": "./dist", 18 | "lib": ["es2017"] 19 | }, 20 | "include": [ 21 | "*.ts", 22 | "**/*.ts" 23 | ], 24 | "exclude": [ 25 | "node_modules", 26 | "./**/*.spec.ts", 27 | "examples" 28 | ] 29 | } -------------------------------------------------------------------------------- /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", "@babel/code-frame@^7.12.13": 6 | version "7.12.13" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" 8 | dependencies: 9 | "@babel/highlight" "^7.12.13" 10 | 11 | "@babel/compat-data@^7.13.0": 12 | version "7.13.0" 13 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.0.tgz#7889eb7ee6518e2afa5d312b15fd7fd1fe9f3744" 14 | 15 | "@babel/core@^7.1.0": 16 | version "7.13.1" 17 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.1.tgz#7ddd027176debe40f13bb88bac0c21218c5b1ecf" 18 | dependencies: 19 | "@babel/code-frame" "^7.12.13" 20 | "@babel/generator" "^7.13.0" 21 | "@babel/helper-compilation-targets" "^7.13.0" 22 | "@babel/helper-module-transforms" "^7.13.0" 23 | "@babel/helpers" "^7.13.0" 24 | "@babel/parser" "^7.13.0" 25 | "@babel/template" "^7.12.13" 26 | "@babel/traverse" "^7.13.0" 27 | "@babel/types" "^7.13.0" 28 | convert-source-map "^1.7.0" 29 | debug "^4.1.0" 30 | gensync "^1.0.0-beta.2" 31 | json5 "^2.1.2" 32 | lodash "^4.17.19" 33 | semver "7.0.0" 34 | source-map "^0.5.0" 35 | 36 | "@babel/generator@^7.13.0", "@babel/generator@^7.4.0": 37 | version "7.13.0" 38 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.0.tgz#bd00d4394ca22f220390c56a0b5b85568ec1ec0c" 39 | dependencies: 40 | "@babel/types" "^7.13.0" 41 | jsesc "^2.5.1" 42 | source-map "^0.5.0" 43 | 44 | "@babel/helper-compilation-targets@^7.13.0": 45 | version "7.13.0" 46 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.0.tgz#c9cf29b82a76fd637f0faa35544c4ace60a155a1" 47 | dependencies: 48 | "@babel/compat-data" "^7.13.0" 49 | "@babel/helper-validator-option" "^7.12.17" 50 | browserslist "^4.14.5" 51 | semver "7.0.0" 52 | 53 | "@babel/helper-function-name@^7.12.13": 54 | version "7.12.13" 55 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" 56 | dependencies: 57 | "@babel/helper-get-function-arity" "^7.12.13" 58 | "@babel/template" "^7.12.13" 59 | "@babel/types" "^7.12.13" 60 | 61 | "@babel/helper-get-function-arity@^7.12.13": 62 | version "7.12.13" 63 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" 64 | dependencies: 65 | "@babel/types" "^7.12.13" 66 | 67 | "@babel/helper-member-expression-to-functions@^7.13.0": 68 | version "7.13.0" 69 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" 70 | dependencies: 71 | "@babel/types" "^7.13.0" 72 | 73 | "@babel/helper-module-imports@^7.12.13": 74 | version "7.12.13" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" 76 | dependencies: 77 | "@babel/types" "^7.12.13" 78 | 79 | "@babel/helper-module-transforms@^7.13.0": 80 | version "7.13.0" 81 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" 82 | dependencies: 83 | "@babel/helper-module-imports" "^7.12.13" 84 | "@babel/helper-replace-supers" "^7.13.0" 85 | "@babel/helper-simple-access" "^7.12.13" 86 | "@babel/helper-split-export-declaration" "^7.12.13" 87 | "@babel/helper-validator-identifier" "^7.12.11" 88 | "@babel/template" "^7.12.13" 89 | "@babel/traverse" "^7.13.0" 90 | "@babel/types" "^7.13.0" 91 | lodash "^4.17.19" 92 | 93 | "@babel/helper-optimise-call-expression@^7.12.13": 94 | version "7.12.13" 95 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" 96 | dependencies: 97 | "@babel/types" "^7.12.13" 98 | 99 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": 100 | version "7.13.0" 101 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" 102 | 103 | "@babel/helper-replace-supers@^7.13.0": 104 | version "7.13.0" 105 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" 106 | dependencies: 107 | "@babel/helper-member-expression-to-functions" "^7.13.0" 108 | "@babel/helper-optimise-call-expression" "^7.12.13" 109 | "@babel/traverse" "^7.13.0" 110 | "@babel/types" "^7.13.0" 111 | 112 | "@babel/helper-simple-access@^7.12.13": 113 | version "7.12.13" 114 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" 115 | dependencies: 116 | "@babel/types" "^7.12.13" 117 | 118 | "@babel/helper-split-export-declaration@^7.12.13": 119 | version "7.12.13" 120 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" 121 | dependencies: 122 | "@babel/types" "^7.12.13" 123 | 124 | "@babel/helper-validator-identifier@^7.12.11": 125 | version "7.12.11" 126 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" 127 | 128 | "@babel/helper-validator-option@^7.12.17": 129 | version "7.12.17" 130 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" 131 | 132 | "@babel/helpers@^7.13.0": 133 | version "7.13.0" 134 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.0.tgz#7647ae57377b4f0408bf4f8a7af01c42e41badc0" 135 | dependencies: 136 | "@babel/template" "^7.12.13" 137 | "@babel/traverse" "^7.13.0" 138 | "@babel/types" "^7.13.0" 139 | 140 | "@babel/highlight@^7.12.13": 141 | version "7.12.13" 142 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" 143 | dependencies: 144 | "@babel/helper-validator-identifier" "^7.12.11" 145 | chalk "^2.0.0" 146 | js-tokens "^4.0.0" 147 | 148 | "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.4.3": 149 | version "7.13.0" 150 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.0.tgz#49b9b6ee213e5634fa80361dae139effef893f78" 151 | 152 | "@babel/plugin-syntax-object-rest-spread@^7.0.0": 153 | version "7.8.3" 154 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 155 | dependencies: 156 | "@babel/helper-plugin-utils" "^7.8.0" 157 | 158 | "@babel/template@^7.12.13", "@babel/template@^7.4.0": 159 | version "7.12.13" 160 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" 161 | dependencies: 162 | "@babel/code-frame" "^7.12.13" 163 | "@babel/parser" "^7.12.13" 164 | "@babel/types" "^7.12.13" 165 | 166 | "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.4.3": 167 | version "7.13.0" 168 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" 169 | dependencies: 170 | "@babel/code-frame" "^7.12.13" 171 | "@babel/generator" "^7.13.0" 172 | "@babel/helper-function-name" "^7.12.13" 173 | "@babel/helper-split-export-declaration" "^7.12.13" 174 | "@babel/parser" "^7.13.0" 175 | "@babel/types" "^7.13.0" 176 | debug "^4.1.0" 177 | globals "^11.1.0" 178 | lodash "^4.17.19" 179 | 180 | "@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0": 181 | version "7.13.0" 182 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" 183 | dependencies: 184 | "@babel/helper-validator-identifier" "^7.12.11" 185 | lodash "^4.17.19" 186 | to-fast-properties "^2.0.0" 187 | 188 | "@braintree/wrap-promise@1.1.1": 189 | version "1.1.1" 190 | resolved "https://registry.yarnpkg.com/@braintree/wrap-promise/-/wrap-promise-1.1.1.tgz#d22c76855e6d4b4012610060421fae1a37ec90b0" 191 | 192 | "@cnakazawa/watch@^1.0.3": 193 | version "1.0.4" 194 | resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" 195 | dependencies: 196 | exec-sh "^0.3.2" 197 | minimist "^1.2.0" 198 | 199 | "@jest/console@^24.7.1", "@jest/console@^24.9.0": 200 | version "24.9.0" 201 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" 202 | dependencies: 203 | "@jest/source-map" "^24.9.0" 204 | chalk "^2.0.1" 205 | slash "^2.0.0" 206 | 207 | "@jest/core@^24.9.0": 208 | version "24.9.0" 209 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" 210 | dependencies: 211 | "@jest/console" "^24.7.1" 212 | "@jest/reporters" "^24.9.0" 213 | "@jest/test-result" "^24.9.0" 214 | "@jest/transform" "^24.9.0" 215 | "@jest/types" "^24.9.0" 216 | ansi-escapes "^3.0.0" 217 | chalk "^2.0.1" 218 | exit "^0.1.2" 219 | graceful-fs "^4.1.15" 220 | jest-changed-files "^24.9.0" 221 | jest-config "^24.9.0" 222 | jest-haste-map "^24.9.0" 223 | jest-message-util "^24.9.0" 224 | jest-regex-util "^24.3.0" 225 | jest-resolve "^24.9.0" 226 | jest-resolve-dependencies "^24.9.0" 227 | jest-runner "^24.9.0" 228 | jest-runtime "^24.9.0" 229 | jest-snapshot "^24.9.0" 230 | jest-util "^24.9.0" 231 | jest-validate "^24.9.0" 232 | jest-watcher "^24.9.0" 233 | micromatch "^3.1.10" 234 | p-each-series "^1.0.0" 235 | realpath-native "^1.1.0" 236 | rimraf "^2.5.4" 237 | slash "^2.0.0" 238 | strip-ansi "^5.0.0" 239 | 240 | "@jest/environment@^24.9.0": 241 | version "24.9.0" 242 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" 243 | dependencies: 244 | "@jest/fake-timers" "^24.9.0" 245 | "@jest/transform" "^24.9.0" 246 | "@jest/types" "^24.9.0" 247 | jest-mock "^24.9.0" 248 | 249 | "@jest/fake-timers@^24.9.0": 250 | version "24.9.0" 251 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" 252 | dependencies: 253 | "@jest/types" "^24.9.0" 254 | jest-message-util "^24.9.0" 255 | jest-mock "^24.9.0" 256 | 257 | "@jest/reporters@^24.9.0": 258 | version "24.9.0" 259 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" 260 | dependencies: 261 | "@jest/environment" "^24.9.0" 262 | "@jest/test-result" "^24.9.0" 263 | "@jest/transform" "^24.9.0" 264 | "@jest/types" "^24.9.0" 265 | chalk "^2.0.1" 266 | exit "^0.1.2" 267 | glob "^7.1.2" 268 | istanbul-lib-coverage "^2.0.2" 269 | istanbul-lib-instrument "^3.0.1" 270 | istanbul-lib-report "^2.0.4" 271 | istanbul-lib-source-maps "^3.0.1" 272 | istanbul-reports "^2.2.6" 273 | jest-haste-map "^24.9.0" 274 | jest-resolve "^24.9.0" 275 | jest-runtime "^24.9.0" 276 | jest-util "^24.9.0" 277 | jest-worker "^24.6.0" 278 | node-notifier "^5.4.2" 279 | slash "^2.0.0" 280 | source-map "^0.6.0" 281 | string-length "^2.0.0" 282 | 283 | "@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": 284 | version "24.9.0" 285 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" 286 | dependencies: 287 | callsites "^3.0.0" 288 | graceful-fs "^4.1.15" 289 | source-map "^0.6.0" 290 | 291 | "@jest/test-result@^24.9.0": 292 | version "24.9.0" 293 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" 294 | dependencies: 295 | "@jest/console" "^24.9.0" 296 | "@jest/types" "^24.9.0" 297 | "@types/istanbul-lib-coverage" "^2.0.0" 298 | 299 | "@jest/test-sequencer@^24.9.0": 300 | version "24.9.0" 301 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" 302 | dependencies: 303 | "@jest/test-result" "^24.9.0" 304 | jest-haste-map "^24.9.0" 305 | jest-runner "^24.9.0" 306 | jest-runtime "^24.9.0" 307 | 308 | "@jest/transform@^24.9.0": 309 | version "24.9.0" 310 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" 311 | dependencies: 312 | "@babel/core" "^7.1.0" 313 | "@jest/types" "^24.9.0" 314 | babel-plugin-istanbul "^5.1.0" 315 | chalk "^2.0.1" 316 | convert-source-map "^1.4.0" 317 | fast-json-stable-stringify "^2.0.0" 318 | graceful-fs "^4.1.15" 319 | jest-haste-map "^24.9.0" 320 | jest-regex-util "^24.9.0" 321 | jest-util "^24.9.0" 322 | micromatch "^3.1.10" 323 | pirates "^4.0.1" 324 | realpath-native "^1.1.0" 325 | slash "^2.0.0" 326 | source-map "^0.6.1" 327 | write-file-atomic "2.4.1" 328 | 329 | "@jest/types@^24.9.0": 330 | version "24.9.0" 331 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" 332 | dependencies: 333 | "@types/istanbul-lib-coverage" "^2.0.0" 334 | "@types/istanbul-reports" "^1.1.1" 335 | "@types/yargs" "^13.0.0" 336 | 337 | "@nestjs/common@^5.2.2": 338 | version "5.2.2" 339 | resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-5.2.2.tgz#f6256271ceb85a961304631422e6589bef252129" 340 | dependencies: 341 | axios "0.17.1" 342 | cli-color "1.2.0" 343 | deprecate "1.0.0" 344 | multer "1.3.0" 345 | 346 | "@nestjs/core@^5.2.2": 347 | version "5.2.2" 348 | resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-5.2.2.tgz#ea87b481bb280bcbd419b526cae11e34f7406290" 349 | dependencies: 350 | body-parser "1.18.2" 351 | cors "2.8.4" 352 | express "4.16.3" 353 | iterare "0.0.8" 354 | object-hash "1.3.0" 355 | optional "0.1.4" 356 | path-to-regexp "2.2.1" 357 | 358 | "@nestjs/testing@^5.2.2": 359 | version "5.2.2" 360 | resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-5.2.2.tgz#b1338bb0f54ccf5ea16661196bbd42c2403049b5" 361 | dependencies: 362 | deprecate "1.0.0" 363 | optional "0.1.4" 364 | 365 | "@types/babel__core@^7.1.0": 366 | version "7.1.12" 367 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" 368 | dependencies: 369 | "@babel/parser" "^7.1.0" 370 | "@babel/types" "^7.0.0" 371 | "@types/babel__generator" "*" 372 | "@types/babel__template" "*" 373 | "@types/babel__traverse" "*" 374 | 375 | "@types/babel__generator@*": 376 | version "7.6.2" 377 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" 378 | dependencies: 379 | "@babel/types" "^7.0.0" 380 | 381 | "@types/babel__template@*": 382 | version "7.4.0" 383 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" 384 | dependencies: 385 | "@babel/parser" "^7.1.0" 386 | "@babel/types" "^7.0.0" 387 | 388 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 389 | version "7.11.0" 390 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" 391 | dependencies: 392 | "@babel/types" "^7.3.0" 393 | 394 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": 395 | version "2.0.3" 396 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" 397 | 398 | "@types/istanbul-lib-report@*": 399 | version "3.0.0" 400 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 401 | dependencies: 402 | "@types/istanbul-lib-coverage" "*" 403 | 404 | "@types/istanbul-reports@^1.1.1": 405 | version "1.1.2" 406 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" 407 | dependencies: 408 | "@types/istanbul-lib-coverage" "*" 409 | "@types/istanbul-lib-report" "*" 410 | 411 | "@types/jest@^23.3.1": 412 | version "23.3.1" 413 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.1.tgz#a4319aedb071d478e6f407d1c4578ec8156829cf" 414 | 415 | "@types/node@^12.7.9": 416 | version "12.7.9" 417 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.9.tgz#da0210f91096aa67138cf5afd04c4d629f8a406a" 418 | 419 | "@types/stack-utils@^1.0.1": 420 | version "1.0.1" 421 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" 422 | 423 | "@types/yargs-parser@*": 424 | version "20.2.0" 425 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" 426 | 427 | "@types/yargs@^13.0.0": 428 | version "13.0.11" 429 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" 430 | dependencies: 431 | "@types/yargs-parser" "*" 432 | 433 | abab@^2.0.0: 434 | version "2.0.0" 435 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" 436 | 437 | accepts@~1.3.5: 438 | version "1.3.5" 439 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" 440 | dependencies: 441 | mime-types "~2.1.18" 442 | negotiator "0.6.1" 443 | 444 | acorn-globals@^4.1.0: 445 | version "4.1.0" 446 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" 447 | dependencies: 448 | acorn "^5.0.0" 449 | 450 | acorn@^5.0.0, acorn@^5.5.3: 451 | version "5.7.2" 452 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.2.tgz#91fa871883485d06708800318404e72bfb26dcc5" 453 | 454 | ajv@^6.12.3: 455 | version "6.12.6" 456 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 457 | dependencies: 458 | fast-deep-equal "^3.1.1" 459 | fast-json-stable-stringify "^2.0.0" 460 | json-schema-traverse "^0.4.1" 461 | uri-js "^4.2.2" 462 | 463 | ansi-escapes@^3.0.0: 464 | version "3.1.0" 465 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" 466 | 467 | ansi-regex@^2.1.1: 468 | version "2.1.1" 469 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 470 | 471 | ansi-regex@^3.0.0: 472 | version "3.0.0" 473 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 474 | 475 | ansi-regex@^4.0.0, ansi-regex@^4.1.0: 476 | version "4.1.0" 477 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 478 | 479 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 480 | version "3.2.1" 481 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 482 | dependencies: 483 | color-convert "^1.9.0" 484 | 485 | anymatch@^2.0.0: 486 | version "2.0.0" 487 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 488 | dependencies: 489 | micromatch "^3.1.4" 490 | normalize-path "^2.1.1" 491 | 492 | append-field@^0.1.0: 493 | version "0.1.0" 494 | resolved "https://registry.yarnpkg.com/append-field/-/append-field-0.1.0.tgz#6ddc58fa083c7bc545d3c5995b2830cc2366d44a" 495 | 496 | argparse@^1.0.7: 497 | version "1.0.10" 498 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 499 | dependencies: 500 | sprintf-js "~1.0.2" 501 | 502 | arr-diff@^4.0.0: 503 | version "4.0.0" 504 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 505 | 506 | arr-flatten@^1.1.0: 507 | version "1.1.0" 508 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 509 | 510 | arr-union@^3.1.0: 511 | version "3.1.0" 512 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 513 | 514 | array-equal@^1.0.0: 515 | version "1.0.0" 516 | resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" 517 | 518 | array-flatten@1.1.1: 519 | version "1.1.1" 520 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 521 | 522 | array-unique@^0.3.2: 523 | version "0.3.2" 524 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 525 | 526 | asn1@~0.2.3: 527 | version "0.2.4" 528 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 529 | dependencies: 530 | safer-buffer "~2.1.0" 531 | 532 | assert-plus@1.0.0, assert-plus@^1.0.0: 533 | version "1.0.0" 534 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 535 | 536 | assign-symbols@^1.0.0: 537 | version "1.0.0" 538 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 539 | 540 | astral-regex@^1.0.0: 541 | version "1.0.0" 542 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 543 | 544 | async-limiter@~1.0.0: 545 | version "1.0.1" 546 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" 547 | 548 | asynckit@^0.4.0: 549 | version "0.4.0" 550 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 551 | 552 | atob@^2.1.1: 553 | version "2.1.2" 554 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 555 | 556 | aws-sign2@~0.7.0: 557 | version "0.7.0" 558 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 559 | 560 | aws4@^1.8.0: 561 | version "1.8.0" 562 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" 563 | 564 | axios@0.17.1: 565 | version "0.17.1" 566 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" 567 | dependencies: 568 | follow-redirects "^1.2.5" 569 | is-buffer "^1.1.5" 570 | 571 | babel-jest@^24.9.0: 572 | version "24.9.0" 573 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" 574 | dependencies: 575 | "@jest/transform" "^24.9.0" 576 | "@jest/types" "^24.9.0" 577 | "@types/babel__core" "^7.1.0" 578 | babel-plugin-istanbul "^5.1.0" 579 | babel-preset-jest "^24.9.0" 580 | chalk "^2.4.2" 581 | slash "^2.0.0" 582 | 583 | babel-plugin-istanbul@^5.1.0: 584 | version "5.2.0" 585 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" 586 | dependencies: 587 | "@babel/helper-plugin-utils" "^7.0.0" 588 | find-up "^3.0.0" 589 | istanbul-lib-instrument "^3.3.0" 590 | test-exclude "^5.2.3" 591 | 592 | babel-plugin-jest-hoist@^24.9.0: 593 | version "24.9.0" 594 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" 595 | dependencies: 596 | "@types/babel__traverse" "^7.0.6" 597 | 598 | babel-preset-jest@^24.9.0: 599 | version "24.9.0" 600 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" 601 | dependencies: 602 | "@babel/plugin-syntax-object-rest-spread" "^7.0.0" 603 | babel-plugin-jest-hoist "^24.9.0" 604 | 605 | balanced-match@^1.0.0: 606 | version "1.0.0" 607 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 608 | 609 | base@^0.11.1: 610 | version "0.11.2" 611 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 612 | dependencies: 613 | cache-base "^1.0.1" 614 | class-utils "^0.3.5" 615 | component-emitter "^1.2.1" 616 | define-property "^1.0.0" 617 | isobject "^3.0.1" 618 | mixin-deep "^1.2.0" 619 | pascalcase "^0.1.1" 620 | 621 | bcrypt-pbkdf@^1.0.0: 622 | version "1.0.2" 623 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 624 | dependencies: 625 | tweetnacl "^0.14.3" 626 | 627 | bindings@^1.5.0: 628 | version "1.5.0" 629 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 630 | dependencies: 631 | file-uri-to-path "1.0.0" 632 | 633 | body-parser@1.18.2: 634 | version "1.18.2" 635 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" 636 | dependencies: 637 | bytes "3.0.0" 638 | content-type "~1.0.4" 639 | debug "2.6.9" 640 | depd "~1.1.1" 641 | http-errors "~1.6.2" 642 | iconv-lite "0.4.19" 643 | on-finished "~2.3.0" 644 | qs "6.5.1" 645 | raw-body "2.3.2" 646 | type-is "~1.6.15" 647 | 648 | brace-expansion@^1.1.7: 649 | version "1.1.11" 650 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 651 | dependencies: 652 | balanced-match "^1.0.0" 653 | concat-map "0.0.1" 654 | 655 | braces@^2.3.1: 656 | version "2.3.2" 657 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 658 | dependencies: 659 | arr-flatten "^1.1.0" 660 | array-unique "^0.3.2" 661 | extend-shallow "^2.0.1" 662 | fill-range "^4.0.0" 663 | isobject "^3.0.1" 664 | repeat-element "^1.1.2" 665 | snapdragon "^0.8.1" 666 | snapdragon-node "^2.0.1" 667 | split-string "^3.0.2" 668 | to-regex "^3.0.1" 669 | 670 | braintree@^2.12.0: 671 | version "2.12.0" 672 | resolved "https://registry.yarnpkg.com/braintree/-/braintree-2.12.0.tgz#4c589401f00a683ddcaf9ece2bc0b1f69b268e28" 673 | dependencies: 674 | "@braintree/wrap-promise" "1.1.1" 675 | dateformat "1.0.1-1.2.3" 676 | depd "~1.1.0" 677 | readable-stream "1.1.10" 678 | semver "5.1.0" 679 | underscore "1.8.3" 680 | xml2js "0.1.13" 681 | 682 | browser-process-hrtime@^0.1.2: 683 | version "0.1.2" 684 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" 685 | 686 | browser-resolve@^1.11.3: 687 | version "1.11.3" 688 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 689 | dependencies: 690 | resolve "1.1.7" 691 | 692 | browserslist@^4.14.5: 693 | version "4.16.3" 694 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" 695 | dependencies: 696 | caniuse-lite "^1.0.30001181" 697 | colorette "^1.2.1" 698 | electron-to-chromium "^1.3.649" 699 | escalade "^3.1.1" 700 | node-releases "^1.1.70" 701 | 702 | bser@^2.0.0: 703 | version "2.0.0" 704 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" 705 | dependencies: 706 | node-int64 "^0.4.0" 707 | 708 | buffer-from@^1.0.0: 709 | version "1.1.1" 710 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 711 | 712 | builtin-modules@^1.0.0: 713 | version "1.1.1" 714 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 715 | 716 | busboy@^0.2.11: 717 | version "0.2.14" 718 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" 719 | dependencies: 720 | dicer "0.2.5" 721 | readable-stream "1.1.x" 722 | 723 | bytes@3.0.0: 724 | version "3.0.0" 725 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 726 | 727 | cache-base@^1.0.1: 728 | version "1.0.1" 729 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 730 | dependencies: 731 | collection-visit "^1.0.0" 732 | component-emitter "^1.2.1" 733 | get-value "^2.0.6" 734 | has-value "^1.0.0" 735 | isobject "^3.0.1" 736 | set-value "^2.0.0" 737 | to-object-path "^0.3.0" 738 | union-value "^1.0.0" 739 | unset-value "^1.0.0" 740 | 741 | callsites@^3.0.0: 742 | version "3.1.0" 743 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 744 | 745 | camelcase@^5.0.0, camelcase@^5.3.1: 746 | version "5.3.1" 747 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 748 | 749 | caniuse-lite@^1.0.30001181: 750 | version "1.0.30001191" 751 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz#bacb432b6701f690c8c5f7c680166b9a9f0843d9" 752 | 753 | capture-exit@^2.0.0: 754 | version "2.0.0" 755 | resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" 756 | dependencies: 757 | rsvp "^4.8.4" 758 | 759 | caseless@~0.12.0: 760 | version "0.12.0" 761 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 762 | 763 | chalk@^2.0.0, chalk@^2.0.1: 764 | version "2.4.1" 765 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 766 | dependencies: 767 | ansi-styles "^3.2.1" 768 | escape-string-regexp "^1.0.5" 769 | supports-color "^5.3.0" 770 | 771 | chalk@^2.4.2: 772 | version "2.4.2" 773 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 774 | dependencies: 775 | ansi-styles "^3.2.1" 776 | escape-string-regexp "^1.0.5" 777 | supports-color "^5.3.0" 778 | 779 | ci-info@^2.0.0: 780 | version "2.0.0" 781 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 782 | 783 | class-utils@^0.3.5: 784 | version "0.3.6" 785 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 786 | dependencies: 787 | arr-union "^3.1.0" 788 | define-property "^0.2.5" 789 | isobject "^3.0.0" 790 | static-extend "^0.1.1" 791 | 792 | cli-color@1.2.0: 793 | version "1.2.0" 794 | resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1" 795 | dependencies: 796 | ansi-regex "^2.1.1" 797 | d "1" 798 | es5-ext "^0.10.12" 799 | es6-iterator "2" 800 | memoizee "^0.4.3" 801 | timers-ext "0.1" 802 | 803 | cliui@^5.0.0: 804 | version "5.0.0" 805 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 806 | dependencies: 807 | string-width "^3.1.0" 808 | strip-ansi "^5.2.0" 809 | wrap-ansi "^5.1.0" 810 | 811 | closest-file-data@^0.1.4: 812 | version "0.1.4" 813 | resolved "https://registry.yarnpkg.com/closest-file-data/-/closest-file-data-0.1.4.tgz#975f87c132f299d24a0375b9f63ca3fb88f72b3a" 814 | 815 | co@^4.6.0: 816 | version "4.6.0" 817 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 818 | 819 | collection-visit@^1.0.0: 820 | version "1.0.0" 821 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 822 | dependencies: 823 | map-visit "^1.0.0" 824 | object-visit "^1.0.0" 825 | 826 | color-convert@^1.9.0: 827 | version "1.9.3" 828 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 829 | dependencies: 830 | color-name "1.1.3" 831 | 832 | color-name@1.1.3: 833 | version "1.1.3" 834 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 835 | 836 | colorette@^1.2.1: 837 | version "1.2.1" 838 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" 839 | 840 | combined-stream@1.0.6, combined-stream@~1.0.6: 841 | version "1.0.6" 842 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 843 | dependencies: 844 | delayed-stream "~1.0.0" 845 | 846 | component-emitter@^1.2.0, component-emitter@^1.2.1: 847 | version "1.2.1" 848 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 849 | 850 | concat-map@0.0.1: 851 | version "0.0.1" 852 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 853 | 854 | concat-stream@^1.5.0: 855 | version "1.6.2" 856 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 857 | dependencies: 858 | buffer-from "^1.0.0" 859 | inherits "^2.0.3" 860 | readable-stream "^2.2.2" 861 | typedarray "^0.0.6" 862 | 863 | content-disposition@0.5.2: 864 | version "0.5.2" 865 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 866 | 867 | content-type@~1.0.4: 868 | version "1.0.4" 869 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 870 | 871 | convert-source-map@^1.4.0: 872 | version "1.5.1" 873 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" 874 | 875 | convert-source-map@^1.7.0: 876 | version "1.7.0" 877 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 878 | dependencies: 879 | safe-buffer "~5.1.1" 880 | 881 | cookie-signature@1.0.6: 882 | version "1.0.6" 883 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 884 | 885 | cookie@0.3.1: 886 | version "0.3.1" 887 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 888 | 889 | cookiejar@^2.1.0: 890 | version "2.1.2" 891 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" 892 | 893 | copy-descriptor@^0.1.0: 894 | version "0.1.1" 895 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 896 | 897 | core-util-is@1.0.2, core-util-is@~1.0.0: 898 | version "1.0.2" 899 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 900 | 901 | cors@2.8.4: 902 | version "2.8.4" 903 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" 904 | dependencies: 905 | object-assign "^4" 906 | vary "^1" 907 | 908 | coveralls@^3.0.2: 909 | version "3.1.0" 910 | resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" 911 | dependencies: 912 | js-yaml "^3.13.1" 913 | lcov-parse "^1.0.0" 914 | log-driver "^1.2.7" 915 | minimist "^1.2.5" 916 | request "^2.88.2" 917 | 918 | cross-spawn@^6.0.0: 919 | version "6.0.5" 920 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 921 | dependencies: 922 | nice-try "^1.0.4" 923 | path-key "^2.0.1" 924 | semver "^5.5.0" 925 | shebang-command "^1.2.0" 926 | which "^1.2.9" 927 | 928 | cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": 929 | version "0.3.4" 930 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" 931 | 932 | cssstyle@^1.0.0: 933 | version "1.1.1" 934 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" 935 | dependencies: 936 | cssom "0.3.x" 937 | 938 | d@1: 939 | version "1.0.0" 940 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 941 | dependencies: 942 | es5-ext "^0.10.9" 943 | 944 | dashdash@^1.12.0: 945 | version "1.14.1" 946 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 947 | dependencies: 948 | assert-plus "^1.0.0" 949 | 950 | data-urls@^1.0.0: 951 | version "1.0.1" 952 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579" 953 | dependencies: 954 | abab "^2.0.0" 955 | whatwg-mimetype "^2.1.0" 956 | whatwg-url "^7.0.0" 957 | 958 | dateformat@1.0.1-1.2.3: 959 | version "1.0.1-1.2.3" 960 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.1-1.2.3.tgz#2e5d03039eca89f9d8797f99389de5fb0f4aa2fc" 961 | 962 | debug@2.6.9, debug@^2.2.0, debug@^2.3.3: 963 | version "2.6.9" 964 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 965 | dependencies: 966 | ms "2.0.0" 967 | 968 | debug@^3.1.0: 969 | version "3.1.0" 970 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 971 | dependencies: 972 | ms "2.0.0" 973 | 974 | debug@^4.1.0, debug@^4.1.1: 975 | version "4.3.1" 976 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 977 | dependencies: 978 | ms "2.1.2" 979 | 980 | debuglog@0.0.2: 981 | version "0.0.2" 982 | resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-0.0.2.tgz#6c0dcf07e2c3f74524629b741668bd46c7b362eb" 983 | 984 | decamelize@^1.2.0: 985 | version "1.2.0" 986 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 987 | 988 | decode-uri-component@^0.2.0: 989 | version "0.2.0" 990 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 991 | 992 | deep-is@~0.1.3: 993 | version "0.1.3" 994 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 995 | 996 | define-properties@^1.1.2: 997 | version "1.1.3" 998 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 999 | dependencies: 1000 | object-keys "^1.0.12" 1001 | 1002 | define-property@^0.2.5: 1003 | version "0.2.5" 1004 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 1005 | dependencies: 1006 | is-descriptor "^0.1.0" 1007 | 1008 | define-property@^1.0.0: 1009 | version "1.0.0" 1010 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 1011 | dependencies: 1012 | is-descriptor "^1.0.0" 1013 | 1014 | define-property@^2.0.2: 1015 | version "2.0.2" 1016 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 1017 | dependencies: 1018 | is-descriptor "^1.0.2" 1019 | isobject "^3.0.1" 1020 | 1021 | delayed-stream@~1.0.0: 1022 | version "1.0.0" 1023 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1024 | 1025 | depd@1.1.1: 1026 | version "1.1.1" 1027 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 1028 | 1029 | depd@~1.1.0, depd@~1.1.1, depd@~1.1.2: 1030 | version "1.1.2" 1031 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 1032 | 1033 | deprecate@1.0.0: 1034 | version "1.0.0" 1035 | resolved "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz#661490ed2428916a6c8883d8834e5646f4e4a4a8" 1036 | 1037 | destroy@~1.0.4: 1038 | version "1.0.4" 1039 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 1040 | 1041 | detect-newline@^2.1.0: 1042 | version "2.1.0" 1043 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" 1044 | 1045 | dicer@0.2.5: 1046 | version "0.2.5" 1047 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" 1048 | dependencies: 1049 | readable-stream "1.1.x" 1050 | streamsearch "0.1.2" 1051 | 1052 | diff-sequences@^24.9.0: 1053 | version "24.9.0" 1054 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" 1055 | 1056 | domexception@^1.0.1: 1057 | version "1.0.1" 1058 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" 1059 | dependencies: 1060 | webidl-conversions "^4.0.2" 1061 | 1062 | dotenv@^8.0.0: 1063 | version "8.2.0" 1064 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" 1065 | 1066 | ecc-jsbn@~0.1.1: 1067 | version "0.1.2" 1068 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 1069 | dependencies: 1070 | jsbn "~0.1.0" 1071 | safer-buffer "^2.1.0" 1072 | 1073 | ee-first@1.1.1: 1074 | version "1.1.1" 1075 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 1076 | 1077 | electron-to-chromium@^1.3.649: 1078 | version "1.3.672" 1079 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.672.tgz#3a6e335016dab4bc584d5292adc4f98f54541f6a" 1080 | 1081 | emoji-regex@^7.0.1: 1082 | version "7.0.3" 1083 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1084 | 1085 | encodeurl@~1.0.2: 1086 | version "1.0.2" 1087 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 1088 | 1089 | end-of-stream@^1.1.0: 1090 | version "1.4.4" 1091 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 1092 | dependencies: 1093 | once "^1.4.0" 1094 | 1095 | error-ex@^1.3.1: 1096 | version "1.3.2" 1097 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1098 | dependencies: 1099 | is-arrayish "^0.2.1" 1100 | 1101 | es-abstract@^1.5.1: 1102 | version "1.12.0" 1103 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" 1104 | dependencies: 1105 | es-to-primitive "^1.1.1" 1106 | function-bind "^1.1.1" 1107 | has "^1.0.1" 1108 | is-callable "^1.1.3" 1109 | is-regex "^1.0.4" 1110 | 1111 | es-to-primitive@^1.1.1: 1112 | version "1.1.1" 1113 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 1114 | dependencies: 1115 | is-callable "^1.1.1" 1116 | is-date-object "^1.0.1" 1117 | is-symbol "^1.0.1" 1118 | 1119 | es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: 1120 | version "0.10.46" 1121 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" 1122 | dependencies: 1123 | es6-iterator "~2.0.3" 1124 | es6-symbol "~3.1.1" 1125 | next-tick "1" 1126 | 1127 | es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.3: 1128 | version "2.0.3" 1129 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 1130 | dependencies: 1131 | d "1" 1132 | es5-ext "^0.10.35" 1133 | es6-symbol "^3.1.1" 1134 | 1135 | es6-symbol@^3.1.1, es6-symbol@~3.1.1: 1136 | version "3.1.1" 1137 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 1138 | dependencies: 1139 | d "1" 1140 | es5-ext "~0.10.14" 1141 | 1142 | es6-weak-map@^2.0.2: 1143 | version "2.0.2" 1144 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 1145 | dependencies: 1146 | d "1" 1147 | es5-ext "^0.10.14" 1148 | es6-iterator "^2.0.1" 1149 | es6-symbol "^3.1.1" 1150 | 1151 | escalade@^3.1.1: 1152 | version "3.1.1" 1153 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1154 | 1155 | escape-html@~1.0.3: 1156 | version "1.0.3" 1157 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 1158 | 1159 | escape-string-regexp@^1.0.5: 1160 | version "1.0.5" 1161 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1162 | 1163 | escodegen@^1.9.1: 1164 | version "1.11.0" 1165 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" 1166 | dependencies: 1167 | esprima "^3.1.3" 1168 | estraverse "^4.2.0" 1169 | esutils "^2.0.2" 1170 | optionator "^0.8.1" 1171 | optionalDependencies: 1172 | source-map "~0.6.1" 1173 | 1174 | esprima@^3.1.3: 1175 | version "3.1.3" 1176 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 1177 | 1178 | esprima@^4.0.0: 1179 | version "4.0.1" 1180 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1181 | 1182 | estraverse@^4.2.0: 1183 | version "4.2.0" 1184 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 1185 | 1186 | esutils@^2.0.2: 1187 | version "2.0.2" 1188 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1189 | 1190 | etag@~1.8.1: 1191 | version "1.8.1" 1192 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 1193 | 1194 | event-emitter@^0.3.5: 1195 | version "0.3.5" 1196 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 1197 | dependencies: 1198 | d "1" 1199 | es5-ext "~0.10.14" 1200 | 1201 | exec-sh@^0.3.2: 1202 | version "0.3.4" 1203 | resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" 1204 | 1205 | execa@^1.0.0: 1206 | version "1.0.0" 1207 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 1208 | dependencies: 1209 | cross-spawn "^6.0.0" 1210 | get-stream "^4.0.0" 1211 | is-stream "^1.1.0" 1212 | npm-run-path "^2.0.0" 1213 | p-finally "^1.0.0" 1214 | signal-exit "^3.0.0" 1215 | strip-eof "^1.0.0" 1216 | 1217 | exit@^0.1.2: 1218 | version "0.1.2" 1219 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1220 | 1221 | expand-brackets@^2.1.4: 1222 | version "2.1.4" 1223 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1224 | dependencies: 1225 | debug "^2.3.3" 1226 | define-property "^0.2.5" 1227 | extend-shallow "^2.0.1" 1228 | posix-character-classes "^0.1.0" 1229 | regex-not "^1.0.0" 1230 | snapdragon "^0.8.1" 1231 | to-regex "^3.0.1" 1232 | 1233 | expect@^24.9.0: 1234 | version "24.9.0" 1235 | resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" 1236 | dependencies: 1237 | "@jest/types" "^24.9.0" 1238 | ansi-styles "^3.2.0" 1239 | jest-get-type "^24.9.0" 1240 | jest-matcher-utils "^24.9.0" 1241 | jest-message-util "^24.9.0" 1242 | jest-regex-util "^24.9.0" 1243 | 1244 | express@4.16.3: 1245 | version "4.16.3" 1246 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" 1247 | dependencies: 1248 | accepts "~1.3.5" 1249 | array-flatten "1.1.1" 1250 | body-parser "1.18.2" 1251 | content-disposition "0.5.2" 1252 | content-type "~1.0.4" 1253 | cookie "0.3.1" 1254 | cookie-signature "1.0.6" 1255 | debug "2.6.9" 1256 | depd "~1.1.2" 1257 | encodeurl "~1.0.2" 1258 | escape-html "~1.0.3" 1259 | etag "~1.8.1" 1260 | finalhandler "1.1.1" 1261 | fresh "0.5.2" 1262 | merge-descriptors "1.0.1" 1263 | methods "~1.1.2" 1264 | on-finished "~2.3.0" 1265 | parseurl "~1.3.2" 1266 | path-to-regexp "0.1.7" 1267 | proxy-addr "~2.0.3" 1268 | qs "6.5.1" 1269 | range-parser "~1.2.0" 1270 | safe-buffer "5.1.1" 1271 | send "0.16.2" 1272 | serve-static "1.13.2" 1273 | setprototypeof "1.1.0" 1274 | statuses "~1.4.0" 1275 | type-is "~1.6.16" 1276 | utils-merge "1.0.1" 1277 | vary "~1.1.2" 1278 | 1279 | extend-shallow@^2.0.1: 1280 | version "2.0.1" 1281 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1282 | dependencies: 1283 | is-extendable "^0.1.0" 1284 | 1285 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1286 | version "3.0.2" 1287 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1288 | dependencies: 1289 | assign-symbols "^1.0.0" 1290 | is-extendable "^1.0.1" 1291 | 1292 | extend@^3.0.0, extend@~3.0.2: 1293 | version "3.0.2" 1294 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 1295 | 1296 | extglob@^2.0.4: 1297 | version "2.0.4" 1298 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1299 | dependencies: 1300 | array-unique "^0.3.2" 1301 | define-property "^1.0.0" 1302 | expand-brackets "^2.1.4" 1303 | extend-shallow "^2.0.1" 1304 | fragment-cache "^0.2.1" 1305 | regex-not "^1.0.0" 1306 | snapdragon "^0.8.1" 1307 | to-regex "^3.0.1" 1308 | 1309 | extsprintf@1.3.0: 1310 | version "1.3.0" 1311 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 1312 | 1313 | extsprintf@^1.2.0: 1314 | version "1.4.0" 1315 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 1316 | 1317 | fast-deep-equal@^3.1.1: 1318 | version "3.1.3" 1319 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1320 | 1321 | fast-json-stable-stringify@^2.0.0: 1322 | version "2.0.0" 1323 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 1324 | 1325 | fast-levenshtein@~2.0.4: 1326 | version "2.0.6" 1327 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1328 | 1329 | fb-watchman@^2.0.0: 1330 | version "2.0.0" 1331 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" 1332 | dependencies: 1333 | bser "^2.0.0" 1334 | 1335 | file-uri-to-path@1.0.0: 1336 | version "1.0.0" 1337 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1338 | 1339 | fill-range@^4.0.0: 1340 | version "4.0.0" 1341 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1342 | dependencies: 1343 | extend-shallow "^2.0.1" 1344 | is-number "^3.0.0" 1345 | repeat-string "^1.6.1" 1346 | to-regex-range "^2.1.0" 1347 | 1348 | finalhandler@1.1.1: 1349 | version "1.1.1" 1350 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" 1351 | dependencies: 1352 | debug "2.6.9" 1353 | encodeurl "~1.0.2" 1354 | escape-html "~1.0.3" 1355 | on-finished "~2.3.0" 1356 | parseurl "~1.3.2" 1357 | statuses "~1.4.0" 1358 | unpipe "~1.0.0" 1359 | 1360 | find-up@^3.0.0: 1361 | version "3.0.0" 1362 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1363 | dependencies: 1364 | locate-path "^3.0.0" 1365 | 1366 | follow-redirects@^1.2.5: 1367 | version "1.5.7" 1368 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.7.tgz#a39e4804dacb90202bca76a9e2ac10433ca6a69a" 1369 | dependencies: 1370 | debug "^3.1.0" 1371 | 1372 | for-in@^1.0.2: 1373 | version "1.0.2" 1374 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1375 | 1376 | forever-agent@~0.6.1: 1377 | version "0.6.1" 1378 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1379 | 1380 | form-data@^2.3.1, form-data@~2.3.2: 1381 | version "2.3.2" 1382 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 1383 | dependencies: 1384 | asynckit "^0.4.0" 1385 | combined-stream "1.0.6" 1386 | mime-types "^2.1.12" 1387 | 1388 | formidable@^1.2.0: 1389 | version "1.2.1" 1390 | resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" 1391 | 1392 | forwarded@~0.1.2: 1393 | version "0.1.2" 1394 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 1395 | 1396 | fragment-cache@^0.2.1: 1397 | version "0.2.1" 1398 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1399 | dependencies: 1400 | map-cache "^0.2.2" 1401 | 1402 | fresh@0.5.2: 1403 | version "0.5.2" 1404 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 1405 | 1406 | fs-extra@6.0.1: 1407 | version "6.0.1" 1408 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" 1409 | dependencies: 1410 | graceful-fs "^4.1.2" 1411 | jsonfile "^4.0.0" 1412 | universalify "^0.1.0" 1413 | 1414 | fs.realpath@^1.0.0: 1415 | version "1.0.0" 1416 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1417 | 1418 | fsevents@^1.2.7: 1419 | version "1.2.13" 1420 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" 1421 | dependencies: 1422 | bindings "^1.5.0" 1423 | nan "^2.12.1" 1424 | 1425 | function-bind@^1.1.1: 1426 | version "1.1.1" 1427 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1428 | 1429 | gensync@^1.0.0-beta.2: 1430 | version "1.0.0-beta.2" 1431 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1432 | 1433 | get-caller-file@^2.0.1: 1434 | version "2.0.5" 1435 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1436 | 1437 | get-stream@^4.0.0: 1438 | version "4.1.0" 1439 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 1440 | dependencies: 1441 | pump "^3.0.0" 1442 | 1443 | get-value@^2.0.3, get-value@^2.0.6: 1444 | version "2.0.6" 1445 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1446 | 1447 | getpass@^0.1.1: 1448 | version "0.1.7" 1449 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1450 | dependencies: 1451 | assert-plus "^1.0.0" 1452 | 1453 | glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: 1454 | version "7.1.6" 1455 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1456 | dependencies: 1457 | fs.realpath "^1.0.0" 1458 | inflight "^1.0.4" 1459 | inherits "2" 1460 | minimatch "^3.0.4" 1461 | once "^1.3.0" 1462 | path-is-absolute "^1.0.0" 1463 | 1464 | globals@^11.1.0: 1465 | version "11.7.0" 1466 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" 1467 | 1468 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1469 | version "4.1.11" 1470 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1471 | 1472 | graceful-fs@^4.1.15: 1473 | version "4.2.6" 1474 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 1475 | 1476 | growly@^1.3.0: 1477 | version "1.3.0" 1478 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 1479 | 1480 | har-schema@^2.0.0: 1481 | version "2.0.0" 1482 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1483 | 1484 | har-validator@~5.1.3: 1485 | version "5.1.5" 1486 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 1487 | dependencies: 1488 | ajv "^6.12.3" 1489 | har-schema "^2.0.0" 1490 | 1491 | has-flag@^3.0.0: 1492 | version "3.0.0" 1493 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1494 | 1495 | has-value@^0.3.1: 1496 | version "0.3.1" 1497 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1498 | dependencies: 1499 | get-value "^2.0.3" 1500 | has-values "^0.1.4" 1501 | isobject "^2.0.0" 1502 | 1503 | has-value@^1.0.0: 1504 | version "1.0.0" 1505 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1506 | dependencies: 1507 | get-value "^2.0.6" 1508 | has-values "^1.0.0" 1509 | isobject "^3.0.0" 1510 | 1511 | has-values@^0.1.4: 1512 | version "0.1.4" 1513 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1514 | 1515 | has-values@^1.0.0: 1516 | version "1.0.0" 1517 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1518 | dependencies: 1519 | is-number "^3.0.0" 1520 | kind-of "^4.0.0" 1521 | 1522 | has@^1.0.1: 1523 | version "1.0.3" 1524 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1525 | dependencies: 1526 | function-bind "^1.1.1" 1527 | 1528 | hosted-git-info@^2.1.4: 1529 | version "2.7.1" 1530 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 1531 | 1532 | html-encoding-sniffer@^1.0.2: 1533 | version "1.0.2" 1534 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" 1535 | dependencies: 1536 | whatwg-encoding "^1.0.1" 1537 | 1538 | html-escaper@^2.0.0: 1539 | version "2.0.2" 1540 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1541 | 1542 | http-errors@1.6.2: 1543 | version "1.6.2" 1544 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 1545 | dependencies: 1546 | depd "1.1.1" 1547 | inherits "2.0.3" 1548 | setprototypeof "1.0.3" 1549 | statuses ">= 1.3.1 < 2" 1550 | 1551 | http-errors@~1.6.2: 1552 | version "1.6.3" 1553 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" 1554 | dependencies: 1555 | depd "~1.1.2" 1556 | inherits "2.0.3" 1557 | setprototypeof "1.1.0" 1558 | statuses ">= 1.4.0 < 2" 1559 | 1560 | http-signature@~1.2.0: 1561 | version "1.2.0" 1562 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1563 | dependencies: 1564 | assert-plus "^1.0.0" 1565 | jsprim "^1.2.2" 1566 | sshpk "^1.7.0" 1567 | 1568 | iconv-lite@0.4.19: 1569 | version "0.4.19" 1570 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 1571 | 1572 | iconv-lite@0.4.23: 1573 | version "0.4.23" 1574 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 1575 | dependencies: 1576 | safer-buffer ">= 2.1.2 < 3" 1577 | 1578 | import-local@^2.0.0: 1579 | version "2.0.0" 1580 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" 1581 | dependencies: 1582 | pkg-dir "^3.0.0" 1583 | resolve-cwd "^2.0.0" 1584 | 1585 | imurmurhash@^0.1.4: 1586 | version "0.1.4" 1587 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1588 | 1589 | inflight@^1.0.4: 1590 | version "1.0.6" 1591 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1592 | dependencies: 1593 | once "^1.3.0" 1594 | wrappy "1" 1595 | 1596 | inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 1597 | version "2.0.3" 1598 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1599 | 1600 | invariant@^2.2.4: 1601 | version "2.2.4" 1602 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1603 | dependencies: 1604 | loose-envify "^1.0.0" 1605 | 1606 | ipaddr.js@1.8.0: 1607 | version "1.8.0" 1608 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" 1609 | 1610 | is-accessor-descriptor@^0.1.6: 1611 | version "0.1.6" 1612 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1613 | dependencies: 1614 | kind-of "^3.0.2" 1615 | 1616 | is-accessor-descriptor@^1.0.0: 1617 | version "1.0.0" 1618 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1619 | dependencies: 1620 | kind-of "^6.0.0" 1621 | 1622 | is-arrayish@^0.2.1: 1623 | version "0.2.1" 1624 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1625 | 1626 | is-buffer@^1.1.5: 1627 | version "1.1.6" 1628 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1629 | 1630 | is-builtin-module@^1.0.0: 1631 | version "1.0.0" 1632 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1633 | dependencies: 1634 | builtin-modules "^1.0.0" 1635 | 1636 | is-callable@^1.1.1, is-callable@^1.1.3: 1637 | version "1.1.4" 1638 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1639 | 1640 | is-ci@^2.0.0: 1641 | version "2.0.0" 1642 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 1643 | dependencies: 1644 | ci-info "^2.0.0" 1645 | 1646 | is-data-descriptor@^0.1.4: 1647 | version "0.1.4" 1648 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1649 | dependencies: 1650 | kind-of "^3.0.2" 1651 | 1652 | is-data-descriptor@^1.0.0: 1653 | version "1.0.0" 1654 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1655 | dependencies: 1656 | kind-of "^6.0.0" 1657 | 1658 | is-date-object@^1.0.1: 1659 | version "1.0.1" 1660 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1661 | 1662 | is-descriptor@^0.1.0: 1663 | version "0.1.6" 1664 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1665 | dependencies: 1666 | is-accessor-descriptor "^0.1.6" 1667 | is-data-descriptor "^0.1.4" 1668 | kind-of "^5.0.0" 1669 | 1670 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1671 | version "1.0.2" 1672 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1673 | dependencies: 1674 | is-accessor-descriptor "^1.0.0" 1675 | is-data-descriptor "^1.0.0" 1676 | kind-of "^6.0.2" 1677 | 1678 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1679 | version "0.1.1" 1680 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1681 | 1682 | is-extendable@^1.0.1: 1683 | version "1.0.1" 1684 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1685 | dependencies: 1686 | is-plain-object "^2.0.4" 1687 | 1688 | is-fullwidth-code-point@^2.0.0: 1689 | version "2.0.0" 1690 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1691 | 1692 | is-generator-fn@^2.0.0: 1693 | version "2.1.0" 1694 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1695 | 1696 | is-number@^3.0.0: 1697 | version "3.0.0" 1698 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1699 | dependencies: 1700 | kind-of "^3.0.2" 1701 | 1702 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1703 | version "2.0.4" 1704 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1705 | dependencies: 1706 | isobject "^3.0.1" 1707 | 1708 | is-promise@^2.1: 1709 | version "2.1.0" 1710 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1711 | 1712 | is-regex@^1.0.4: 1713 | version "1.0.4" 1714 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1715 | dependencies: 1716 | has "^1.0.1" 1717 | 1718 | is-stream@^1.1.0: 1719 | version "1.1.0" 1720 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1721 | 1722 | is-symbol@^1.0.1: 1723 | version "1.0.1" 1724 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 1725 | 1726 | is-typedarray@~1.0.0: 1727 | version "1.0.0" 1728 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1729 | 1730 | is-windows@^1.0.2: 1731 | version "1.0.2" 1732 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1733 | 1734 | is-wsl@^1.1.0: 1735 | version "1.1.0" 1736 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" 1737 | 1738 | isarray@0.0.1: 1739 | version "0.0.1" 1740 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1741 | 1742 | isarray@1.0.0, isarray@~1.0.0: 1743 | version "1.0.0" 1744 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1745 | 1746 | isexe@^2.0.0: 1747 | version "2.0.0" 1748 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1749 | 1750 | isobject@^2.0.0: 1751 | version "2.1.0" 1752 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1753 | dependencies: 1754 | isarray "1.0.0" 1755 | 1756 | isobject@^3.0.0, isobject@^3.0.1: 1757 | version "3.0.1" 1758 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1759 | 1760 | isstream@~0.1.2: 1761 | version "0.1.2" 1762 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1763 | 1764 | istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: 1765 | version "2.0.5" 1766 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" 1767 | 1768 | istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: 1769 | version "3.3.0" 1770 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" 1771 | dependencies: 1772 | "@babel/generator" "^7.4.0" 1773 | "@babel/parser" "^7.4.3" 1774 | "@babel/template" "^7.4.0" 1775 | "@babel/traverse" "^7.4.3" 1776 | "@babel/types" "^7.4.0" 1777 | istanbul-lib-coverage "^2.0.5" 1778 | semver "^6.0.0" 1779 | 1780 | istanbul-lib-report@^2.0.4: 1781 | version "2.0.8" 1782 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" 1783 | dependencies: 1784 | istanbul-lib-coverage "^2.0.5" 1785 | make-dir "^2.1.0" 1786 | supports-color "^6.1.0" 1787 | 1788 | istanbul-lib-source-maps@^3.0.1: 1789 | version "3.0.6" 1790 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" 1791 | dependencies: 1792 | debug "^4.1.1" 1793 | istanbul-lib-coverage "^2.0.5" 1794 | make-dir "^2.1.0" 1795 | rimraf "^2.6.3" 1796 | source-map "^0.6.1" 1797 | 1798 | istanbul-reports@^2.2.6: 1799 | version "2.2.7" 1800 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" 1801 | dependencies: 1802 | html-escaper "^2.0.0" 1803 | 1804 | iterare@0.0.8: 1805 | version "0.0.8" 1806 | resolved "https://registry.yarnpkg.com/iterare/-/iterare-0.0.8.tgz#a969a80a1fbff6b78f28776594d7bc2bdfab6aad" 1807 | 1808 | jest-changed-files@^24.9.0: 1809 | version "24.9.0" 1810 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" 1811 | dependencies: 1812 | "@jest/types" "^24.9.0" 1813 | execa "^1.0.0" 1814 | throat "^4.0.0" 1815 | 1816 | jest-cli@^24.9.0: 1817 | version "24.9.0" 1818 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" 1819 | dependencies: 1820 | "@jest/core" "^24.9.0" 1821 | "@jest/test-result" "^24.9.0" 1822 | "@jest/types" "^24.9.0" 1823 | chalk "^2.0.1" 1824 | exit "^0.1.2" 1825 | import-local "^2.0.0" 1826 | is-ci "^2.0.0" 1827 | jest-config "^24.9.0" 1828 | jest-util "^24.9.0" 1829 | jest-validate "^24.9.0" 1830 | prompts "^2.0.1" 1831 | realpath-native "^1.1.0" 1832 | yargs "^13.3.0" 1833 | 1834 | jest-config@^24.9.0: 1835 | version "24.9.0" 1836 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" 1837 | dependencies: 1838 | "@babel/core" "^7.1.0" 1839 | "@jest/test-sequencer" "^24.9.0" 1840 | "@jest/types" "^24.9.0" 1841 | babel-jest "^24.9.0" 1842 | chalk "^2.0.1" 1843 | glob "^7.1.1" 1844 | jest-environment-jsdom "^24.9.0" 1845 | jest-environment-node "^24.9.0" 1846 | jest-get-type "^24.9.0" 1847 | jest-jasmine2 "^24.9.0" 1848 | jest-regex-util "^24.3.0" 1849 | jest-resolve "^24.9.0" 1850 | jest-util "^24.9.0" 1851 | jest-validate "^24.9.0" 1852 | micromatch "^3.1.10" 1853 | pretty-format "^24.9.0" 1854 | realpath-native "^1.1.0" 1855 | 1856 | jest-diff@^24.9.0: 1857 | version "24.9.0" 1858 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" 1859 | dependencies: 1860 | chalk "^2.0.1" 1861 | diff-sequences "^24.9.0" 1862 | jest-get-type "^24.9.0" 1863 | pretty-format "^24.9.0" 1864 | 1865 | jest-docblock@^24.3.0: 1866 | version "24.9.0" 1867 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" 1868 | dependencies: 1869 | detect-newline "^2.1.0" 1870 | 1871 | jest-each@^24.9.0: 1872 | version "24.9.0" 1873 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" 1874 | dependencies: 1875 | "@jest/types" "^24.9.0" 1876 | chalk "^2.0.1" 1877 | jest-get-type "^24.9.0" 1878 | jest-util "^24.9.0" 1879 | pretty-format "^24.9.0" 1880 | 1881 | jest-environment-jsdom@^24.9.0: 1882 | version "24.9.0" 1883 | resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" 1884 | dependencies: 1885 | "@jest/environment" "^24.9.0" 1886 | "@jest/fake-timers" "^24.9.0" 1887 | "@jest/types" "^24.9.0" 1888 | jest-mock "^24.9.0" 1889 | jest-util "^24.9.0" 1890 | jsdom "^11.5.1" 1891 | 1892 | jest-environment-node@^24.9.0: 1893 | version "24.9.0" 1894 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" 1895 | dependencies: 1896 | "@jest/environment" "^24.9.0" 1897 | "@jest/fake-timers" "^24.9.0" 1898 | "@jest/types" "^24.9.0" 1899 | jest-mock "^24.9.0" 1900 | jest-util "^24.9.0" 1901 | 1902 | jest-get-type@^24.9.0: 1903 | version "24.9.0" 1904 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" 1905 | 1906 | jest-haste-map@^24.9.0: 1907 | version "24.9.0" 1908 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" 1909 | dependencies: 1910 | "@jest/types" "^24.9.0" 1911 | anymatch "^2.0.0" 1912 | fb-watchman "^2.0.0" 1913 | graceful-fs "^4.1.15" 1914 | invariant "^2.2.4" 1915 | jest-serializer "^24.9.0" 1916 | jest-util "^24.9.0" 1917 | jest-worker "^24.9.0" 1918 | micromatch "^3.1.10" 1919 | sane "^4.0.3" 1920 | walker "^1.0.7" 1921 | optionalDependencies: 1922 | fsevents "^1.2.7" 1923 | 1924 | jest-jasmine2@^24.9.0: 1925 | version "24.9.0" 1926 | resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" 1927 | dependencies: 1928 | "@babel/traverse" "^7.1.0" 1929 | "@jest/environment" "^24.9.0" 1930 | "@jest/test-result" "^24.9.0" 1931 | "@jest/types" "^24.9.0" 1932 | chalk "^2.0.1" 1933 | co "^4.6.0" 1934 | expect "^24.9.0" 1935 | is-generator-fn "^2.0.0" 1936 | jest-each "^24.9.0" 1937 | jest-matcher-utils "^24.9.0" 1938 | jest-message-util "^24.9.0" 1939 | jest-runtime "^24.9.0" 1940 | jest-snapshot "^24.9.0" 1941 | jest-util "^24.9.0" 1942 | pretty-format "^24.9.0" 1943 | throat "^4.0.0" 1944 | 1945 | jest-leak-detector@^24.9.0: 1946 | version "24.9.0" 1947 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" 1948 | dependencies: 1949 | jest-get-type "^24.9.0" 1950 | pretty-format "^24.9.0" 1951 | 1952 | jest-matcher-utils@^24.9.0: 1953 | version "24.9.0" 1954 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" 1955 | dependencies: 1956 | chalk "^2.0.1" 1957 | jest-diff "^24.9.0" 1958 | jest-get-type "^24.9.0" 1959 | pretty-format "^24.9.0" 1960 | 1961 | jest-message-util@^24.9.0: 1962 | version "24.9.0" 1963 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" 1964 | dependencies: 1965 | "@babel/code-frame" "^7.0.0" 1966 | "@jest/test-result" "^24.9.0" 1967 | "@jest/types" "^24.9.0" 1968 | "@types/stack-utils" "^1.0.1" 1969 | chalk "^2.0.1" 1970 | micromatch "^3.1.10" 1971 | slash "^2.0.0" 1972 | stack-utils "^1.0.1" 1973 | 1974 | jest-mock@^24.9.0: 1975 | version "24.9.0" 1976 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" 1977 | dependencies: 1978 | "@jest/types" "^24.9.0" 1979 | 1980 | jest-pnp-resolver@^1.2.1: 1981 | version "1.2.2" 1982 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" 1983 | 1984 | jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: 1985 | version "24.9.0" 1986 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" 1987 | 1988 | jest-resolve-dependencies@^24.9.0: 1989 | version "24.9.0" 1990 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" 1991 | dependencies: 1992 | "@jest/types" "^24.9.0" 1993 | jest-regex-util "^24.3.0" 1994 | jest-snapshot "^24.9.0" 1995 | 1996 | jest-resolve@^24.9.0: 1997 | version "24.9.0" 1998 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" 1999 | dependencies: 2000 | "@jest/types" "^24.9.0" 2001 | browser-resolve "^1.11.3" 2002 | chalk "^2.0.1" 2003 | jest-pnp-resolver "^1.2.1" 2004 | realpath-native "^1.1.0" 2005 | 2006 | jest-runner@^24.9.0: 2007 | version "24.9.0" 2008 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" 2009 | dependencies: 2010 | "@jest/console" "^24.7.1" 2011 | "@jest/environment" "^24.9.0" 2012 | "@jest/test-result" "^24.9.0" 2013 | "@jest/types" "^24.9.0" 2014 | chalk "^2.4.2" 2015 | exit "^0.1.2" 2016 | graceful-fs "^4.1.15" 2017 | jest-config "^24.9.0" 2018 | jest-docblock "^24.3.0" 2019 | jest-haste-map "^24.9.0" 2020 | jest-jasmine2 "^24.9.0" 2021 | jest-leak-detector "^24.9.0" 2022 | jest-message-util "^24.9.0" 2023 | jest-resolve "^24.9.0" 2024 | jest-runtime "^24.9.0" 2025 | jest-util "^24.9.0" 2026 | jest-worker "^24.6.0" 2027 | source-map-support "^0.5.6" 2028 | throat "^4.0.0" 2029 | 2030 | jest-runtime@^24.9.0: 2031 | version "24.9.0" 2032 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" 2033 | dependencies: 2034 | "@jest/console" "^24.7.1" 2035 | "@jest/environment" "^24.9.0" 2036 | "@jest/source-map" "^24.3.0" 2037 | "@jest/transform" "^24.9.0" 2038 | "@jest/types" "^24.9.0" 2039 | "@types/yargs" "^13.0.0" 2040 | chalk "^2.0.1" 2041 | exit "^0.1.2" 2042 | glob "^7.1.3" 2043 | graceful-fs "^4.1.15" 2044 | jest-config "^24.9.0" 2045 | jest-haste-map "^24.9.0" 2046 | jest-message-util "^24.9.0" 2047 | jest-mock "^24.9.0" 2048 | jest-regex-util "^24.3.0" 2049 | jest-resolve "^24.9.0" 2050 | jest-snapshot "^24.9.0" 2051 | jest-util "^24.9.0" 2052 | jest-validate "^24.9.0" 2053 | realpath-native "^1.1.0" 2054 | slash "^2.0.0" 2055 | strip-bom "^3.0.0" 2056 | yargs "^13.3.0" 2057 | 2058 | jest-serializer@^24.9.0: 2059 | version "24.9.0" 2060 | resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" 2061 | 2062 | jest-snapshot@^24.9.0: 2063 | version "24.9.0" 2064 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" 2065 | dependencies: 2066 | "@babel/types" "^7.0.0" 2067 | "@jest/types" "^24.9.0" 2068 | chalk "^2.0.1" 2069 | expect "^24.9.0" 2070 | jest-diff "^24.9.0" 2071 | jest-get-type "^24.9.0" 2072 | jest-matcher-utils "^24.9.0" 2073 | jest-message-util "^24.9.0" 2074 | jest-resolve "^24.9.0" 2075 | mkdirp "^0.5.1" 2076 | natural-compare "^1.4.0" 2077 | pretty-format "^24.9.0" 2078 | semver "^6.2.0" 2079 | 2080 | jest-util@^24.9.0: 2081 | version "24.9.0" 2082 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" 2083 | dependencies: 2084 | "@jest/console" "^24.9.0" 2085 | "@jest/fake-timers" "^24.9.0" 2086 | "@jest/source-map" "^24.9.0" 2087 | "@jest/test-result" "^24.9.0" 2088 | "@jest/types" "^24.9.0" 2089 | callsites "^3.0.0" 2090 | chalk "^2.0.1" 2091 | graceful-fs "^4.1.15" 2092 | is-ci "^2.0.0" 2093 | mkdirp "^0.5.1" 2094 | slash "^2.0.0" 2095 | source-map "^0.6.0" 2096 | 2097 | jest-validate@^24.9.0: 2098 | version "24.9.0" 2099 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" 2100 | dependencies: 2101 | "@jest/types" "^24.9.0" 2102 | camelcase "^5.3.1" 2103 | chalk "^2.0.1" 2104 | jest-get-type "^24.9.0" 2105 | leven "^3.1.0" 2106 | pretty-format "^24.9.0" 2107 | 2108 | jest-watcher@^24.9.0: 2109 | version "24.9.0" 2110 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" 2111 | dependencies: 2112 | "@jest/test-result" "^24.9.0" 2113 | "@jest/types" "^24.9.0" 2114 | "@types/yargs" "^13.0.0" 2115 | ansi-escapes "^3.0.0" 2116 | chalk "^2.0.1" 2117 | jest-util "^24.9.0" 2118 | string-length "^2.0.0" 2119 | 2120 | jest-worker@^24.6.0, jest-worker@^24.9.0: 2121 | version "24.9.0" 2122 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" 2123 | dependencies: 2124 | merge-stream "^2.0.0" 2125 | supports-color "^6.1.0" 2126 | 2127 | jest@^24.9.0: 2128 | version "24.9.0" 2129 | resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" 2130 | dependencies: 2131 | import-local "^2.0.0" 2132 | jest-cli "^24.9.0" 2133 | 2134 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 2135 | version "4.0.0" 2136 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2137 | 2138 | js-yaml@^3.13.1: 2139 | version "3.14.1" 2140 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 2141 | dependencies: 2142 | argparse "^1.0.7" 2143 | esprima "^4.0.0" 2144 | 2145 | jsbn@~0.1.0: 2146 | version "0.1.1" 2147 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 2148 | 2149 | jsdom@^11.5.1: 2150 | version "11.12.0" 2151 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" 2152 | dependencies: 2153 | abab "^2.0.0" 2154 | acorn "^5.5.3" 2155 | acorn-globals "^4.1.0" 2156 | array-equal "^1.0.0" 2157 | cssom ">= 0.3.2 < 0.4.0" 2158 | cssstyle "^1.0.0" 2159 | data-urls "^1.0.0" 2160 | domexception "^1.0.1" 2161 | escodegen "^1.9.1" 2162 | html-encoding-sniffer "^1.0.2" 2163 | left-pad "^1.3.0" 2164 | nwsapi "^2.0.7" 2165 | parse5 "4.0.0" 2166 | pn "^1.1.0" 2167 | request "^2.87.0" 2168 | request-promise-native "^1.0.5" 2169 | sax "^1.2.4" 2170 | symbol-tree "^3.2.2" 2171 | tough-cookie "^2.3.4" 2172 | w3c-hr-time "^1.0.1" 2173 | webidl-conversions "^4.0.2" 2174 | whatwg-encoding "^1.0.3" 2175 | whatwg-mimetype "^2.1.0" 2176 | whatwg-url "^6.4.1" 2177 | ws "^5.2.0" 2178 | xml-name-validator "^3.0.0" 2179 | 2180 | jsesc@^2.5.1: 2181 | version "2.5.1" 2182 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" 2183 | 2184 | json-parse-better-errors@^1.0.1: 2185 | version "1.0.2" 2186 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 2187 | 2188 | json-schema-traverse@^0.4.1: 2189 | version "0.4.1" 2190 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 2191 | 2192 | json-schema@0.2.3: 2193 | version "0.2.3" 2194 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 2195 | 2196 | json-stringify-safe@~5.0.1: 2197 | version "5.0.1" 2198 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 2199 | 2200 | json5@^0.5.0: 2201 | version "0.5.1" 2202 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 2203 | 2204 | json5@^2.1.2: 2205 | version "2.2.0" 2206 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" 2207 | dependencies: 2208 | minimist "^1.2.5" 2209 | 2210 | jsonfile@^4.0.0: 2211 | version "4.0.0" 2212 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 2213 | optionalDependencies: 2214 | graceful-fs "^4.1.6" 2215 | 2216 | jsprim@^1.2.2: 2217 | version "1.4.1" 2218 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 2219 | dependencies: 2220 | assert-plus "1.0.0" 2221 | extsprintf "1.3.0" 2222 | json-schema "0.2.3" 2223 | verror "1.10.0" 2224 | 2225 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 2226 | version "3.2.2" 2227 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 2228 | dependencies: 2229 | is-buffer "^1.1.5" 2230 | 2231 | kind-of@^4.0.0: 2232 | version "4.0.0" 2233 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 2234 | dependencies: 2235 | is-buffer "^1.1.5" 2236 | 2237 | kind-of@^5.0.0: 2238 | version "5.1.0" 2239 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 2240 | 2241 | kind-of@^6.0.0, kind-of@^6.0.2: 2242 | version "6.0.2" 2243 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 2244 | 2245 | kleur@^3.0.3: 2246 | version "3.0.3" 2247 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 2248 | 2249 | lcov-parse@^1.0.0: 2250 | version "1.0.0" 2251 | resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" 2252 | 2253 | left-pad@^1.3.0: 2254 | version "1.3.0" 2255 | resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" 2256 | 2257 | leven@^3.1.0: 2258 | version "3.1.0" 2259 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 2260 | 2261 | levn@~0.3.0: 2262 | version "0.3.0" 2263 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 2264 | dependencies: 2265 | prelude-ls "~1.1.2" 2266 | type-check "~0.3.2" 2267 | 2268 | load-json-file@^4.0.0: 2269 | version "4.0.0" 2270 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 2271 | dependencies: 2272 | graceful-fs "^4.1.2" 2273 | parse-json "^4.0.0" 2274 | pify "^3.0.0" 2275 | strip-bom "^3.0.0" 2276 | 2277 | locate-path@^3.0.0: 2278 | version "3.0.0" 2279 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 2280 | dependencies: 2281 | p-locate "^3.0.0" 2282 | path-exists "^3.0.0" 2283 | 2284 | lodash.get@^4.4.2: 2285 | version "4.4.2" 2286 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 2287 | 2288 | lodash.set@^4.3.2: 2289 | version "4.3.2" 2290 | resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" 2291 | 2292 | lodash.sortby@^4.7.0: 2293 | version "4.7.0" 2294 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 2295 | 2296 | lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.19: 2297 | version "4.17.21" 2298 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 2299 | 2300 | log-driver@^1.2.7: 2301 | version "1.2.7" 2302 | resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" 2303 | 2304 | loose-envify@^1.0.0: 2305 | version "1.4.0" 2306 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 2307 | dependencies: 2308 | js-tokens "^3.0.0 || ^4.0.0" 2309 | 2310 | lru-queue@0.1: 2311 | version "0.1.0" 2312 | resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" 2313 | dependencies: 2314 | es5-ext "~0.10.2" 2315 | 2316 | make-dir@^2.1.0: 2317 | version "2.1.0" 2318 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 2319 | dependencies: 2320 | pify "^4.0.1" 2321 | semver "^5.6.0" 2322 | 2323 | makeerror@1.0.x: 2324 | version "1.0.11" 2325 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 2326 | dependencies: 2327 | tmpl "1.0.x" 2328 | 2329 | map-cache@^0.2.2: 2330 | version "0.2.2" 2331 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 2332 | 2333 | map-visit@^1.0.0: 2334 | version "1.0.0" 2335 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 2336 | dependencies: 2337 | object-visit "^1.0.0" 2338 | 2339 | media-typer@0.3.0: 2340 | version "0.3.0" 2341 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 2342 | 2343 | memoizee@^0.4.3: 2344 | version "0.4.14" 2345 | resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" 2346 | dependencies: 2347 | d "1" 2348 | es5-ext "^0.10.45" 2349 | es6-weak-map "^2.0.2" 2350 | event-emitter "^0.3.5" 2351 | is-promise "^2.1" 2352 | lru-queue "0.1" 2353 | next-tick "1" 2354 | timers-ext "^0.1.5" 2355 | 2356 | merge-descriptors@1.0.1: 2357 | version "1.0.1" 2358 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 2359 | 2360 | merge-stream@^2.0.0: 2361 | version "2.0.0" 2362 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2363 | 2364 | methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: 2365 | version "1.1.2" 2366 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 2367 | 2368 | micromatch@^3.1.10, micromatch@^3.1.4: 2369 | version "3.1.10" 2370 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 2371 | dependencies: 2372 | arr-diff "^4.0.0" 2373 | array-unique "^0.3.2" 2374 | braces "^2.3.1" 2375 | define-property "^2.0.2" 2376 | extend-shallow "^3.0.2" 2377 | extglob "^2.0.4" 2378 | fragment-cache "^0.2.1" 2379 | kind-of "^6.0.2" 2380 | nanomatch "^1.2.9" 2381 | object.pick "^1.3.0" 2382 | regex-not "^1.0.0" 2383 | snapdragon "^0.8.1" 2384 | to-regex "^3.0.2" 2385 | 2386 | mime-db@~1.36.0: 2387 | version "1.36.0" 2388 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" 2389 | 2390 | mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19: 2391 | version "2.1.20" 2392 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" 2393 | dependencies: 2394 | mime-db "~1.36.0" 2395 | 2396 | mime@1.4.1: 2397 | version "1.4.1" 2398 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 2399 | 2400 | mime@^1.4.1: 2401 | version "1.6.0" 2402 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 2403 | 2404 | minimatch@^3.0.4: 2405 | version "3.0.4" 2406 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2407 | dependencies: 2408 | brace-expansion "^1.1.7" 2409 | 2410 | minimist@0.0.8: 2411 | version "0.0.8" 2412 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2413 | 2414 | minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: 2415 | version "1.2.5" 2416 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 2417 | 2418 | mixin-deep@^1.2.0: 2419 | version "1.3.2" 2420 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 2421 | dependencies: 2422 | for-in "^1.0.2" 2423 | is-extendable "^1.0.1" 2424 | 2425 | mkdirp@^0.5.1: 2426 | version "0.5.1" 2427 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2428 | dependencies: 2429 | minimist "0.0.8" 2430 | 2431 | ms@2.0.0: 2432 | version "2.0.0" 2433 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2434 | 2435 | ms@2.1.2: 2436 | version "2.1.2" 2437 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2438 | 2439 | multer@1.3.0: 2440 | version "1.3.0" 2441 | resolved "https://registry.yarnpkg.com/multer/-/multer-1.3.0.tgz#092b2670f6846fa4914965efc8cf94c20fec6cd2" 2442 | dependencies: 2443 | append-field "^0.1.0" 2444 | busboy "^0.2.11" 2445 | concat-stream "^1.5.0" 2446 | mkdirp "^0.5.1" 2447 | object-assign "^3.0.0" 2448 | on-finished "^2.3.0" 2449 | type-is "^1.6.4" 2450 | xtend "^4.0.0" 2451 | 2452 | nan@^2.12.1: 2453 | version "2.14.2" 2454 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 2455 | 2456 | nanomatch@^1.2.9: 2457 | version "1.2.13" 2458 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2459 | dependencies: 2460 | arr-diff "^4.0.0" 2461 | array-unique "^0.3.2" 2462 | define-property "^2.0.2" 2463 | extend-shallow "^3.0.2" 2464 | fragment-cache "^0.2.1" 2465 | is-windows "^1.0.2" 2466 | kind-of "^6.0.2" 2467 | object.pick "^1.3.0" 2468 | regex-not "^1.0.0" 2469 | snapdragon "^0.8.1" 2470 | to-regex "^3.0.1" 2471 | 2472 | natural-compare@^1.4.0: 2473 | version "1.4.0" 2474 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2475 | 2476 | negotiator@0.6.1: 2477 | version "0.6.1" 2478 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 2479 | 2480 | nestjs-config@^1.2.2: 2481 | version "1.4.7" 2482 | resolved "https://registry.yarnpkg.com/nestjs-config/-/nestjs-config-1.4.7.tgz#901046598c8e4dbd98783caf7bf4cd096484c252" 2483 | dependencies: 2484 | dotenv "^8.0.0" 2485 | glob "^7.1.2" 2486 | lodash.get "^4.4.2" 2487 | lodash.set "^4.3.2" 2488 | reflect-metadata "^0.1.12" 2489 | rxjs "^6.0.0" 2490 | 2491 | next-tick@1: 2492 | version "1.0.0" 2493 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 2494 | 2495 | nice-try@^1.0.4: 2496 | version "1.0.5" 2497 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 2498 | 2499 | node-int64@^0.4.0: 2500 | version "0.4.0" 2501 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2502 | 2503 | node-modules-regexp@^1.0.0: 2504 | version "1.0.0" 2505 | resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 2506 | 2507 | node-notifier@^5.4.2: 2508 | version "5.4.3" 2509 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" 2510 | dependencies: 2511 | growly "^1.3.0" 2512 | is-wsl "^1.1.0" 2513 | semver "^5.5.0" 2514 | shellwords "^0.1.1" 2515 | which "^1.3.0" 2516 | 2517 | node-releases@^1.1.70: 2518 | version "1.1.70" 2519 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" 2520 | 2521 | normalize-package-data@^2.3.2: 2522 | version "2.4.0" 2523 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 2524 | dependencies: 2525 | hosted-git-info "^2.1.4" 2526 | is-builtin-module "^1.0.0" 2527 | semver "2 || 3 || 4 || 5" 2528 | validate-npm-package-license "^3.0.1" 2529 | 2530 | normalize-path@^2.1.1: 2531 | version "2.1.1" 2532 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2533 | dependencies: 2534 | remove-trailing-separator "^1.0.1" 2535 | 2536 | npm-run-path@^2.0.0: 2537 | version "2.0.2" 2538 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 2539 | dependencies: 2540 | path-key "^2.0.0" 2541 | 2542 | nwsapi@^2.0.7: 2543 | version "2.0.8" 2544 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.8.tgz#e3603579b7e162b3dbedae4fb24e46f771d8fa24" 2545 | 2546 | oauth-sign@~0.9.0: 2547 | version "0.9.0" 2548 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 2549 | 2550 | object-assign@^3.0.0: 2551 | version "3.0.0" 2552 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" 2553 | 2554 | object-assign@^4: 2555 | version "4.1.1" 2556 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2557 | 2558 | object-copy@^0.1.0: 2559 | version "0.1.0" 2560 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2561 | dependencies: 2562 | copy-descriptor "^0.1.0" 2563 | define-property "^0.2.5" 2564 | kind-of "^3.0.3" 2565 | 2566 | object-hash@1.3.0: 2567 | version "1.3.0" 2568 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.0.tgz#76d9ba6ff113cf8efc0d996102851fe6723963e2" 2569 | 2570 | object-keys@^1.0.12: 2571 | version "1.0.12" 2572 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" 2573 | 2574 | object-visit@^1.0.0: 2575 | version "1.0.1" 2576 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2577 | dependencies: 2578 | isobject "^3.0.0" 2579 | 2580 | object.getownpropertydescriptors@^2.0.3: 2581 | version "2.0.3" 2582 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 2583 | dependencies: 2584 | define-properties "^1.1.2" 2585 | es-abstract "^1.5.1" 2586 | 2587 | object.pick@^1.3.0: 2588 | version "1.3.0" 2589 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2590 | dependencies: 2591 | isobject "^3.0.1" 2592 | 2593 | on-finished@^2.3.0, on-finished@~2.3.0: 2594 | version "2.3.0" 2595 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2596 | dependencies: 2597 | ee-first "1.1.1" 2598 | 2599 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2600 | version "1.4.0" 2601 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2602 | dependencies: 2603 | wrappy "1" 2604 | 2605 | optional@0.1.4: 2606 | version "0.1.4" 2607 | resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3" 2608 | 2609 | optionator@^0.8.1: 2610 | version "0.8.2" 2611 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 2612 | dependencies: 2613 | deep-is "~0.1.3" 2614 | fast-levenshtein "~2.0.4" 2615 | levn "~0.3.0" 2616 | prelude-ls "~1.1.2" 2617 | type-check "~0.3.2" 2618 | wordwrap "~1.0.0" 2619 | 2620 | p-each-series@^1.0.0: 2621 | version "1.0.0" 2622 | resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" 2623 | dependencies: 2624 | p-reduce "^1.0.0" 2625 | 2626 | p-finally@^1.0.0: 2627 | version "1.0.0" 2628 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 2629 | 2630 | p-limit@^2.0.0: 2631 | version "2.3.0" 2632 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2633 | dependencies: 2634 | p-try "^2.0.0" 2635 | 2636 | p-locate@^3.0.0: 2637 | version "3.0.0" 2638 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 2639 | dependencies: 2640 | p-limit "^2.0.0" 2641 | 2642 | p-reduce@^1.0.0: 2643 | version "1.0.0" 2644 | resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" 2645 | 2646 | p-try@^2.0.0: 2647 | version "2.2.0" 2648 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2649 | 2650 | parse-json@^4.0.0: 2651 | version "4.0.0" 2652 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 2653 | dependencies: 2654 | error-ex "^1.3.1" 2655 | json-parse-better-errors "^1.0.1" 2656 | 2657 | parse5@4.0.0: 2658 | version "4.0.0" 2659 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" 2660 | 2661 | parseurl@~1.3.2: 2662 | version "1.3.2" 2663 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 2664 | 2665 | pascalcase@^0.1.1: 2666 | version "0.1.1" 2667 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2668 | 2669 | path-exists@^3.0.0: 2670 | version "3.0.0" 2671 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2672 | 2673 | path-is-absolute@^1.0.0: 2674 | version "1.0.1" 2675 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2676 | 2677 | path-key@^2.0.0, path-key@^2.0.1: 2678 | version "2.0.1" 2679 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2680 | 2681 | path-to-regexp@0.1.7: 2682 | version "0.1.7" 2683 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2684 | 2685 | path-to-regexp@2.2.1: 2686 | version "2.2.1" 2687 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" 2688 | 2689 | path-type@^3.0.0: 2690 | version "3.0.0" 2691 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 2692 | dependencies: 2693 | pify "^3.0.0" 2694 | 2695 | performance-now@^2.1.0: 2696 | version "2.1.0" 2697 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 2698 | 2699 | pify@^3.0.0: 2700 | version "3.0.0" 2701 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2702 | 2703 | pify@^4.0.1: 2704 | version "4.0.1" 2705 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 2706 | 2707 | pirates@^4.0.1: 2708 | version "4.0.1" 2709 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" 2710 | dependencies: 2711 | node-modules-regexp "^1.0.0" 2712 | 2713 | pkg-dir@^3.0.0: 2714 | version "3.0.0" 2715 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 2716 | dependencies: 2717 | find-up "^3.0.0" 2718 | 2719 | pn@^1.1.0: 2720 | version "1.1.0" 2721 | resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" 2722 | 2723 | posix-character-classes@^0.1.0: 2724 | version "0.1.1" 2725 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2726 | 2727 | prelude-ls@~1.1.2: 2728 | version "1.1.2" 2729 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2730 | 2731 | prettier@^1.14.2: 2732 | version "1.14.2" 2733 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" 2734 | 2735 | pretty-format@^24.9.0: 2736 | version "24.9.0" 2737 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" 2738 | dependencies: 2739 | "@jest/types" "^24.9.0" 2740 | ansi-regex "^4.0.0" 2741 | ansi-styles "^3.2.0" 2742 | react-is "^16.8.4" 2743 | 2744 | process-nextick-args@~2.0.0: 2745 | version "2.0.0" 2746 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 2747 | 2748 | prompts@^2.0.1: 2749 | version "2.4.0" 2750 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" 2751 | dependencies: 2752 | kleur "^3.0.3" 2753 | sisteransi "^1.0.5" 2754 | 2755 | proxy-addr@~2.0.3: 2756 | version "2.0.4" 2757 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" 2758 | dependencies: 2759 | forwarded "~0.1.2" 2760 | ipaddr.js "1.8.0" 2761 | 2762 | psl@^1.1.24: 2763 | version "1.1.29" 2764 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" 2765 | 2766 | psl@^1.1.28: 2767 | version "1.8.0" 2768 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 2769 | 2770 | pump@^3.0.0: 2771 | version "3.0.0" 2772 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2773 | dependencies: 2774 | end-of-stream "^1.1.0" 2775 | once "^1.3.1" 2776 | 2777 | punycode@^1.4.1: 2778 | version "1.4.1" 2779 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2780 | 2781 | punycode@^2.1.0, punycode@^2.1.1: 2782 | version "2.1.1" 2783 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2784 | 2785 | qs@6.5.1: 2786 | version "6.5.1" 2787 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 2788 | 2789 | qs@^6.5.1, qs@~6.5.2: 2790 | version "6.5.2" 2791 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 2792 | 2793 | range-parser@~1.2.0: 2794 | version "1.2.0" 2795 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 2796 | 2797 | raw-body@2.3.2: 2798 | version "2.3.2" 2799 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 2800 | dependencies: 2801 | bytes "3.0.0" 2802 | http-errors "1.6.2" 2803 | iconv-lite "0.4.19" 2804 | unpipe "1.0.0" 2805 | 2806 | react-is@^16.8.4: 2807 | version "16.13.1" 2808 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 2809 | 2810 | read-pkg-up@^4.0.0: 2811 | version "4.0.0" 2812 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 2813 | dependencies: 2814 | find-up "^3.0.0" 2815 | read-pkg "^3.0.0" 2816 | 2817 | read-pkg@^3.0.0: 2818 | version "3.0.0" 2819 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2820 | dependencies: 2821 | load-json-file "^4.0.0" 2822 | normalize-package-data "^2.3.2" 2823 | path-type "^3.0.0" 2824 | 2825 | readable-stream@1.1.10: 2826 | version "1.1.10" 2827 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.10.tgz#d4dc2e5319e9c90d1e71c69390ef62cd90827f65" 2828 | dependencies: 2829 | core-util-is "~1.0.0" 2830 | string_decoder "~0.10.x" 2831 | optionalDependencies: 2832 | debuglog "0.0.2" 2833 | 2834 | readable-stream@1.1.x: 2835 | version "1.1.14" 2836 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 2837 | dependencies: 2838 | core-util-is "~1.0.0" 2839 | inherits "~2.0.1" 2840 | isarray "0.0.1" 2841 | string_decoder "~0.10.x" 2842 | 2843 | readable-stream@^2.2.2, readable-stream@^2.3.5: 2844 | version "2.3.6" 2845 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2846 | dependencies: 2847 | core-util-is "~1.0.0" 2848 | inherits "~2.0.3" 2849 | isarray "~1.0.0" 2850 | process-nextick-args "~2.0.0" 2851 | safe-buffer "~5.1.1" 2852 | string_decoder "~1.1.1" 2853 | util-deprecate "~1.0.1" 2854 | 2855 | realpath-native@^1.1.0: 2856 | version "1.1.0" 2857 | resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" 2858 | dependencies: 2859 | util.promisify "^1.0.0" 2860 | 2861 | reflect-metadata@^0.1.12: 2862 | version "0.1.13" 2863 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" 2864 | 2865 | regex-not@^1.0.0, regex-not@^1.0.2: 2866 | version "1.0.2" 2867 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2868 | dependencies: 2869 | extend-shallow "^3.0.2" 2870 | safe-regex "^1.1.0" 2871 | 2872 | remove-trailing-separator@^1.0.1: 2873 | version "1.1.0" 2874 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2875 | 2876 | repeat-element@^1.1.2: 2877 | version "1.1.3" 2878 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2879 | 2880 | repeat-string@^1.6.1: 2881 | version "1.6.1" 2882 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2883 | 2884 | request-promise-core@1.1.1: 2885 | version "1.1.1" 2886 | resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" 2887 | dependencies: 2888 | lodash "^4.13.1" 2889 | 2890 | request-promise-native@^1.0.5: 2891 | version "1.0.5" 2892 | resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" 2893 | dependencies: 2894 | request-promise-core "1.1.1" 2895 | stealthy-require "^1.1.0" 2896 | tough-cookie ">=2.3.3" 2897 | 2898 | request@^2.87.0, request@^2.88.2: 2899 | version "2.88.2" 2900 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 2901 | dependencies: 2902 | aws-sign2 "~0.7.0" 2903 | aws4 "^1.8.0" 2904 | caseless "~0.12.0" 2905 | combined-stream "~1.0.6" 2906 | extend "~3.0.2" 2907 | forever-agent "~0.6.1" 2908 | form-data "~2.3.2" 2909 | har-validator "~5.1.3" 2910 | http-signature "~1.2.0" 2911 | is-typedarray "~1.0.0" 2912 | isstream "~0.1.2" 2913 | json-stringify-safe "~5.0.1" 2914 | mime-types "~2.1.19" 2915 | oauth-sign "~0.9.0" 2916 | performance-now "^2.1.0" 2917 | qs "~6.5.2" 2918 | safe-buffer "^5.1.2" 2919 | tough-cookie "~2.5.0" 2920 | tunnel-agent "^0.6.0" 2921 | uuid "^3.3.2" 2922 | 2923 | require-directory@^2.1.1: 2924 | version "2.1.1" 2925 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2926 | 2927 | require-main-filename@^2.0.0: 2928 | version "2.0.0" 2929 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2930 | 2931 | resolve-cwd@^2.0.0: 2932 | version "2.0.0" 2933 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" 2934 | dependencies: 2935 | resolve-from "^3.0.0" 2936 | 2937 | resolve-from@^3.0.0: 2938 | version "3.0.0" 2939 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 2940 | 2941 | resolve-url@^0.2.1: 2942 | version "0.2.1" 2943 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2944 | 2945 | resolve@1.1.7: 2946 | version "1.1.7" 2947 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2948 | 2949 | ret@~0.1.10: 2950 | version "0.1.15" 2951 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2952 | 2953 | rimraf@^2.5.4: 2954 | version "2.6.2" 2955 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 2956 | dependencies: 2957 | glob "^7.0.5" 2958 | 2959 | rimraf@^2.6.3: 2960 | version "2.7.1" 2961 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2962 | dependencies: 2963 | glob "^7.1.3" 2964 | 2965 | rsvp@^4.8.4: 2966 | version "4.8.5" 2967 | resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" 2968 | 2969 | rxjs@^6.0.0: 2970 | version "6.2.2" 2971 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" 2972 | dependencies: 2973 | tslib "^1.9.0" 2974 | 2975 | safe-buffer@5.1.1: 2976 | version "5.1.1" 2977 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 2978 | 2979 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2980 | version "5.1.2" 2981 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2982 | 2983 | safe-regex@^1.1.0: 2984 | version "1.1.0" 2985 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2986 | dependencies: 2987 | ret "~0.1.10" 2988 | 2989 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2990 | version "2.1.2" 2991 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2992 | 2993 | sane@^4.0.3: 2994 | version "4.1.0" 2995 | resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" 2996 | dependencies: 2997 | "@cnakazawa/watch" "^1.0.3" 2998 | anymatch "^2.0.0" 2999 | capture-exit "^2.0.0" 3000 | exec-sh "^0.3.2" 3001 | execa "^1.0.0" 3002 | fb-watchman "^2.0.0" 3003 | micromatch "^3.1.4" 3004 | minimist "^1.1.1" 3005 | walker "~1.0.5" 3006 | 3007 | sax@>=0.1.1, sax@^1.2.4: 3008 | version "1.2.4" 3009 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 3010 | 3011 | "semver@2 || 3 || 4 || 5", semver@^5.5.0: 3012 | version "5.5.1" 3013 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" 3014 | 3015 | semver@5.1.0: 3016 | version "5.1.0" 3017 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5" 3018 | 3019 | semver@7.0.0: 3020 | version "7.0.0" 3021 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" 3022 | 3023 | semver@^5.6.0: 3024 | version "5.7.1" 3025 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 3026 | 3027 | semver@^6.0.0, semver@^6.2.0: 3028 | version "6.3.0" 3029 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 3030 | 3031 | send@0.16.2: 3032 | version "0.16.2" 3033 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" 3034 | dependencies: 3035 | debug "2.6.9" 3036 | depd "~1.1.2" 3037 | destroy "~1.0.4" 3038 | encodeurl "~1.0.2" 3039 | escape-html "~1.0.3" 3040 | etag "~1.8.1" 3041 | fresh "0.5.2" 3042 | http-errors "~1.6.2" 3043 | mime "1.4.1" 3044 | ms "2.0.0" 3045 | on-finished "~2.3.0" 3046 | range-parser "~1.2.0" 3047 | statuses "~1.4.0" 3048 | 3049 | serve-static@1.13.2: 3050 | version "1.13.2" 3051 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" 3052 | dependencies: 3053 | encodeurl "~1.0.2" 3054 | escape-html "~1.0.3" 3055 | parseurl "~1.3.2" 3056 | send "0.16.2" 3057 | 3058 | set-blocking@^2.0.0: 3059 | version "2.0.0" 3060 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 3061 | 3062 | set-value@^0.4.3: 3063 | version "0.4.3" 3064 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 3065 | dependencies: 3066 | extend-shallow "^2.0.1" 3067 | is-extendable "^0.1.1" 3068 | is-plain-object "^2.0.1" 3069 | to-object-path "^0.3.0" 3070 | 3071 | set-value@^2.0.0: 3072 | version "2.0.0" 3073 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 3074 | dependencies: 3075 | extend-shallow "^2.0.1" 3076 | is-extendable "^0.1.1" 3077 | is-plain-object "^2.0.3" 3078 | split-string "^3.0.1" 3079 | 3080 | setprototypeof@1.0.3: 3081 | version "1.0.3" 3082 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 3083 | 3084 | setprototypeof@1.1.0: 3085 | version "1.1.0" 3086 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 3087 | 3088 | shebang-command@^1.2.0: 3089 | version "1.2.0" 3090 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 3091 | dependencies: 3092 | shebang-regex "^1.0.0" 3093 | 3094 | shebang-regex@^1.0.0: 3095 | version "1.0.0" 3096 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 3097 | 3098 | shellwords@^0.1.1: 3099 | version "0.1.1" 3100 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 3101 | 3102 | signal-exit@^3.0.0, signal-exit@^3.0.2: 3103 | version "3.0.2" 3104 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 3105 | 3106 | sisteransi@^1.0.5: 3107 | version "1.0.5" 3108 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 3109 | 3110 | slash@^2.0.0: 3111 | version "2.0.0" 3112 | resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" 3113 | 3114 | snapdragon-node@^2.0.1: 3115 | version "2.1.1" 3116 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 3117 | dependencies: 3118 | define-property "^1.0.0" 3119 | isobject "^3.0.0" 3120 | snapdragon-util "^3.0.1" 3121 | 3122 | snapdragon-util@^3.0.1: 3123 | version "3.0.1" 3124 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 3125 | dependencies: 3126 | kind-of "^3.2.0" 3127 | 3128 | snapdragon@^0.8.1: 3129 | version "0.8.2" 3130 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 3131 | dependencies: 3132 | base "^0.11.1" 3133 | debug "^2.2.0" 3134 | define-property "^0.2.5" 3135 | extend-shallow "^2.0.1" 3136 | map-cache "^0.2.2" 3137 | source-map "^0.5.6" 3138 | source-map-resolve "^0.5.0" 3139 | use "^3.1.0" 3140 | 3141 | source-map-resolve@^0.5.0: 3142 | version "0.5.2" 3143 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 3144 | dependencies: 3145 | atob "^2.1.1" 3146 | decode-uri-component "^0.2.0" 3147 | resolve-url "^0.2.1" 3148 | source-map-url "^0.4.0" 3149 | urix "^0.1.0" 3150 | 3151 | source-map-support@^0.5.6: 3152 | version "0.5.9" 3153 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" 3154 | dependencies: 3155 | buffer-from "^1.0.0" 3156 | source-map "^0.6.0" 3157 | 3158 | source-map-url@^0.4.0: 3159 | version "0.4.0" 3160 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 3161 | 3162 | source-map@^0.5.0, source-map@^0.5.6: 3163 | version "0.5.7" 3164 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 3165 | 3166 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 3167 | version "0.6.1" 3168 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 3169 | 3170 | spdx-correct@^3.0.0: 3171 | version "3.0.0" 3172 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" 3173 | dependencies: 3174 | spdx-expression-parse "^3.0.0" 3175 | spdx-license-ids "^3.0.0" 3176 | 3177 | spdx-exceptions@^2.1.0: 3178 | version "2.1.0" 3179 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" 3180 | 3181 | spdx-expression-parse@^3.0.0: 3182 | version "3.0.0" 3183 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 3184 | dependencies: 3185 | spdx-exceptions "^2.1.0" 3186 | spdx-license-ids "^3.0.0" 3187 | 3188 | spdx-license-ids@^3.0.0: 3189 | version "3.0.0" 3190 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" 3191 | 3192 | split-string@^3.0.1, split-string@^3.0.2: 3193 | version "3.1.0" 3194 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 3195 | dependencies: 3196 | extend-shallow "^3.0.0" 3197 | 3198 | sprintf-js@~1.0.2: 3199 | version "1.0.3" 3200 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 3201 | 3202 | sshpk@^1.7.0: 3203 | version "1.14.2" 3204 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" 3205 | dependencies: 3206 | asn1 "~0.2.3" 3207 | assert-plus "^1.0.0" 3208 | dashdash "^1.12.0" 3209 | getpass "^0.1.1" 3210 | safer-buffer "^2.0.2" 3211 | optionalDependencies: 3212 | bcrypt-pbkdf "^1.0.0" 3213 | ecc-jsbn "~0.1.1" 3214 | jsbn "~0.1.0" 3215 | tweetnacl "~0.14.0" 3216 | 3217 | stack-utils@^1.0.1: 3218 | version "1.0.1" 3219 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" 3220 | 3221 | static-extend@^0.1.1: 3222 | version "0.1.2" 3223 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 3224 | dependencies: 3225 | define-property "^0.2.5" 3226 | object-copy "^0.1.0" 3227 | 3228 | "statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": 3229 | version "1.5.0" 3230 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 3231 | 3232 | statuses@~1.4.0: 3233 | version "1.4.0" 3234 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 3235 | 3236 | stealthy-require@^1.1.0: 3237 | version "1.1.1" 3238 | resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" 3239 | 3240 | streamsearch@0.1.2: 3241 | version "0.1.2" 3242 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" 3243 | 3244 | string-length@^2.0.0: 3245 | version "2.0.0" 3246 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" 3247 | dependencies: 3248 | astral-regex "^1.0.0" 3249 | strip-ansi "^4.0.0" 3250 | 3251 | string-width@^3.0.0, string-width@^3.1.0: 3252 | version "3.1.0" 3253 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 3254 | dependencies: 3255 | emoji-regex "^7.0.1" 3256 | is-fullwidth-code-point "^2.0.0" 3257 | strip-ansi "^5.1.0" 3258 | 3259 | string_decoder@~0.10.x: 3260 | version "0.10.31" 3261 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 3262 | 3263 | string_decoder@~1.1.1: 3264 | version "1.1.1" 3265 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 3266 | dependencies: 3267 | safe-buffer "~5.1.0" 3268 | 3269 | strip-ansi@^4.0.0: 3270 | version "4.0.0" 3271 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 3272 | dependencies: 3273 | ansi-regex "^3.0.0" 3274 | 3275 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 3276 | version "5.2.0" 3277 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 3278 | dependencies: 3279 | ansi-regex "^4.1.0" 3280 | 3281 | strip-bom@^3.0.0: 3282 | version "3.0.0" 3283 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 3284 | 3285 | strip-eof@^1.0.0: 3286 | version "1.0.0" 3287 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 3288 | 3289 | superagent@^3.8.3: 3290 | version "3.8.3" 3291 | resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" 3292 | dependencies: 3293 | component-emitter "^1.2.0" 3294 | cookiejar "^2.1.0" 3295 | debug "^3.1.0" 3296 | extend "^3.0.0" 3297 | form-data "^2.3.1" 3298 | formidable "^1.2.0" 3299 | methods "^1.1.1" 3300 | mime "^1.4.1" 3301 | qs "^6.5.1" 3302 | readable-stream "^2.3.5" 3303 | 3304 | supertest@^3.3.0: 3305 | version "3.3.0" 3306 | resolved "https://registry.yarnpkg.com/supertest/-/supertest-3.3.0.tgz#79b27bd7d34392974ab33a31fa51a3e23385987e" 3307 | dependencies: 3308 | methods "^1.1.2" 3309 | superagent "^3.8.3" 3310 | 3311 | supports-color@^5.3.0: 3312 | version "5.5.0" 3313 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 3314 | dependencies: 3315 | has-flag "^3.0.0" 3316 | 3317 | supports-color@^6.1.0: 3318 | version "6.1.0" 3319 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 3320 | dependencies: 3321 | has-flag "^3.0.0" 3322 | 3323 | symbol-tree@^3.2.2: 3324 | version "3.2.2" 3325 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" 3326 | 3327 | test-exclude@^5.2.3: 3328 | version "5.2.3" 3329 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" 3330 | dependencies: 3331 | glob "^7.1.3" 3332 | minimatch "^3.0.4" 3333 | read-pkg-up "^4.0.0" 3334 | require-main-filename "^2.0.0" 3335 | 3336 | throat@^4.0.0: 3337 | version "4.1.0" 3338 | resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" 3339 | 3340 | timers-ext@0.1, timers-ext@^0.1.5: 3341 | version "0.1.5" 3342 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.5.tgz#77147dd4e76b660c2abb8785db96574cbbd12922" 3343 | dependencies: 3344 | es5-ext "~0.10.14" 3345 | next-tick "1" 3346 | 3347 | tmpl@1.0.x: 3348 | version "1.0.4" 3349 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 3350 | 3351 | to-fast-properties@^2.0.0: 3352 | version "2.0.0" 3353 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 3354 | 3355 | to-object-path@^0.3.0: 3356 | version "0.3.0" 3357 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 3358 | dependencies: 3359 | kind-of "^3.0.2" 3360 | 3361 | to-regex-range@^2.1.0: 3362 | version "2.1.1" 3363 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 3364 | dependencies: 3365 | is-number "^3.0.0" 3366 | repeat-string "^1.6.1" 3367 | 3368 | to-regex@^3.0.1, to-regex@^3.0.2: 3369 | version "3.0.2" 3370 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 3371 | dependencies: 3372 | define-property "^2.0.2" 3373 | extend-shallow "^3.0.2" 3374 | regex-not "^1.0.2" 3375 | safe-regex "^1.1.0" 3376 | 3377 | tough-cookie@>=2.3.3, tough-cookie@^2.3.4: 3378 | version "2.4.3" 3379 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" 3380 | dependencies: 3381 | psl "^1.1.24" 3382 | punycode "^1.4.1" 3383 | 3384 | tough-cookie@~2.5.0: 3385 | version "2.5.0" 3386 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 3387 | dependencies: 3388 | psl "^1.1.28" 3389 | punycode "^2.1.1" 3390 | 3391 | tr46@^1.0.1: 3392 | version "1.0.1" 3393 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 3394 | dependencies: 3395 | punycode "^2.1.0" 3396 | 3397 | ts-jest@^23.1.4: 3398 | version "23.1.4" 3399 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.1.4.tgz#66ac1d8d3fbf8f9a98432b11aa377aa850664b2b" 3400 | dependencies: 3401 | closest-file-data "^0.1.4" 3402 | fs-extra "6.0.1" 3403 | json5 "^0.5.0" 3404 | lodash "^4.17.10" 3405 | 3406 | tslib@^1.9.0: 3407 | version "1.9.3" 3408 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 3409 | 3410 | tunnel-agent@^0.6.0: 3411 | version "0.6.0" 3412 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 3413 | dependencies: 3414 | safe-buffer "^5.0.1" 3415 | 3416 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 3417 | version "0.14.5" 3418 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 3419 | 3420 | type-check@~0.3.2: 3421 | version "0.3.2" 3422 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 3423 | dependencies: 3424 | prelude-ls "~1.1.2" 3425 | 3426 | type-is@^1.6.4, type-is@~1.6.15, type-is@~1.6.16: 3427 | version "1.6.16" 3428 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" 3429 | dependencies: 3430 | media-typer "0.3.0" 3431 | mime-types "~2.1.18" 3432 | 3433 | typedarray@^0.0.6: 3434 | version "0.0.6" 3435 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 3436 | 3437 | typescript@^3.0.3: 3438 | version "3.9.9" 3439 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" 3440 | 3441 | underscore@1.8.3: 3442 | version "1.8.3" 3443 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" 3444 | 3445 | union-value@^1.0.0: 3446 | version "1.0.0" 3447 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 3448 | dependencies: 3449 | arr-union "^3.1.0" 3450 | get-value "^2.0.6" 3451 | is-extendable "^0.1.1" 3452 | set-value "^0.4.3" 3453 | 3454 | universalify@^0.1.0: 3455 | version "0.1.2" 3456 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 3457 | 3458 | unpipe@1.0.0, unpipe@~1.0.0: 3459 | version "1.0.0" 3460 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 3461 | 3462 | unset-value@^1.0.0: 3463 | version "1.0.0" 3464 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3465 | dependencies: 3466 | has-value "^0.3.1" 3467 | isobject "^3.0.0" 3468 | 3469 | uri-js@^4.2.2: 3470 | version "4.4.1" 3471 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 3472 | dependencies: 3473 | punycode "^2.1.0" 3474 | 3475 | urix@^0.1.0: 3476 | version "0.1.0" 3477 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3478 | 3479 | use@^3.1.0: 3480 | version "3.1.1" 3481 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 3482 | 3483 | util-deprecate@~1.0.1: 3484 | version "1.0.2" 3485 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3486 | 3487 | util.promisify@^1.0.0: 3488 | version "1.0.0" 3489 | resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" 3490 | dependencies: 3491 | define-properties "^1.1.2" 3492 | object.getownpropertydescriptors "^2.0.3" 3493 | 3494 | utils-merge@1.0.1: 3495 | version "1.0.1" 3496 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 3497 | 3498 | uuid@^3.3.2: 3499 | version "3.3.2" 3500 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 3501 | 3502 | validate-npm-package-license@^3.0.1: 3503 | version "3.0.4" 3504 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 3505 | dependencies: 3506 | spdx-correct "^3.0.0" 3507 | spdx-expression-parse "^3.0.0" 3508 | 3509 | vary@^1, vary@~1.1.2: 3510 | version "1.1.2" 3511 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 3512 | 3513 | verror@1.10.0: 3514 | version "1.10.0" 3515 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 3516 | dependencies: 3517 | assert-plus "^1.0.0" 3518 | core-util-is "1.0.2" 3519 | extsprintf "^1.2.0" 3520 | 3521 | w3c-hr-time@^1.0.1: 3522 | version "1.0.1" 3523 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" 3524 | dependencies: 3525 | browser-process-hrtime "^0.1.2" 3526 | 3527 | walker@^1.0.7, walker@~1.0.5: 3528 | version "1.0.7" 3529 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 3530 | dependencies: 3531 | makeerror "1.0.x" 3532 | 3533 | webidl-conversions@^4.0.2: 3534 | version "4.0.2" 3535 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 3536 | 3537 | whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: 3538 | version "1.0.4" 3539 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" 3540 | dependencies: 3541 | iconv-lite "0.4.23" 3542 | 3543 | whatwg-mimetype@^2.1.0: 3544 | version "2.1.0" 3545 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" 3546 | 3547 | whatwg-url@^6.4.1: 3548 | version "6.5.0" 3549 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" 3550 | dependencies: 3551 | lodash.sortby "^4.7.0" 3552 | tr46 "^1.0.1" 3553 | webidl-conversions "^4.0.2" 3554 | 3555 | whatwg-url@^7.0.0: 3556 | version "7.0.0" 3557 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" 3558 | dependencies: 3559 | lodash.sortby "^4.7.0" 3560 | tr46 "^1.0.1" 3561 | webidl-conversions "^4.0.2" 3562 | 3563 | which-module@^2.0.0: 3564 | version "2.0.0" 3565 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 3566 | 3567 | which@^1.2.9, which@^1.3.0: 3568 | version "1.3.1" 3569 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3570 | dependencies: 3571 | isexe "^2.0.0" 3572 | 3573 | wordwrap@~1.0.0: 3574 | version "1.0.0" 3575 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 3576 | 3577 | wrap-ansi@^5.1.0: 3578 | version "5.1.0" 3579 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 3580 | dependencies: 3581 | ansi-styles "^3.2.0" 3582 | string-width "^3.0.0" 3583 | strip-ansi "^5.0.0" 3584 | 3585 | wrappy@1: 3586 | version "1.0.2" 3587 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3588 | 3589 | write-file-atomic@2.4.1: 3590 | version "2.4.1" 3591 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" 3592 | dependencies: 3593 | graceful-fs "^4.1.11" 3594 | imurmurhash "^0.1.4" 3595 | signal-exit "^3.0.2" 3596 | 3597 | ws@^5.2.0: 3598 | version "5.2.3" 3599 | resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" 3600 | dependencies: 3601 | async-limiter "~1.0.0" 3602 | 3603 | xml-name-validator@^3.0.0: 3604 | version "3.0.0" 3605 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" 3606 | 3607 | xml2js@0.1.13: 3608 | version "0.1.13" 3609 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.1.13.tgz#438ff3b1d85a51ad659ffc2ebe83403e10c98722" 3610 | dependencies: 3611 | sax ">=0.1.1" 3612 | 3613 | xtend@^4.0.0: 3614 | version "4.0.1" 3615 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 3616 | 3617 | y18n@^4.0.0: 3618 | version "4.0.1" 3619 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 3620 | 3621 | yargs-parser@^13.1.2: 3622 | version "13.1.2" 3623 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 3624 | dependencies: 3625 | camelcase "^5.0.0" 3626 | decamelize "^1.2.0" 3627 | 3628 | yargs@^13.3.0: 3629 | version "13.3.2" 3630 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 3631 | dependencies: 3632 | cliui "^5.0.0" 3633 | find-up "^3.0.0" 3634 | get-caller-file "^2.0.1" 3635 | require-directory "^2.1.1" 3636 | require-main-filename "^2.0.0" 3637 | set-blocking "^2.0.0" 3638 | string-width "^3.0.0" 3639 | which-module "^2.0.0" 3640 | y18n "^4.0.0" 3641 | yargs-parser "^13.1.2" 3642 | --------------------------------------------------------------------------------