├── .github └── workflows │ └── test.yml ├── .gitignore ├── .yarnrc ├── README.md ├── docs └── ru │ └── README.md ├── package.json ├── rollup.config.js ├── src ├── class-component.tsx ├── context.ts ├── hooks.ts ├── index.ts └── utils.ts ├── test ├── class-components-forward-ref.spec.tsx ├── class-components.spec.tsx ├── fixtures │ ├── class-components-forward-ref.tsx │ ├── class-components.tsx │ ├── container.ts │ ├── hooks.tsx │ ├── service.ts │ └── tokens.ts ├── helpers │ └── withContext.tsx ├── hooks.spec.tsx └── tsconfig.json ├── tsconfig.base.json ├── tsconfig.json └── yarn.lock /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | workflow_dispatch: 9 | 10 | jobs: 11 | test: 12 | runs-on: ubuntu-18.04 13 | steps: 14 | - uses: actions/checkout@v2 15 | - name: setup node 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: '12.x' 19 | - run: yarn --production=false 20 | - run: yarn test 21 | env: 22 | CI: true 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### JetBrains template 3 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 4 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 5 | 6 | # User-specific stuff 7 | .idea/**/workspace.xml 8 | .idea/**/tasks.xml 9 | .idea/**/usage.statistics.xml 10 | .idea/**/dictionaries 11 | .idea/**/shelf 12 | 13 | # Generated files 14 | .idea/**/contentModel.xml 15 | 16 | # Sensitive or high-churn files 17 | .idea/**/dataSources/ 18 | .idea/**/dataSources.ids 19 | .idea/**/dataSources.local.xml 20 | .idea/**/sqlDataSources.xml 21 | .idea/**/dynamic.xml 22 | .idea/**/uiDesigner.xml 23 | .idea/**/dbnavigator.xml 24 | 25 | # Gradle 26 | .idea/**/gradle.xml 27 | .idea/**/libraries 28 | 29 | # Gradle and Maven with auto-import 30 | # When using Gradle or Maven with auto-import, you should exclude module files, 31 | # since they will be recreated, and may cause churn. Uncomment if using 32 | # auto-import. 33 | # .idea/artifacts 34 | # .idea/compiler.xml 35 | # .idea/jarRepositories.xml 36 | # .idea/modules.xml 37 | # .idea/*.iml 38 | # .idea/modules 39 | # *.iml 40 | # *.ipr 41 | 42 | # CMake 43 | cmake-build-*/ 44 | 45 | # Mongo Explorer plugin 46 | .idea/**/mongoSettings.xml 47 | 48 | # File-based project format 49 | *.iws 50 | 51 | # IntelliJ 52 | out/ 53 | 54 | # mpeltonen/sbt-idea plugin 55 | .idea_modules/ 56 | 57 | # JIRA plugin 58 | atlassian-ide-plugin.xml 59 | 60 | # Cursive Clojure plugin 61 | .idea/replstate.xml 62 | 63 | # Crashlytics plugin (for Android Studio and IntelliJ) 64 | com_crashlytics_export_strings.xml 65 | crashlytics.properties 66 | crashlytics-build.properties 67 | fabric.properties 68 | 69 | # Editor-based Rest Client 70 | .idea/httpRequests 71 | 72 | # Android studio 3.1+ serialized cache file 73 | .idea/caches/build_file_checksums.ser 74 | 75 | ### Node template 76 | # Logs 77 | logs 78 | *.log 79 | npm-debug.log* 80 | yarn-debug.log* 81 | yarn-error.log* 82 | lerna-debug.log* 83 | 84 | # Diagnostic reports (https://nodejs.org/api/report.html) 85 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 86 | 87 | # Runtime data 88 | pids 89 | *.pid 90 | *.seed 91 | *.pid.lock 92 | 93 | # Directory for instrumented libs generated by jscoverage/JSCover 94 | lib-cov 95 | 96 | # Coverage directory used by tools like istanbul 97 | coverage 98 | *.lcov 99 | 100 | # nyc test coverage 101 | .nyc_output 102 | 103 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 104 | .grunt 105 | 106 | # Bower dependency directory (https://bower.io/) 107 | bower_components 108 | 109 | # node-waf configuration 110 | .lock-wscript 111 | 112 | # Compiled binary addons (https://nodejs.org/api/addons.html) 113 | build/Release 114 | 115 | # Dependency directories 116 | node_modules/ 117 | jspm_packages/ 118 | 119 | # Snowpack dependency directory (https://snowpack.dev/) 120 | web_modules/ 121 | 122 | # TypeScript cache 123 | *.tsbuildinfo 124 | 125 | # Optional npm cache directory 126 | .npm 127 | 128 | # Optional eslint cache 129 | .eslintcache 130 | 131 | # Microbundle cache 132 | .rpt2_cache/ 133 | .rts2_cache_cjs/ 134 | .rts2_cache_es/ 135 | .rts2_cache_umd/ 136 | 137 | # Optional REPL history 138 | .node_repl_history 139 | 140 | # Output of 'npm pack' 141 | *.tgz 142 | 143 | # Yarn Integrity file 144 | .yarn-integrity 145 | 146 | # dotenv environment variables file 147 | .env 148 | .env.test 149 | 150 | # parcel-bundler cache (https://parceljs.org/) 151 | .cache 152 | .parcel-cache 153 | 154 | # Next.js build output 155 | .next 156 | 157 | # Nuxt.js build / generate output 158 | .nuxt 159 | dist 160 | 161 | # Gatsby files 162 | .cache/ 163 | # Comment in the public line in if your project uses Gatsby and not Next.js 164 | # https://nextjs.org/blog/next-9-1#public-directory-support 165 | # public 166 | 167 | # vuepress build output 168 | .vuepress/dist 169 | 170 | # Serverless directories 171 | .serverless/ 172 | 173 | # FuseBox cache 174 | .fusebox/ 175 | 176 | # DynamoDB Local files 177 | .dynamodb/ 178 | 179 | # TernJS port file 180 | .tern-port 181 | 182 | # Stores VSCode versions used for testing VSCode extensions 183 | .vscode-test 184 | 185 | # yarn v2 186 | 187 | .yarn/cache 188 | .yarn/unplugged 189 | .yarn/build-state.yml 190 | .pnp.* 191 | 192 | .idea 193 | 194 | esnext 195 | dist 196 | types 197 | 198 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | version-git-message "chore: v%s" 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-inversify 2 | 3 | Collection of decorators and hooks for interaction with [InversifyJS](https://github.com/inversify/InversifyJS/) container within [React](https://github.com/facebook/react) components. 4 | 5 |
6 | Version 7 | Test status 8 |
9 | 10 | [RU](https://github.com/org-redtea/react-inversify/blob/master/docs/ru/README.md) 11 | 12 | ## Installation 13 | 14 | Yarn 15 | ```bash 16 | $ yarn add -E @redtea/react-inversify 17 | ``` 18 | Npm 19 | ```bash 20 | $ npm install -E @redtea/react-inversify 21 | ``` 22 | 23 | ## Example 24 | 25 | ```typescript 26 | import {useService} from '@redtea/react-inversify'; 27 | 28 | function ReactComponent(props: {}) { 29 | const service = useService(TYPES.service); 30 | return service.getMessage(); 31 | } 32 | ``` 33 | 34 | ## Before usage 35 | 36 | Connect container 37 | 38 | ```typescript 39 | import 'reflect-metadata'; 40 | import React from 'react'; 41 | import ReactDOM from 'react-dom'; 42 | import {Container} from 'inversify'; 43 | import {Context, useService} from '@reatea/react-inversify'; 44 | 45 | const ReactComponent: React.FC<{}> = (props) => { 46 | const service = useService(TYPES.service); 47 | return service.getMessage(); 48 | } 49 | 50 | const App: React.FC<{container: Container}> = (props) => ( 51 | 52 | 53 | 54 | ); 55 | 56 | const container = new Container(); 57 | 58 | // ...binding services to container 59 | 60 | ReactDOM.render(, document.getElementById('root')); 61 | ``` 62 | 63 | ## Hooks 64 | 65 | * [useContainer()](#usecontainer) 66 | * [useService(id)](#useserviceid) 67 | * [useAllServices(id)](#useallservicesid) 68 | * [useNamedService(id, named)](#usenamedserviceid-named) 69 | * [useAllNamedServices(id, named)](#useallnamedservicesid-named) 70 | * [useTaggedService(id, key, value)](#usetaggedserviceid-key-value) 71 | * [useAllTaggedServices(id, key, value)](#usealltaggedservicesid-key-value) 72 | * [useResolve(constructor)](#useresolveconstructor) 73 | 74 | #### useContainer() 75 | 76 | [↑ back](#hooks) 77 | 78 | Get container. 79 | 80 | (see [Container](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 81 | 82 | ```typescript 83 | import {useContainer} from '@redtea/react-inversify'; 84 | 85 | function ReactComponent(props: {}) { 86 | const container = useContainer(); 87 | const service = React.useMemo( 88 | () => container.get('service'), 89 | [container] 90 | ); 91 | return service.getMessage(); 92 | } 93 | ``` 94 | 95 | #### useService(id) 96 | 97 | [↑ back](#hooks) 98 | 99 | Get service by identifier `id`. 100 | 101 | (see [Container.get](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 102 | 103 | ```typescript 104 | import {useService} from '@redtea/react-inversify'; 105 | 106 | function ReactComponent(props: {}) { 107 | const service = useService(TYPES.service); 108 | return service.getMessage(); 109 | } 110 | ``` 111 | 112 | #### useAllServices(id) 113 | 114 | [↑ back](#hooks) 115 | 116 | Get all services by identifier `id`. 117 | 118 | (see [Container.getAll](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetall)) 119 | 120 | ```typescript 121 | import {useAllServices} from '@redtea/react-inversify'; 122 | 123 | function ReactComponent(props: {}) { 124 | const services = useAllServices(TYPES.service); 125 | return services 126 | .map(_ => _.getMessage()) 127 | .join(','); 128 | } 129 | ``` 130 | 131 | #### useNamedService(id, named) 132 | 133 | [↑ back](#hooks) 134 | 135 | Get service by identifier `id` and name `named`. 136 | 137 | (see [Container.getNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetnamed)) 138 | 139 | ```typescript 140 | import {useNamedService} from '@redtea/react-inversify'; 141 | 142 | function ReactComponent(props: {}) { 143 | const service = useNamedService(TYPES.service, 'name'); 144 | return service.getMessage(); 145 | } 146 | ``` 147 | 148 | #### useAllNamedServices(id, named) 149 | 150 | [↑ back](#hooks) 151 | 152 | Get all services by identifier `id` and name `named`. 153 | 154 | (see [Container.getAllNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetallnamed)) 155 | 156 | ```typescript 157 | import {useAllNamedService} from '@redtea/react-inversify'; 158 | 159 | function ReactComponent(props: {}) { 160 | const services = useAllNamedService(TYPES.service, 'name'); 161 | return services 162 | .map(_ => _.getMessage()) 163 | .join(','); 164 | } 165 | ``` 166 | 167 | #### useTaggedService(id, key, value) 168 | 169 | [↑ back](#hooks) 170 | 171 | Get service by identifier `id`, tag key `key` и tag value `value`. 172 | 173 | (see [Container.getTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergettagged)) 174 | 175 | ```typescript 176 | import {useTaggedService} from '@redtea/react-inversify'; 177 | 178 | function ReactComponent(props: {}) { 179 | const service = useTaggedService(TYPES.service, 'key', 'value'); 180 | return service.getMessage(); 181 | } 182 | ``` 183 | 184 | #### useAllTaggedServices(id, key, value) 185 | 186 | [↑ back](#hooks) 187 | 188 | Get all services by identifier `id`, tag key `key` и tag value `value`. 189 | 190 | (see [Container.getAllTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetalltagged)) 191 | 192 | ```typescript 193 | import {useAllTaggedService} from '@redtea/react-inversify'; 194 | 195 | function ReactComponent(props: {}) { 196 | const services = useAllTaggedService(TYPES.service, 'key', 'value'); 197 | return services 198 | .map(_ => _.getMessage()) 199 | .join(','); 200 | } 201 | ``` 202 | 203 | #### useResolve(constructor) 204 | 205 | [↑ back](#hooks) 206 | 207 | Create service instance within container context. 208 | 209 | (see [Container.resolve](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containerresolveconstructor-newable)) 210 | 211 | ```typescript 212 | import {useResolve} from '@redtea/react-inversify'; 213 | 214 | function ReactComponent(props: {}) { 215 | const service = useResolve(Service); 216 | return service.getMessage(); 217 | } 218 | ``` 219 | 220 | ## Decorators 221 | 222 | * [injectContainer(propName, [options])](#injectcontainerpropname-options) 223 | * [injectService(propName, id, [options])](#injectservicepropname-id-options) 224 | * [injectAllServices(propName, id, [options])](#injectallservicespropname-id-options) 225 | * [injectNamedService(propName, id, named, [options])](#injectnamedservicepropname-id-named-options) 226 | * [injectAllNamedServices(propName, id, named, [options])](#injectallnamedservicespropname-id-named-options) 227 | * [injectTaggedService(propName, id, key, value, [options])](#injecttaggedservicepropname-id-key-value-options) 228 | * [injectAllTaggedServices(propName, id, key, value, [options])](#injectalltaggedservicespropname-id-key-value-options) 229 | * [resolve(propName, constructor, [options])](#resolvepropname-constructor-options) 230 | * [options](#options) 231 | 232 | #### injectContainer(propName, [options]) 233 | 234 | [↑ back](#decorators) 235 | 236 | Get container and assign it to prop `propName`. 237 | 238 | (see [Container](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 239 | 240 | ```typescript 241 | import {Container} from 'inversify'; 242 | import {injectContainer} from '@redtea/react-inversify'; 243 | 244 | type Props = { 245 | container?: Container; 246 | } 247 | 248 | @injectContainer('container') 249 | class ReactComponent extends React.Component { 250 | componentDidMount() { 251 | const service = this.props.container!.get(TYPES.service); 252 | service.callMethod(); 253 | } 254 | 255 | render() { 256 | // ... 257 | } 258 | } 259 | ``` 260 | 261 | #### injectService(propName, id, [options]) 262 | 263 | [↑ back](#decorators) 264 | 265 | Get service by identifier `id` and assign it to prop `propName`. 266 | 267 | (see [Container.get](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 268 | 269 | ```typescript 270 | import {injectService} from '@redtea/react-inversify'; 271 | 272 | type Props = { 273 | service?: Service; 274 | } 275 | 276 | @injectService('service', TYPES.service) 277 | class ReactComponent extends React.Component { 278 | componentDidMount() { 279 | this.props.service!.callMethod(); 280 | } 281 | 282 | render() { 283 | // ... 284 | } 285 | } 286 | ``` 287 | 288 | #### injectAllServices(propName, id, [options]) 289 | 290 | [↑ back](#decorators) 291 | 292 | Get all services by identifier `id` and assign it to prop `propsName`. 293 | 294 | (see [Container.getAll](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetall)) 295 | 296 | ```typescript 297 | import {injectAllServices} from '@redtea/react-inversify'; 298 | 299 | type Props = { 300 | services?: Service[]; 301 | } 302 | 303 | @injectAllServices('services', TYPES.service) 304 | class ReactComponent extends React.Component { 305 | componentDidMount() { 306 | for (const service of this.props!.services) { 307 | service.callMethod(); 308 | } 309 | } 310 | 311 | render() { 312 | // ... 313 | } 314 | } 315 | ``` 316 | 317 | #### injectNamedService(propName, id, named, [options]) 318 | 319 | [↑ back](#decorators) 320 | 321 | Get named service by identifier `id`, name `named` and assign it to prop `propName`. 322 | 323 | (see [Container.getNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetnamed)) 324 | 325 | ```typescript 326 | import {injectNamedService} from '@redtea/react-inversify'; 327 | 328 | type Props = { 329 | service?: Service; 330 | } 331 | 332 | @injectNamedService('service', TYPES.service, 'name') 333 | class ReactComponent extends React.Component { 334 | componentDidMount() { 335 | this.props.service!.callMethod(); 336 | } 337 | 338 | render() { 339 | // ... 340 | } 341 | } 342 | ``` 343 | 344 | #### injectAllNamedServices(propName, id, named, [options]) 345 | 346 | [↑ back](#decorators) 347 | 348 | Get all named services by identifier `id`, name `named` and assign it to prop `propName`. 349 | 350 | (see [Container.getAllNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetallnamed)) 351 | 352 | ```typescript 353 | import {injectAllNamedServices} from '@redtea/react-inversify'; 354 | 355 | type Props = { 356 | services?: Service[]; 357 | } 358 | 359 | @injectAllNamedServices('services', TYPES.service, 'name') 360 | class ReactComponent extends React.Component { 361 | componentDidMount() { 362 | for (const service of this.props!.services) { 363 | service.callMethod(); 364 | } 365 | } 366 | 367 | render() { 368 | // ... 369 | } 370 | } 371 | ``` 372 | 373 | #### injectTaggedService(propName, id, key, value, [options]) 374 | 375 | [↑ back](#decorators) 376 | 377 | Get tagged service by identifier `id`, tag key `key`, tag value `value` and assign it to prop `propName`. 378 | 379 | (see [Container.getTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergettagged)) 380 | 381 | ```typescript 382 | import {injectTaggedService} from '@redtea/react-inversify'; 383 | 384 | type Props = { 385 | service?: Service; 386 | } 387 | 388 | @injectTaggedService('service', TYPES.service, 'key', 'value') 389 | class ReactComponent extends React.Component { 390 | componentDidMount() { 391 | this.props.service!.callMethod(); 392 | } 393 | 394 | render() { 395 | // ... 396 | } 397 | } 398 | ``` 399 | 400 | #### injectAllTaggedServices(propName, id, key, value, [options]) 401 | 402 | [↑ back](#decorators) 403 | 404 | Get all tagged services by identifier `id`, tag key `key`, tag value `value` and assign it to prop `propName`. 405 | 406 | (see [Container.getAllTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetalltagged)) 407 | 408 | ```typescript 409 | import {injectAllTaggedServices} from '@redtea/react-inversify'; 410 | 411 | type Props = { 412 | services?: Service[]; 413 | } 414 | 415 | @injectAllTaggedServices('services', TYPES.service, 'key', 'value') 416 | class ReactComponent extends React.Component { 417 | componentDidMount() { 418 | for (const service of this.props!.services) { 419 | service.callMethod(); 420 | } 421 | } 422 | 423 | render() { 424 | // ... 425 | } 426 | } 427 | ``` 428 | 429 | #### resolve(propName, constructor, [options]) 430 | 431 | [↑ back](#decorators) 432 | 433 | Create service instance within container context and assign it to prop `propName`. 434 | 435 | (see [Container.resolve](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containerresolveconstructor-newable)) 436 | 437 | ```typescript 438 | import {resolve} from '@redtea/react-inversify'; 439 | 440 | type Props = { 441 | service?: Service; 442 | } 443 | 444 | @resolve('service', Service) 445 | class ReactComponent extends React.Component { 446 | componentDidMount() { 447 | this.props.service!.callMethod(); 448 | } 449 | 450 | render() { 451 | // ... 452 | } 453 | } 454 | ``` 455 | 456 | #### Options 457 | 458 | [↑ back](#decorators) 459 | 460 | Decorator options 461 | 462 | * **forwardRef**(optional): [Ref forwarding](https://reactjs.org/docs/forwarding-refs.html) 463 | 464 | ```typescript 465 | { 466 | forwardRef?: boolean; 467 | } 468 | ``` 469 | example 470 | ```typescript 471 | import {injectService} from '@redtea/react-inversify'; 472 | 473 | @injectService('service', TYPES.service, {forwardRef: true}) 474 | class ReactComponent extends React.Component<{}> { 475 | render() { 476 | // ... 477 | } 478 | } 479 | ``` 480 | -------------------------------------------------------------------------------- /docs/ru/README.md: -------------------------------------------------------------------------------- 1 | # react-inversify 2 | 3 | Набор декораторов и хуков для взаимодействия с [InversifyJS](https://github.com/inversify/InversifyJS/) контейнером в [React](https://github.com/facebook/react) компонентах. 4 | 5 |
6 | Version 7 | Test status 8 |
9 | 10 | [EN](https://github.com/org-redtea/react-inversify/blob/master/README.md) 11 | 12 | ## Установка 13 | 14 | Yarn 15 | ```bash 16 | $ yarn add -E @redtea/react-inversify 17 | ``` 18 | Npm 19 | ```bash 20 | $ npm install -E @redtea/react-inversify 21 | ``` 22 | 23 | ## Пример 24 | 25 | ```typescript 26 | import {useService} from '@redtea/react-inversify'; 27 | 28 | function ReactComponent(props: {}) { 29 | const service = useService(TYPES.service); 30 | return service.getMessage(); 31 | } 32 | ``` 33 | 34 | ## Перед использованием 35 | 36 | Подключение контейнера 37 | 38 | ```typescript 39 | import 'reflect-metadata'; 40 | import React from 'react'; 41 | import ReactDOM from 'react-dom'; 42 | import {Container} from 'inversify'; 43 | import {Context, useService} from '@reatea/react-inversify'; 44 | 45 | const ReactComponent: React.FC<{}> = (props) => { 46 | const service = useService(TYPES.service); 47 | return service.getMessage(); 48 | } 49 | 50 | const App: React.FC<{container: Container}> = (props) => ( 51 | 52 | 53 | 54 | ); 55 | 56 | const container = new Container(); 57 | 58 | // ...регистрация сервисов в контейнере 59 | 60 | ReactDOM.render(, document.getElementById('root')); 61 | ``` 62 | 63 | ## Хуки 64 | 65 | * [useContainer()](#usecontainer) 66 | * [useService(id)](#useserviceid) 67 | * [useAllServices(id)](#useallservicesid) 68 | * [useNamedService(id, named)](#usenamedserviceid-named) 69 | * [useAllNamedServices(id, named)](#useallnamedservicesid-named) 70 | * [useTaggedService(id, key, value)](#usetaggedserviceid-key-value) 71 | * [useAllTaggedServices(id, key, value)](#usealltaggedservicesid-key-value) 72 | * [useResolve(constructor)](#useresolveconstructor) 73 | 74 | #### useContainer() 75 | 76 | [↑ back](#хуки) 77 | 78 | Получение контейнера. 79 | 80 | (см. [Container](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 81 | 82 | ```typescript 83 | import {useContainer} from '@redtea/react-inversify'; 84 | 85 | function ReactComponent(props: {}) { 86 | const container = useContainer(); 87 | const service = React.useMemo( 88 | () => container.get('service'), 89 | [container] 90 | ); 91 | return service.getMessage(); 92 | } 93 | ``` 94 | 95 | #### useService(id) 96 | 97 | [↑ back](#хуки) 98 | 99 | Получение сервис по идентификатору `id`. 100 | 101 | (см. [Container.get](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 102 | 103 | ```typescript 104 | import {useService} from '@redtea/react-inversify'; 105 | 106 | function ReactComponent(props: {}) { 107 | const service = useService(TYPES.service); 108 | return service.getMessage(); 109 | } 110 | ``` 111 | 112 | #### useAllServices(id) 113 | 114 | [↑ back](#хуки) 115 | 116 | Получение всех сервисов по идентификатору `id`. 117 | 118 | (см. [Container.getAll](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetall)) 119 | 120 | ```typescript 121 | import {useAllServices} from '@redtea/react-inversify'; 122 | 123 | function ReactComponent(props: {}) { 124 | const services = useAllServices(TYPES.service); 125 | return services 126 | .map(_ => _.getMessage()) 127 | .join(','); 128 | } 129 | ``` 130 | 131 | #### useNamedService(id, named) 132 | 133 | [↑ back](#хуки) 134 | 135 | Получение сервиса по идентификатору `id` и названию `named`. 136 | 137 | (см. [Container.getNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetnamed)) 138 | 139 | ```typescript 140 | import {useNamedService} from '@redtea/react-inversify'; 141 | 142 | function ReactComponent(props: {}) { 143 | const service = useNamedService(TYPES.service, 'name'); 144 | return service.getMessage(); 145 | } 146 | ``` 147 | 148 | #### useAllNamedServices(id, named) 149 | 150 | [↑ back](#хуки) 151 | 152 | Получение все сервисов по идентификатору `id` и названию `named`. 153 | 154 | (см. [Container.getAllNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetallnamed)) 155 | 156 | ```typescript 157 | import {useAllNamedService} from '@redtea/react-inversify'; 158 | 159 | function ReactComponent(props: {}) { 160 | const services = useAllNamedService(TYPES.service, 'name'); 161 | return services 162 | .map(_ => _.getMessage()) 163 | .join(','); 164 | } 165 | ``` 166 | 167 | #### useTaggedService(id, key, value) 168 | 169 | [↑ back](#хуки) 170 | 171 | Получение сервиса по идентификатору `id`, ключу тега `key` и значению тега `value`. 172 | 173 | (см. [Container.getTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergettagged)) 174 | 175 | ```typescript 176 | import {useTaggedService} from '@redtea/react-inversify'; 177 | 178 | function ReactComponent(props: {}) { 179 | const service = useTaggedService(TYPES.service, 'key', 'value'); 180 | return service.getMessage(); 181 | } 182 | ``` 183 | 184 | #### useAllTaggedServices(id, key, value) 185 | 186 | [↑ back](#хуки) 187 | 188 | Получение все сервисов по идентификатору `id`, ключу тега `key` и значению тега `value`. 189 | 190 | (см. [Container.getAllTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetalltagged)) 191 | 192 | ```typescript 193 | import {useAllTaggedService} from '@redtea/react-inversify'; 194 | 195 | function ReactComponent(props: {}) { 196 | const services = useAllTaggedService(TYPES.service, 'key', 'value'); 197 | return services 198 | .map(_ => _.getMessage()) 199 | .join(','); 200 | } 201 | ``` 202 | 203 | #### useResolve(constructor) 204 | 205 | [↑ back](#хуки) 206 | 207 | Создание экземпляра сервиса в контексте контейнера. 208 | 209 | (см. [Container.resolve](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containerresolveconstructor-newable)) 210 | 211 | ```typescript 212 | import {useResolve} from '@redtea/react-inversify'; 213 | 214 | function ReactComponent(props: {}) { 215 | const service = useResolve(Service); 216 | return service.getMessage(); 217 | } 218 | ``` 219 | 220 | ## Декораторы 221 | 222 | * [injectContainer(propName, [options])](#injectcontainerpropname-options) 223 | * [injectService(propName, id, [options])](#injectservicepropname-id-options) 224 | * [injectAllServices(propName, id, [options])](#injectallservicespropname-id-options) 225 | * [injectNamedService(propName, id, named, [options])](#injectnamedservicepropname-id-named-options) 226 | * [injectAllNamedServices(propName, id, named, [options])](#injectallnamedservicespropname-id-named-options) 227 | * [injectTaggedService(propName, id, key, value, [options])](#injecttaggedservicepropname-id-key-value-options) 228 | * [injectAllTaggedServices(propName, id, key, value, [options])](#injectalltaggedservicespropname-id-key-value-options) 229 | * [resolve(propName, constructor, [options])](#resolvepropname-constructor-options) 230 | * [options](#options) 231 | 232 | #### injectContainer(propName, [options]) 233 | 234 | [↑ back](#декораторы) 235 | 236 | Получение контейнера и запись его в prop `propName`. 237 | 238 | (см. [Container](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 239 | 240 | ```typescript 241 | import {Container} from 'inversify'; 242 | import {injectContainer} from '@redtea/react-inversify'; 243 | 244 | type Props = { 245 | container?: Container; 246 | } 247 | 248 | @injectContainer('container') 249 | class ReactComponent extends React.Component { 250 | componentDidMount() { 251 | const service = this.props.container!.get(TYPES.service); 252 | service.callMethod(); 253 | } 254 | 255 | render() { 256 | // ... 257 | } 258 | } 259 | ``` 260 | 261 | #### injectService(propName, id, [options]) 262 | 263 | [↑ back](#декораторы) 264 | 265 | Получение сервис по идентификатору `id` и запись его в prop `propName`. 266 | 267 | (см. [Container.get](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#the-container-api)) 268 | 269 | ```typescript 270 | import {injectService} from '@redtea/react-inversify'; 271 | 272 | type Props = { 273 | service?: Service; 274 | } 275 | 276 | @injectService('service', TYPES.service) 277 | class ReactComponent extends React.Component { 278 | componentDidMount() { 279 | this.props.service!.callMethod(); 280 | } 281 | 282 | render() { 283 | // ... 284 | } 285 | } 286 | ``` 287 | 288 | #### injectAllServices(propName, id, [options]) 289 | 290 | [↑ back](#декораторы) 291 | 292 | Получение всех сервисов по идентификатору `id` и запись из в prop `propsName`. 293 | 294 | (см. [Container.getAll](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetall)) 295 | 296 | ```typescript 297 | import {injectAllServices} from '@redtea/react-inversify'; 298 | 299 | type Props = { 300 | services?: Service[]; 301 | } 302 | 303 | @injectAllServices('services', TYPES.service) 304 | class ReactComponent extends React.Component { 305 | componentDidMount() { 306 | for (const service of this.props!.services) { 307 | service.callMethod(); 308 | } 309 | } 310 | 311 | render() { 312 | // ... 313 | } 314 | } 315 | ``` 316 | 317 | #### injectNamedService(propName, id, named, [options]) 318 | 319 | [↑ back](#декораторы) 320 | 321 | Получение сервиса по идентификатору `id`, названию `named` и запись его в prop `propName`. 322 | 323 | (см. [Container.getNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetnamed)) 324 | 325 | ```typescript 326 | import {injectNamedService} from '@redtea/react-inversify'; 327 | 328 | type Props = { 329 | service?: Service; 330 | } 331 | 332 | @injectNamedService('service', TYPES.service, 'name') 333 | class ReactComponent extends React.Component { 334 | componentDidMount() { 335 | this.props.service!.callMethod(); 336 | } 337 | 338 | render() { 339 | // ... 340 | } 341 | } 342 | ``` 343 | 344 | #### injectAllNamedServices(propName, id, named, [options]) 345 | 346 | [↑ back](#декораторы) 347 | 348 | Получение все сервисов по идентификатору `id`, названию `named` и запись их в prop `propName`. 349 | 350 | (см. [Container.getAllNamed](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetallnamed)) 351 | 352 | ```typescript 353 | import {injectAllNamedServices} from '@redtea/react-inversify'; 354 | 355 | type Props = { 356 | services?: Service[]; 357 | } 358 | 359 | @injectAllNamedServices('services', TYPES.service, 'name') 360 | class ReactComponent extends React.Component { 361 | componentDidMount() { 362 | for (const service of this.props!.services) { 363 | service.callMethod(); 364 | } 365 | } 366 | 367 | render() { 368 | // ... 369 | } 370 | } 371 | ``` 372 | 373 | #### injectTaggedService(propName, id, key, value, [options]) 374 | 375 | [↑ back](#декораторы) 376 | 377 | Получение сервиса по идентификатору `id`, ключу тегу `key`, значению тегу `value` и запись его в prop `propName`. (см. [Container.getTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergettagged)) 378 | 379 | ```typescript 380 | import {injectTaggedService} from '@redtea/react-inversify'; 381 | 382 | type Props = { 383 | service?: Service; 384 | } 385 | 386 | @injectTaggedService('service', TYPES.service, 'key', 'value') 387 | class ReactComponent extends React.Component { 388 | componentDidMount() { 389 | this.props.service!.callMethod(); 390 | } 391 | 392 | render() { 393 | // ... 394 | } 395 | } 396 | ``` 397 | 398 | #### injectAllTaggedServices(propName, id, key, value, [options]) 399 | 400 | [↑ back](#декораторы) 401 | 402 | Получение все сервисов по идентификатору `id`, ключу тегу `key`, значению тегу `value` и запись их в prop `propName`. 403 | 404 | (см. [Container.getAllTagged](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containergetalltagged)) 405 | 406 | ```typescript 407 | import {injectAllTaggedServices} from '@redtea/react-inversify'; 408 | 409 | type Props = { 410 | services?: Service[]; 411 | } 412 | 413 | @injectAllTaggedServices('services', TYPES.service, 'key', 'value') 414 | class ReactComponent extends React.Component { 415 | componentDidMount() { 416 | for (const service of this.props!.services) { 417 | service.callMethod(); 418 | } 419 | } 420 | 421 | render() { 422 | // ... 423 | } 424 | } 425 | ``` 426 | 427 | #### resolve(propName, constructor, [options]) 428 | 429 | [↑ back](#декораторы) 430 | 431 | Создание экземпляра сервиса в контексте контейнера и запись его в prop 'propName`. 432 | 433 | (см. [Container.resolve](https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containerresolveconstructor-newable)) 434 | 435 | ```typescript 436 | import {resolve} from '@redtea/react-inversify'; 437 | 438 | type Props = { 439 | service?: Service; 440 | } 441 | 442 | @resolve('service', Service) 443 | class ReactComponent extends React.Component { 444 | componentDidMount() { 445 | this.props.service!.callMethod(); 446 | } 447 | 448 | render() { 449 | // ... 450 | } 451 | } 452 | ``` 453 | 454 | #### Options 455 | 456 | [↑ back](#декораторы) 457 | 458 | Опции декоратора 459 | 460 | * **forwardRef**(опционально): [Перенаправление ref](https://ru.reactjs.org/docs/forwarding-refs.html) 461 | 462 | ```typescript 463 | { 464 | forwardRef?: boolean; 465 | } 466 | ``` 467 | пример 468 | ```typescript 469 | import {injectService} from '@redtea/react-inversify'; 470 | 471 | @injectService('service', TYPES.service, {forwardRef: true}) 472 | class ReactComponent extends React.Component<{}> { 473 | render() { 474 | // ... 475 | } 476 | } 477 | ``` 478 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@redtea/react-inversify", 3 | "version": "1.0.1", 4 | "description": "Collection of decorators and hooks for interaction with InversifyJS container within React components", 5 | "main": "dist/index.cjs.js", 6 | "module": "dist/index.esm.js", 7 | "browser": "dist/index.umd.js", 8 | "types": "types/index.d.ts", 9 | "sideEffects": true, 10 | "files": [ 11 | "dist/", 12 | "docs/", 13 | "types/", 14 | "README.md" 15 | ], 16 | "scripts": { 17 | "clean": "rm -rf esnext dist types", 18 | "build-esnext": "yarn clean && tsc", 19 | "build-dist": "yarn clean && tsc && rollup -c", 20 | "test": "ts-mocha -p test/tsconfig.json 'test/**/*.spec.tsx' -colors", 21 | "tsc": "tsc" 22 | }, 23 | "repository": { 24 | "type": "git", 25 | "url": "https://github.com/org-redtea/react-inversify.git" 26 | }, 27 | "keywords": [ 28 | "react", 29 | "inversify", 30 | "ioc", 31 | "di", 32 | "hooks", 33 | "library", 34 | "decorators" 35 | ], 36 | "author": "Kirill Khoroshilov ", 37 | "license": "ISC", 38 | "devDependencies": { 39 | "@babel/core": "7.11.0", 40 | "@babel/preset-env": "7.11.0", 41 | "@rollup/plugin-babel": "5.1.0", 42 | "@rollup/plugin-commonjs": "14.0.0", 43 | "@rollup/plugin-node-resolve": "8.4.0", 44 | "@types/chai": "^4.2.12", 45 | "@types/mocha": "^8.0.0", 46 | "@types/react": "^16.9.43", 47 | "@types/react-dom": "^16.9.8", 48 | "@types/react-is": "16.7.1", 49 | "chai": "^4.2.0", 50 | "inversify": "^5.0.1", 51 | "mocha": "6.2.2", 52 | "react": "^16.13.1", 53 | "react-dom": "^16.13.1", 54 | "reflect-metadata": "^0.1.13", 55 | "rollup": "2.23.0", 56 | "ts-mocha": "^7.0.0", 57 | "typescript": "^3.9.7" 58 | }, 59 | "babel": { 60 | "presets": [ 61 | "@babel/preset-env" 62 | ] 63 | }, 64 | "browserslist": [ 65 | "> 1%", 66 | "last 2 versions", 67 | "not ie <= 11" 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import babel from '@rollup/plugin-babel'; 2 | import resolve from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import pkg from './package.json'; 5 | 6 | 7 | const config = [ 8 | { 9 | input: 'esnext/index.js', 10 | output: { 11 | name: 'ReactInversify', 12 | file: pkg.browser, 13 | format: 'umd', 14 | exports: 'named', 15 | esModule: true 16 | }, 17 | plugins: [ 18 | resolve(), 19 | commonjs(), 20 | babel({ 21 | babelHelpers: 'bundled' 22 | }) 23 | ], 24 | external: [ 25 | 'react', 26 | 'inversify' 27 | ] 28 | }, 29 | { 30 | input: 'esnext/index.js', 31 | output: { 32 | name: 'ReactInversify', 33 | file: pkg.main, 34 | format: 'cjs', 35 | exports: 'named' 36 | }, 37 | plugins: [ 38 | resolve(), 39 | commonjs(), 40 | babel({ 41 | babelHelpers: 'bundled' 42 | }) 43 | ], 44 | external: [ 45 | 'react', 46 | 'inversify' 47 | ] 48 | }, 49 | { 50 | input: 'esnext/index.js', 51 | output: [ 52 | { 53 | file: pkg.module, 54 | format: 'es' 55 | } 56 | ], 57 | plugins: [ 58 | resolve(), 59 | commonjs(), 60 | babel({ 61 | babelHelpers: 'bundled' 62 | }) 63 | ], 64 | external: [ 65 | 'react', 66 | 'inversify' 67 | ] 68 | } 69 | ]; 70 | 71 | export default config; 72 | -------------------------------------------------------------------------------- /src/class-component.tsx: -------------------------------------------------------------------------------- 1 | import React, {forwardRef, useMemo} from 'react'; 2 | import {interfaces} from 'inversify'; 3 | import { 4 | useAllNamedService, 5 | useAllServices, 6 | useAllTaggedService, 7 | useContainer, 8 | useNamedService, 9 | useResolve, 10 | useService, 11 | useTaggedService 12 | } from './hooks'; 13 | import {getDisplayName} from './utils'; 14 | 15 | type ReactComponent

= 16 | | React.ClassicComponentClass

17 | | React.ComponentClass

18 | | React.FunctionComponent

19 | | React.ForwardRefExoticComponent

; 20 | 21 | export type Options = { 22 | forwardRef?: boolean; 23 | }; 24 | 25 | function createDisplayName(Target: ReactComponent): string { 26 | return 'InjectedComponent(' + getDisplayName(Target) + ')'; 27 | } 28 | 29 | function createHOC(Target: C, propName: string, value: () => any, options?: Options) { 30 | const getProps = (props: any) => { 31 | const extractedValue = value(); 32 | return useMemo(() => ({ 33 | ...props, 34 | [propName]: extractedValue 35 | }), [props, extractedValue]); 36 | } 37 | 38 | if (options && options.forwardRef === true) { 39 | const forwarded = forwardRef((props: any, ref: any) => { 40 | const targetProps = getProps(props); 41 | return ; 42 | }) as unknown as C; 43 | forwarded.displayName = createDisplayName(Target); 44 | return forwarded; 45 | } 46 | 47 | function InjectedComponent(props: any, ref: any) { 48 | const targetProps = getProps(props); 49 | return ; 50 | } 51 | 52 | InjectedComponent.displayName = createDisplayName(Target); 53 | 54 | return InjectedComponent as unknown as C; 55 | } 56 | 57 | 58 | export function injectContainer( 59 | propName: string, 60 | options?: Options 61 | ) { 62 | return (Target: C) => { 63 | return createHOC(Target, propName, () => useContainer(), options); 64 | }; 65 | } 66 | 67 | export function injectService( 68 | propName: string, 69 | id: interfaces.ServiceIdentifier, 70 | options?: Options 71 | ) { 72 | return (Target: C) => { 73 | return createHOC(Target, propName, () => useService(id), options); 74 | }; 75 | } 76 | 77 | export function injectAllServices( 78 | propName: string, 79 | id: interfaces.ServiceIdentifier, 80 | options?: Options 81 | ) { 82 | return (Target: C) => { 83 | return createHOC(Target, propName, () => useAllServices(id), options); 84 | }; 85 | } 86 | 87 | export function injectNamedService( 88 | propName: string, 89 | id: interfaces.ServiceIdentifier, 90 | named: string | number | symbol, 91 | options?: Options 92 | ) { 93 | return (Target: C) => { 94 | return createHOC(Target, propName, () => useNamedService(id, named), options); 95 | }; 96 | } 97 | 98 | export function injectAllNamedServices( 99 | propName: string, 100 | id: interfaces.ServiceIdentifier, 101 | named: string | number | symbol, 102 | options?: Options 103 | ) { 104 | return (Target: C) => { 105 | return createHOC(Target, propName, () => useAllNamedService(id, named), options); 106 | }; 107 | } 108 | 109 | export function injectTaggedService( 110 | propName: string, 111 | id: interfaces.ServiceIdentifier, 112 | key: string | number | symbol, 113 | value: any, 114 | options?: Options 115 | ) { 116 | return (Target: C) => { 117 | return createHOC(Target, propName, () => useTaggedService(id, key, value), options); 118 | }; 119 | } 120 | 121 | export function injectAllTaggedServices( 122 | propName: string, 123 | id: interfaces.ServiceIdentifier, 124 | key: string | number | symbol, 125 | value: any, 126 | options?: Options 127 | ) { 128 | return (Target: C) => { 129 | return createHOC(Target, propName, () => useAllTaggedService(id, key, value), options); 130 | }; 131 | } 132 | 133 | export function resolve( 134 | propName: string, 135 | constructor: interfaces.Newable, 136 | options?: Options 137 | ) { 138 | return (Target: C) => { 139 | return createHOC(Target, propName, () => useResolve(constructor), options); 140 | }; 141 | } 142 | -------------------------------------------------------------------------------- /src/context.ts: -------------------------------------------------------------------------------- 1 | import {Container} from 'inversify'; 2 | import React from 'react'; 3 | 4 | export const Context = React.createContext(undefined as unknown as Container); 5 | 6 | Context.displayName = 'InversifyContainerContext'; 7 | -------------------------------------------------------------------------------- /src/hooks.ts: -------------------------------------------------------------------------------- 1 | import {useContext, useMemo} from 'react'; 2 | import {Container, interfaces} from 'inversify'; 3 | import {Context} from './context'; 4 | 5 | export const useContainer = (): Container => useContext(Context); 6 | 7 | export const useService = ( 8 | id: interfaces.ServiceIdentifier 9 | ): T => { 10 | const container = useContainer(); 11 | return useMemo(() => container.get(id), [container, id]); 12 | }; 13 | 14 | export const useAllServices = ( 15 | id: interfaces.ServiceIdentifier 16 | ): T[] => { 17 | const container = useContainer(); 18 | return useMemo(() => container.getAll(id), [container, id]); 19 | 20 | }; 21 | 22 | export const useNamedService = ( 23 | id: interfaces.ServiceIdentifier, 24 | named: string | number | symbol 25 | ): T => { 26 | const container = useContainer(); 27 | return useMemo(() => container.getNamed(id, named), [container, id, named]); 28 | }; 29 | 30 | export const useAllNamedService = ( 31 | id: interfaces.ServiceIdentifier, 32 | named: string | number | symbol 33 | ): T[] => { 34 | const container = useContainer(); 35 | return useMemo(() => container.getAllNamed(id, named), [container, id, named]); 36 | }; 37 | 38 | export const useTaggedService = ( 39 | id: interfaces.ServiceIdentifier, 40 | key: string | number | symbol, 41 | value: any 42 | ): T => { 43 | const container = useContainer(); 44 | return useMemo(() => container.getTagged(id, key, value), [container, key, value]); 45 | }; 46 | 47 | export const useAllTaggedService = ( 48 | id: interfaces.ServiceIdentifier, 49 | key: string | number | symbol, 50 | value: any 51 | ): T[] => { 52 | const container = useContainer(); 53 | return useMemo(() => container.getAllTagged(id, key, value), [container, key, value]); 54 | }; 55 | 56 | export const useResolve = (constructor: interfaces.Newable): T => { 57 | const container = useContainer(); 58 | return useMemo(() => container.resolve(constructor), [constructor, container]); 59 | }; 60 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | useContainer, 3 | useService, 4 | useAllServices, 5 | useNamedService, 6 | useAllNamedService, 7 | useTaggedService, 8 | useAllTaggedService, 9 | useResolve 10 | } from './hooks'; 11 | export { 12 | injectContainer, 13 | injectService, 14 | injectAllServices, 15 | injectNamedService, 16 | injectAllNamedServices, 17 | injectTaggedService, 18 | injectAllTaggedServices, 19 | resolve 20 | } from './class-component'; 21 | export { 22 | Context 23 | } from './context'; 24 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export function getDisplayName(comp: any) { 2 | return ( 3 | comp.displayName || 4 | comp.name || 5 | (comp.constructor && (comp.constructor.displayName || comp.constructor.name)) 6 | || 'Component' 7 | ) 8 | } 9 | -------------------------------------------------------------------------------- /test/class-components-forward-ref.spec.tsx: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | import React, {Ref} from 'react'; 3 | import {expect} from 'chai'; 4 | import { 5 | injectAllNamedServices, 6 | injectAllServices, 7 | injectAllTaggedServices, 8 | injectContainer, 9 | injectNamedService, 10 | injectService, 11 | injectTaggedService, 12 | resolve 13 | } from '../src'; 14 | import {renderToString} from 'react-dom/server'; 15 | import {Container} from 'inversify'; 16 | import {buildContainer} from './fixtures/container'; 17 | import {withContext} from './helpers/withContext'; 18 | import { 19 | InjectAllNamedServicesForwardRef, 20 | InjectAllServicesForwardRef, 21 | InjectContainerForwardRef, 22 | InjectNamedServiceForwardRef, 23 | InjectServiceForwardRef, 24 | ResolveForwardRef 25 | } from './fixtures/class-components-forward-ref'; 26 | 27 | 28 | describe('class component: forward ref', () => { 29 | let container: Container; 30 | 31 | before(() => { 32 | container = buildContainer(); 33 | }); 34 | 35 | it('injectContainer', () => { 36 | const ref = React.createRef(); 37 | const root = withContext(InjectContainerForwardRef, container, { 38 | ref, 39 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 40 | }); 41 | renderToString(root); 42 | }); 43 | 44 | it('injectService', () => { 45 | const ref = React.createRef(); 46 | const root = withContext(InjectServiceForwardRef, container, { 47 | ref, 48 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 49 | }); 50 | renderToString(root); 51 | }); 52 | 53 | it('injectAllServices', () => { 54 | const ref = React.createRef(); 55 | const root = withContext(InjectAllServicesForwardRef, container, { 56 | ref, 57 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 58 | }); 59 | renderToString(root); 60 | }); 61 | 62 | it('injectNamedService', () => { 63 | const ref = React.createRef(); 64 | const root = withContext(InjectNamedServiceForwardRef, container, { 65 | ref, 66 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 67 | }); 68 | renderToString(root); 69 | }); 70 | 71 | it('injectAllNamedServices', () => { 72 | const ref = React.createRef(); 73 | const root = withContext(InjectAllNamedServicesForwardRef, container, { 74 | ref, 75 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 76 | }); 77 | renderToString(root); 78 | }); 79 | 80 | it('injectTaggedService', () => { 81 | const ref = React.createRef(); 82 | const root = withContext(InjectNamedServiceForwardRef, container, { 83 | ref, 84 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 85 | }); 86 | renderToString(root); 87 | }); 88 | 89 | it('injectAllTaggedServices', () => { 90 | const ref = React.createRef(); 91 | const root = withContext(InjectAllNamedServicesForwardRef, container, { 92 | ref, 93 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 94 | }); 95 | renderToString(root); 96 | }); 97 | 98 | it('resolve', () => { 99 | const ref = React.createRef(); 100 | const root = withContext(ResolveForwardRef, container, { 101 | ref, 102 | onRef: (_: Ref) => expect(_).to.be.eq(ref) 103 | }); 104 | renderToString(root); 105 | }); 106 | }); 107 | -------------------------------------------------------------------------------- /test/class-components.spec.tsx: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | import React from 'react'; 3 | import {expect} from 'chai'; 4 | import { 5 | injectAllNamedServices, 6 | injectAllServices, 7 | injectAllTaggedServices, 8 | injectContainer, 9 | injectNamedService, 10 | injectService, 11 | injectTaggedService, 12 | resolve 13 | } from '../src'; 14 | import {renderToString} from 'react-dom/server'; 15 | import {Container} from 'inversify'; 16 | import {buildContainer} from './fixtures/container'; 17 | import {withContext} from './helpers/withContext'; 18 | import { 19 | All, 20 | InjectAllNamedServices, 21 | InjectAllServices, 22 | InjectAllTaggedServices, 23 | InjectContainer, 24 | InjectNamedService, 25 | InjectService, 26 | InjectTaggedService, 27 | Resolve 28 | } from './fixtures/class-components'; 29 | 30 | 31 | describe('class component', () => { 32 | let container: Container; 33 | 34 | before(() => { 35 | container = buildContainer(); 36 | }); 37 | 38 | it('injectContainer', () => { 39 | const root = withContext(InjectContainer, container, { 40 | cb: (c: Container) => expect(c).to.be.eq(container) 41 | }); 42 | renderToString(root); 43 | }); 44 | 45 | it('injectService', () => { 46 | const root = withContext(InjectService, container); 47 | expect(renderToString(root)).to.be.eq('service'); 48 | }); 49 | 50 | it('injectAllServices', () => { 51 | const root = withContext(InjectAllServices, container); 52 | expect(renderToString(root)).to.be.eq('1,2'); 53 | }); 54 | 55 | it('injectNamedService', () => { 56 | const root = withContext(InjectNamedService, container); 57 | expect(renderToString(root)).to.be.eq('service'); 58 | }); 59 | 60 | it('injectAllNamedServices', () => { 61 | const root = withContext(InjectAllNamedServices, container); 62 | expect(renderToString(root)).to.be.eq('1,2'); 63 | }); 64 | 65 | it('injectTaggedService', () => { 66 | const root = withContext(InjectTaggedService, container); 67 | expect(renderToString(root)).to.be.eq('service'); 68 | }); 69 | 70 | it('injectAllTaggedServices', () => { 71 | const root = withContext(InjectAllTaggedServices, container); 72 | expect(renderToString(root)).to.be.eq('1,2'); 73 | }); 74 | 75 | it('resolve', () => { 76 | const root = withContext(Resolve, container); 77 | expect(renderToString(root)).to.be.eq('service'); 78 | }); 79 | 80 | it('apply all decorators', () => { 81 | const root = withContext(All, container, { 82 | onProps(props: any) { 83 | expect(props.service).to.be.not.empty; 84 | expect(props.services).to.be.not.empty; 85 | expect(props.namedService).to.be.not.empty; 86 | expect(props.namedServices).to.be.not.empty; 87 | expect(props.taggedService).to.be.not.empty; 88 | expect(props.taggedService).to.be.not.empty; 89 | expect(props.resolved).to.be.not.empty; 90 | } 91 | }); 92 | renderToString(root); 93 | }); 94 | }); 95 | -------------------------------------------------------------------------------- /test/fixtures/class-components-forward-ref.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | injectAllNamedServices, 3 | injectAllServices, 4 | injectAllTaggedServices, 5 | injectContainer, 6 | injectNamedService, 7 | injectService, 8 | injectTaggedService, 9 | resolve 10 | } from '../../src'; 11 | import React from 'react'; 12 | import {Service} from './service'; 13 | import {Tokens} from './tokens'; 14 | 15 | export const RefComponent = React.forwardRef((props: any, ref: any) => { 16 | props.onRef(ref); 17 | return null; 18 | }); 19 | 20 | export const InjectContainerForwardRef = injectContainer( 21 | 'container', 22 | {forwardRef: true} 23 | )(RefComponent); 24 | 25 | export const InjectServiceForwardRef = injectService( 26 | 'service', 27 | Tokens.service, 28 | {forwardRef: true} 29 | )(RefComponent); 30 | 31 | export const InjectAllServicesForwardRef = injectAllServices( 32 | 'services', 33 | Tokens.services, 34 | {forwardRef: true} 35 | )(RefComponent); 36 | 37 | export const InjectNamedServiceForwardRef = injectNamedService( 38 | 'service', 39 | Tokens.namedService, 40 | 'service', 41 | {forwardRef: true} 42 | )(RefComponent); 43 | 44 | export const InjectAllNamedServicesForwardRef = injectAllNamedServices( 45 | 'services', 46 | Tokens.services, 47 | 'services', 48 | {forwardRef: true} 49 | )(RefComponent); 50 | 51 | export const InjectTaggedServiceForwardRef = injectTaggedService( 52 | 'service', 53 | Tokens.taggedService, 54 | 'service', 55 | '0', 56 | {forwardRef: true} 57 | )(RefComponent); 58 | 59 | export const InjectAllTaggedServicesForwardRef = injectAllTaggedServices( 60 | 'services', 61 | Tokens.services, 62 | 'services', 63 | '0', 64 | {forwardRef: true} 65 | )(RefComponent); 66 | 67 | export const ResolveForwardRef = resolve<{ value: string }>( 68 | 'service', 69 | Service, 70 | {forwardRef: true} 71 | )(RefComponent); 72 | 73 | -------------------------------------------------------------------------------- /test/fixtures/class-components.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | injectAllNamedServices, 3 | injectAllServices, 4 | injectAllTaggedServices, 5 | injectContainer, 6 | injectNamedService, 7 | injectService, 8 | injectTaggedService, 9 | resolve 10 | } from '../../src'; 11 | import React, {Component} from 'react'; 12 | import {Container} from 'inversify'; 13 | import {Service} from './service'; 14 | import {Tokens} from './tokens'; 15 | 16 | @injectContainer('container') 17 | export class InjectContainer extends Component<{ cb(c: Container): void; container?: Container; }> { 18 | componentDidMount() { 19 | this.props.cb(this.props.container!); 20 | } 21 | 22 | render() { 23 | return null; 24 | } 25 | } 26 | 27 | @injectService('service', Tokens.service) 28 | export class InjectService extends Component<{ service?: string }> { 29 | render() { 30 | return {this.props.service!}; 31 | } 32 | } 33 | 34 | @injectAllServices('services', Tokens.services) 35 | export class InjectAllServices extends Component<{ services?: string[] }> { 36 | render() { 37 | return {this.props.services!.join(',')}; 38 | } 39 | } 40 | 41 | @injectNamedService('service', Tokens.namedService, 'service') 42 | export class InjectNamedService extends Component<{ service?: string }> { 43 | render() { 44 | return {this.props.service!}; 45 | } 46 | } 47 | 48 | @injectAllNamedServices('services', Tokens.services, 'services') 49 | export class InjectAllNamedServices extends Component<{ services?: string[] }> { 50 | render() { 51 | return {this.props.services!.join(',')}; 52 | } 53 | } 54 | 55 | @injectTaggedService('service', Tokens.taggedService, 'service', '0') 56 | export class InjectTaggedService extends Component<{ service?: string }> { 57 | render() { 58 | return {this.props.service!}; 59 | } 60 | } 61 | 62 | @injectAllTaggedServices('services', Tokens.services, 'services', '0') 63 | export class InjectAllTaggedServices extends Component<{ services?: string[] }> { 64 | render() { 65 | return {this.props.services!.join(',')}; 66 | } 67 | } 68 | 69 | @resolve<{ value: string }>('service', Service) 70 | export class Resolve extends Component<{ service?: Service }> { 71 | render() { 72 | return {this.props.service!.value}; 73 | } 74 | } 75 | 76 | @injectContainer('container') 77 | @injectService('service', Tokens.service) 78 | @injectAllServices('services', Tokens.services) 79 | @injectNamedService('namedService', Tokens.namedService, 'service') 80 | @injectAllNamedServices('namedServices', Tokens.namedServices, 'services') 81 | @injectTaggedService('taggedService', Tokens.taggedService, 'service', '0') 82 | @injectAllTaggedServices('taggedServices', Tokens.taggedServices, 'services', '0') 83 | @resolve<{ value: string }>('resolved', Service) 84 | export class All extends Component<{ onProps(props: any): void }> { 85 | render() { 86 | this.props.onProps(this.props); 87 | return null; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /test/fixtures/container.ts: -------------------------------------------------------------------------------- 1 | import {Container} from 'inversify'; 2 | import {Tokens} from './tokens'; 3 | 4 | export function buildContainer(): Container { 5 | const container = new Container({ 6 | defaultScope: 'Singleton' 7 | }); 8 | container.bind(Tokens.service).toConstantValue('service') 9 | container.bind(Tokens.services).toConstantValue('1'); 10 | container.bind(Tokens.services).toConstantValue('2'); 11 | container.bind(Tokens.namedService).toConstantValue('service').whenTargetNamed('service'); 12 | container.bind(Tokens.namedServices).toConstantValue('1').whenTargetNamed('services'); 13 | container.bind(Tokens.namedServices).toConstantValue('2').whenTargetNamed('services'); 14 | container.bind(Tokens.taggedService).toConstantValue('service').whenTargetTagged('service', '0'); 15 | container.bind(Tokens.taggedServices).toConstantValue('1').whenTargetTagged('services', '0'); 16 | container.bind(Tokens.taggedServices).toConstantValue('2').whenTargetTagged('services', '0'); 17 | return container; 18 | } 19 | -------------------------------------------------------------------------------- /test/fixtures/hooks.tsx: -------------------------------------------------------------------------------- 1 | import React, {FC} from 'react'; 2 | import {Container} from 'inversify'; 3 | import { 4 | useAllNamedService, 5 | useAllServices, 6 | useAllTaggedService, 7 | useContainer, 8 | useNamedService, 9 | useResolve, 10 | useService, 11 | useTaggedService 12 | } from '../../src'; 13 | import {Tokens} from './tokens'; 14 | import {Service} from './service'; 15 | 16 | export const UseContainer: FC = (props: { onContainer: (c: Container) => void }) => { 17 | const container = useContainer(); 18 | props.onContainer(container); 19 | return null; 20 | } 21 | 22 | export const UseService: FC<{}> = (props: {}) => { 23 | const service = useService(Tokens.service); 24 | return {service}; 25 | } 26 | 27 | export const UseAllServices: FC<{}> = (props: {}) => { 28 | const services = useAllServices(Tokens.services); 29 | return {services.join(',')}; 30 | } 31 | 32 | export const UseNamedService: FC<{}> = (props: {}) => { 33 | const service = useNamedService(Tokens.namedService, 'service'); 34 | return {service}; 35 | } 36 | 37 | export const UseAllNamedServices: FC<{}> = (props: {}) => { 38 | const services = useAllNamedService(Tokens.namedServices, 'services'); 39 | return {services.join(',')}; 40 | } 41 | export const UseTaggedService: FC<{}> = (props: {}) => { 42 | const service = useTaggedService(Tokens.taggedService, 'service', '0'); 43 | return {service}; 44 | } 45 | 46 | export const UseAllTaggedServices: FC<{}> = (props: {}) => { 47 | const services = useAllTaggedService(Tokens.taggedServices, 'services', '0'); 48 | return {services.join(',')}; 49 | } 50 | 51 | export const UseResolve: FC<{ onService(service: any): void }> = (props: { onService(service: any): void }) => { 52 | const service = useResolve<{ value: string }>(Service); 53 | const [flag, setFlag] = React.useState(false); 54 | if (!flag) { 55 | setFlag(true); 56 | } 57 | props.onService(service); 58 | return null; 59 | } 60 | -------------------------------------------------------------------------------- /test/fixtures/service.ts: -------------------------------------------------------------------------------- 1 | import {injectable} from 'inversify'; 2 | 3 | @injectable() 4 | export class Service { 5 | value: string = 'service' 6 | } 7 | -------------------------------------------------------------------------------- /test/fixtures/tokens.ts: -------------------------------------------------------------------------------- 1 | export const Tokens = { 2 | service: 'service', 3 | services: 'services', 4 | namedService: 'namedService', 5 | namedServices: 'namedServices', 6 | taggedService: 'taggedService', 7 | taggedServices: 'taggedServices', 8 | }; 9 | -------------------------------------------------------------------------------- /test/helpers/withContext.tsx: -------------------------------------------------------------------------------- 1 | import React, {ElementType} from 'react'; 2 | import {Container} from 'inversify'; 3 | import {Context} from '../../src'; 4 | 5 | export function withContext( 6 | Component: ElementType, 7 | container: Container, 8 | props?: any, 9 | ) { 10 | return ; 11 | } 12 | -------------------------------------------------------------------------------- /test/hooks.spec.tsx: -------------------------------------------------------------------------------- 1 | import 'reflect-metadata'; 2 | import React from 'react'; 3 | import {expect} from 'chai'; 4 | import { 5 | useAllNamedService, 6 | useAllServices, 7 | useAllTaggedService, 8 | useContainer, 9 | useNamedService, 10 | useResolve, 11 | useService, 12 | useTaggedService 13 | } from '../src'; 14 | import {renderToString} from 'react-dom/server'; 15 | import {Container} from 'inversify'; 16 | import {buildContainer} from './fixtures/container'; 17 | import {withContext} from './helpers/withContext'; 18 | import { 19 | UseAllNamedServices, 20 | UseAllServices, 21 | UseAllTaggedServices, 22 | UseContainer, 23 | UseNamedService, 24 | UseResolve, 25 | UseService, 26 | UseTaggedService 27 | } from './fixtures/hooks'; 28 | 29 | 30 | describe('hooks', () => { 31 | let container: Container; 32 | 33 | before(() => { 34 | container = buildContainer(); 35 | }); 36 | 37 | it('useContainer', () => { 38 | const root = withContext(UseContainer, container, { 39 | onContainer: (c: Container) => expect(c).to.be.eq(container) 40 | }); 41 | renderToString(root); 42 | }); 43 | 44 | it('useService', () => { 45 | const root = withContext(UseService, container); 46 | expect(renderToString(root)).to.be.eq('service'); 47 | }); 48 | 49 | it('useAllServices', () => { 50 | const root = withContext(UseAllServices, container); 51 | expect(renderToString(root)).to.be.eq('1,2'); 52 | }); 53 | 54 | it('useNamedService', () => { 55 | const root = withContext(UseNamedService, container); 56 | expect(renderToString(root)).to.be.eq('service'); 57 | }); 58 | 59 | it('useAllNamedService', () => { 60 | const root = withContext(UseAllNamedServices, container); 61 | expect(renderToString(root)).to.be.eq('1,2'); 62 | }); 63 | 64 | it('useTaggedService', () => { 65 | const root = withContext(UseTaggedService, container); 66 | expect(renderToString(root)).to.be.eq('service'); 67 | }); 68 | 69 | it('useAllTaggedService', () => { 70 | const root = withContext(UseAllTaggedServices, container); 71 | expect(renderToString(root)).to.be.eq('1,2'); 72 | }); 73 | 74 | it('useResolve', () => { 75 | const services: any[] = []; 76 | const root = withContext(UseResolve, container, { 77 | onService(service: any) { 78 | services.push(service); 79 | } 80 | }); 81 | renderToString(root); 82 | expect(services[0]).to.be.eq(services[1]); 83 | }); 84 | }); 85 | 86 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "noEmit": true 6 | }, 7 | "include": [ 8 | "./**/*.tsx", 9 | "./**/*.ts" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNEXT", 4 | "module": "ESNEXT", 5 | "allowJs": false, 6 | "checkJs": false, 7 | "jsx": "react", 8 | "strict": true, 9 | "moduleResolution": "node", 10 | "esModuleInterop": true, 11 | "experimentalDecorators": true, 12 | "emitDecoratorMetadata": true, 13 | "skipLibCheck": true, 14 | "forceConsistentCasingInFileNames": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "compilerOptions": { 4 | "declaration": true, 5 | "module": "ES2015", 6 | "declarationDir": "./types", 7 | "outDir": "./esnext", 8 | "rootDir": "./src" 9 | }, 10 | "include": [ 11 | "./src/**/*.tsx", 12 | "./src/**/*.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /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.10.4": 6 | version "7.10.4" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": 13 | version "7.11.0" 14 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" 15 | integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== 16 | dependencies: 17 | browserslist "^4.12.0" 18 | invariant "^2.2.4" 19 | semver "^5.5.0" 20 | 21 | "@babel/core@7.11.0": 22 | version "7.11.0" 23 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.0.tgz#73b9c33f1658506887f767c26dae07798b30df76" 24 | integrity sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg== 25 | dependencies: 26 | "@babel/code-frame" "^7.10.4" 27 | "@babel/generator" "^7.11.0" 28 | "@babel/helper-module-transforms" "^7.11.0" 29 | "@babel/helpers" "^7.10.4" 30 | "@babel/parser" "^7.11.0" 31 | "@babel/template" "^7.10.4" 32 | "@babel/traverse" "^7.11.0" 33 | "@babel/types" "^7.11.0" 34 | convert-source-map "^1.7.0" 35 | debug "^4.1.0" 36 | gensync "^1.0.0-beta.1" 37 | json5 "^2.1.2" 38 | lodash "^4.17.19" 39 | resolve "^1.3.2" 40 | semver "^5.4.1" 41 | source-map "^0.5.0" 42 | 43 | "@babel/generator@^7.11.0": 44 | version "7.11.0" 45 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" 46 | integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== 47 | dependencies: 48 | "@babel/types" "^7.11.0" 49 | jsesc "^2.5.1" 50 | source-map "^0.5.0" 51 | 52 | "@babel/helper-annotate-as-pure@^7.10.4": 53 | version "7.10.4" 54 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" 55 | integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== 56 | dependencies: 57 | "@babel/types" "^7.10.4" 58 | 59 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": 60 | version "7.10.4" 61 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" 62 | integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== 63 | dependencies: 64 | "@babel/helper-explode-assignable-expression" "^7.10.4" 65 | "@babel/types" "^7.10.4" 66 | 67 | "@babel/helper-compilation-targets@^7.10.4": 68 | version "7.10.4" 69 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" 70 | integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== 71 | dependencies: 72 | "@babel/compat-data" "^7.10.4" 73 | browserslist "^4.12.0" 74 | invariant "^2.2.4" 75 | levenary "^1.1.1" 76 | semver "^5.5.0" 77 | 78 | "@babel/helper-create-class-features-plugin@^7.10.4": 79 | version "7.10.5" 80 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" 81 | integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== 82 | dependencies: 83 | "@babel/helper-function-name" "^7.10.4" 84 | "@babel/helper-member-expression-to-functions" "^7.10.5" 85 | "@babel/helper-optimise-call-expression" "^7.10.4" 86 | "@babel/helper-plugin-utils" "^7.10.4" 87 | "@babel/helper-replace-supers" "^7.10.4" 88 | "@babel/helper-split-export-declaration" "^7.10.4" 89 | 90 | "@babel/helper-create-regexp-features-plugin@^7.10.4": 91 | version "7.10.4" 92 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" 93 | integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== 94 | dependencies: 95 | "@babel/helper-annotate-as-pure" "^7.10.4" 96 | "@babel/helper-regex" "^7.10.4" 97 | regexpu-core "^4.7.0" 98 | 99 | "@babel/helper-define-map@^7.10.4": 100 | version "7.10.5" 101 | resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" 102 | integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== 103 | dependencies: 104 | "@babel/helper-function-name" "^7.10.4" 105 | "@babel/types" "^7.10.5" 106 | lodash "^4.17.19" 107 | 108 | "@babel/helper-explode-assignable-expression@^7.10.4": 109 | version "7.10.4" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" 111 | integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== 112 | dependencies: 113 | "@babel/traverse" "^7.10.4" 114 | "@babel/types" "^7.10.4" 115 | 116 | "@babel/helper-function-name@^7.10.4": 117 | version "7.10.4" 118 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" 119 | integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== 120 | dependencies: 121 | "@babel/helper-get-function-arity" "^7.10.4" 122 | "@babel/template" "^7.10.4" 123 | "@babel/types" "^7.10.4" 124 | 125 | "@babel/helper-get-function-arity@^7.10.4": 126 | version "7.10.4" 127 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" 128 | integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== 129 | dependencies: 130 | "@babel/types" "^7.10.4" 131 | 132 | "@babel/helper-hoist-variables@^7.10.4": 133 | version "7.10.4" 134 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" 135 | integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== 136 | dependencies: 137 | "@babel/types" "^7.10.4" 138 | 139 | "@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": 140 | version "7.11.0" 141 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" 142 | integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== 143 | dependencies: 144 | "@babel/types" "^7.11.0" 145 | 146 | "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.7.4": 147 | version "7.10.4" 148 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" 149 | integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== 150 | dependencies: 151 | "@babel/types" "^7.10.4" 152 | 153 | "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": 154 | version "7.11.0" 155 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" 156 | integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== 157 | dependencies: 158 | "@babel/helper-module-imports" "^7.10.4" 159 | "@babel/helper-replace-supers" "^7.10.4" 160 | "@babel/helper-simple-access" "^7.10.4" 161 | "@babel/helper-split-export-declaration" "^7.11.0" 162 | "@babel/template" "^7.10.4" 163 | "@babel/types" "^7.11.0" 164 | lodash "^4.17.19" 165 | 166 | "@babel/helper-optimise-call-expression@^7.10.4": 167 | version "7.10.4" 168 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" 169 | integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== 170 | dependencies: 171 | "@babel/types" "^7.10.4" 172 | 173 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": 174 | version "7.10.4" 175 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" 176 | integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== 177 | 178 | "@babel/helper-regex@^7.10.4": 179 | version "7.10.5" 180 | resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" 181 | integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== 182 | dependencies: 183 | lodash "^4.17.19" 184 | 185 | "@babel/helper-remap-async-to-generator@^7.10.4": 186 | version "7.10.4" 187 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" 188 | integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== 189 | dependencies: 190 | "@babel/helper-annotate-as-pure" "^7.10.4" 191 | "@babel/helper-wrap-function" "^7.10.4" 192 | "@babel/template" "^7.10.4" 193 | "@babel/traverse" "^7.10.4" 194 | "@babel/types" "^7.10.4" 195 | 196 | "@babel/helper-replace-supers@^7.10.4": 197 | version "7.10.4" 198 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" 199 | integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== 200 | dependencies: 201 | "@babel/helper-member-expression-to-functions" "^7.10.4" 202 | "@babel/helper-optimise-call-expression" "^7.10.4" 203 | "@babel/traverse" "^7.10.4" 204 | "@babel/types" "^7.10.4" 205 | 206 | "@babel/helper-simple-access@^7.10.4": 207 | version "7.10.4" 208 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" 209 | integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== 210 | dependencies: 211 | "@babel/template" "^7.10.4" 212 | "@babel/types" "^7.10.4" 213 | 214 | "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": 215 | version "7.11.0" 216 | resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" 217 | integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== 218 | dependencies: 219 | "@babel/types" "^7.11.0" 220 | 221 | "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": 222 | version "7.11.0" 223 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" 224 | integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== 225 | dependencies: 226 | "@babel/types" "^7.11.0" 227 | 228 | "@babel/helper-validator-identifier@^7.10.4": 229 | version "7.10.4" 230 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 231 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 232 | 233 | "@babel/helper-wrap-function@^7.10.4": 234 | version "7.10.4" 235 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" 236 | integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== 237 | dependencies: 238 | "@babel/helper-function-name" "^7.10.4" 239 | "@babel/template" "^7.10.4" 240 | "@babel/traverse" "^7.10.4" 241 | "@babel/types" "^7.10.4" 242 | 243 | "@babel/helpers@^7.10.4": 244 | version "7.10.4" 245 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" 246 | integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== 247 | dependencies: 248 | "@babel/template" "^7.10.4" 249 | "@babel/traverse" "^7.10.4" 250 | "@babel/types" "^7.10.4" 251 | 252 | "@babel/highlight@^7.10.4": 253 | version "7.10.4" 254 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 255 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 256 | dependencies: 257 | "@babel/helper-validator-identifier" "^7.10.4" 258 | chalk "^2.0.0" 259 | js-tokens "^4.0.0" 260 | 261 | "@babel/parser@^7.10.4", "@babel/parser@^7.11.0": 262 | version "7.11.0" 263 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.0.tgz#a9d7e11aead25d3b422d17b2c6502c8dddef6a5d" 264 | integrity sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw== 265 | 266 | "@babel/plugin-proposal-async-generator-functions@^7.10.4": 267 | version "7.10.5" 268 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" 269 | integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== 270 | dependencies: 271 | "@babel/helper-plugin-utils" "^7.10.4" 272 | "@babel/helper-remap-async-to-generator" "^7.10.4" 273 | "@babel/plugin-syntax-async-generators" "^7.8.0" 274 | 275 | "@babel/plugin-proposal-class-properties@^7.10.4": 276 | version "7.10.4" 277 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" 278 | integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== 279 | dependencies: 280 | "@babel/helper-create-class-features-plugin" "^7.10.4" 281 | "@babel/helper-plugin-utils" "^7.10.4" 282 | 283 | "@babel/plugin-proposal-dynamic-import@^7.10.4": 284 | version "7.10.4" 285 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" 286 | integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== 287 | dependencies: 288 | "@babel/helper-plugin-utils" "^7.10.4" 289 | "@babel/plugin-syntax-dynamic-import" "^7.8.0" 290 | 291 | "@babel/plugin-proposal-export-namespace-from@^7.10.4": 292 | version "7.10.4" 293 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" 294 | integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== 295 | dependencies: 296 | "@babel/helper-plugin-utils" "^7.10.4" 297 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 298 | 299 | "@babel/plugin-proposal-json-strings@^7.10.4": 300 | version "7.10.4" 301 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" 302 | integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== 303 | dependencies: 304 | "@babel/helper-plugin-utils" "^7.10.4" 305 | "@babel/plugin-syntax-json-strings" "^7.8.0" 306 | 307 | "@babel/plugin-proposal-logical-assignment-operators@^7.11.0": 308 | version "7.11.0" 309 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" 310 | integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== 311 | dependencies: 312 | "@babel/helper-plugin-utils" "^7.10.4" 313 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 314 | 315 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": 316 | version "7.10.4" 317 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" 318 | integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== 319 | dependencies: 320 | "@babel/helper-plugin-utils" "^7.10.4" 321 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" 322 | 323 | "@babel/plugin-proposal-numeric-separator@^7.10.4": 324 | version "7.10.4" 325 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" 326 | integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== 327 | dependencies: 328 | "@babel/helper-plugin-utils" "^7.10.4" 329 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 330 | 331 | "@babel/plugin-proposal-object-rest-spread@^7.11.0": 332 | version "7.11.0" 333 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" 334 | integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== 335 | dependencies: 336 | "@babel/helper-plugin-utils" "^7.10.4" 337 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0" 338 | "@babel/plugin-transform-parameters" "^7.10.4" 339 | 340 | "@babel/plugin-proposal-optional-catch-binding@^7.10.4": 341 | version "7.10.4" 342 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" 343 | integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== 344 | dependencies: 345 | "@babel/helper-plugin-utils" "^7.10.4" 346 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" 347 | 348 | "@babel/plugin-proposal-optional-chaining@^7.11.0": 349 | version "7.11.0" 350 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" 351 | integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== 352 | dependencies: 353 | "@babel/helper-plugin-utils" "^7.10.4" 354 | "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" 355 | "@babel/plugin-syntax-optional-chaining" "^7.8.0" 356 | 357 | "@babel/plugin-proposal-private-methods@^7.10.4": 358 | version "7.10.4" 359 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" 360 | integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== 361 | dependencies: 362 | "@babel/helper-create-class-features-plugin" "^7.10.4" 363 | "@babel/helper-plugin-utils" "^7.10.4" 364 | 365 | "@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": 366 | version "7.10.4" 367 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" 368 | integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== 369 | dependencies: 370 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" 371 | "@babel/helper-plugin-utils" "^7.10.4" 372 | 373 | "@babel/plugin-syntax-async-generators@^7.8.0": 374 | version "7.8.4" 375 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 376 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 377 | dependencies: 378 | "@babel/helper-plugin-utils" "^7.8.0" 379 | 380 | "@babel/plugin-syntax-class-properties@^7.10.4": 381 | version "7.10.4" 382 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" 383 | integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== 384 | dependencies: 385 | "@babel/helper-plugin-utils" "^7.10.4" 386 | 387 | "@babel/plugin-syntax-dynamic-import@^7.8.0": 388 | version "7.8.3" 389 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" 390 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== 391 | dependencies: 392 | "@babel/helper-plugin-utils" "^7.8.0" 393 | 394 | "@babel/plugin-syntax-export-namespace-from@^7.8.3": 395 | version "7.8.3" 396 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" 397 | integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== 398 | dependencies: 399 | "@babel/helper-plugin-utils" "^7.8.3" 400 | 401 | "@babel/plugin-syntax-json-strings@^7.8.0": 402 | version "7.8.3" 403 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 404 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 405 | dependencies: 406 | "@babel/helper-plugin-utils" "^7.8.0" 407 | 408 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 409 | version "7.10.4" 410 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 411 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 412 | dependencies: 413 | "@babel/helper-plugin-utils" "^7.10.4" 414 | 415 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": 416 | version "7.8.3" 417 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 418 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 419 | dependencies: 420 | "@babel/helper-plugin-utils" "^7.8.0" 421 | 422 | "@babel/plugin-syntax-numeric-separator@^7.10.4": 423 | version "7.10.4" 424 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 425 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 426 | dependencies: 427 | "@babel/helper-plugin-utils" "^7.10.4" 428 | 429 | "@babel/plugin-syntax-object-rest-spread@^7.8.0": 430 | version "7.8.3" 431 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 432 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 433 | dependencies: 434 | "@babel/helper-plugin-utils" "^7.8.0" 435 | 436 | "@babel/plugin-syntax-optional-catch-binding@^7.8.0": 437 | version "7.8.3" 438 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 439 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 440 | dependencies: 441 | "@babel/helper-plugin-utils" "^7.8.0" 442 | 443 | "@babel/plugin-syntax-optional-chaining@^7.8.0": 444 | version "7.8.3" 445 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 446 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 447 | dependencies: 448 | "@babel/helper-plugin-utils" "^7.8.0" 449 | 450 | "@babel/plugin-syntax-top-level-await@^7.10.4": 451 | version "7.10.4" 452 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" 453 | integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== 454 | dependencies: 455 | "@babel/helper-plugin-utils" "^7.10.4" 456 | 457 | "@babel/plugin-transform-arrow-functions@^7.10.4": 458 | version "7.10.4" 459 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" 460 | integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== 461 | dependencies: 462 | "@babel/helper-plugin-utils" "^7.10.4" 463 | 464 | "@babel/plugin-transform-async-to-generator@^7.10.4": 465 | version "7.10.4" 466 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" 467 | integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== 468 | dependencies: 469 | "@babel/helper-module-imports" "^7.10.4" 470 | "@babel/helper-plugin-utils" "^7.10.4" 471 | "@babel/helper-remap-async-to-generator" "^7.10.4" 472 | 473 | "@babel/plugin-transform-block-scoped-functions@^7.10.4": 474 | version "7.10.4" 475 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" 476 | integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== 477 | dependencies: 478 | "@babel/helper-plugin-utils" "^7.10.4" 479 | 480 | "@babel/plugin-transform-block-scoping@^7.10.4": 481 | version "7.10.5" 482 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" 483 | integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== 484 | dependencies: 485 | "@babel/helper-plugin-utils" "^7.10.4" 486 | 487 | "@babel/plugin-transform-classes@^7.10.4": 488 | version "7.10.4" 489 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" 490 | integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== 491 | dependencies: 492 | "@babel/helper-annotate-as-pure" "^7.10.4" 493 | "@babel/helper-define-map" "^7.10.4" 494 | "@babel/helper-function-name" "^7.10.4" 495 | "@babel/helper-optimise-call-expression" "^7.10.4" 496 | "@babel/helper-plugin-utils" "^7.10.4" 497 | "@babel/helper-replace-supers" "^7.10.4" 498 | "@babel/helper-split-export-declaration" "^7.10.4" 499 | globals "^11.1.0" 500 | 501 | "@babel/plugin-transform-computed-properties@^7.10.4": 502 | version "7.10.4" 503 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" 504 | integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== 505 | dependencies: 506 | "@babel/helper-plugin-utils" "^7.10.4" 507 | 508 | "@babel/plugin-transform-destructuring@^7.10.4": 509 | version "7.10.4" 510 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" 511 | integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== 512 | dependencies: 513 | "@babel/helper-plugin-utils" "^7.10.4" 514 | 515 | "@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": 516 | version "7.10.4" 517 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" 518 | integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== 519 | dependencies: 520 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" 521 | "@babel/helper-plugin-utils" "^7.10.4" 522 | 523 | "@babel/plugin-transform-duplicate-keys@^7.10.4": 524 | version "7.10.4" 525 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" 526 | integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== 527 | dependencies: 528 | "@babel/helper-plugin-utils" "^7.10.4" 529 | 530 | "@babel/plugin-transform-exponentiation-operator@^7.10.4": 531 | version "7.10.4" 532 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" 533 | integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== 534 | dependencies: 535 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" 536 | "@babel/helper-plugin-utils" "^7.10.4" 537 | 538 | "@babel/plugin-transform-for-of@^7.10.4": 539 | version "7.10.4" 540 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" 541 | integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== 542 | dependencies: 543 | "@babel/helper-plugin-utils" "^7.10.4" 544 | 545 | "@babel/plugin-transform-function-name@^7.10.4": 546 | version "7.10.4" 547 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" 548 | integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== 549 | dependencies: 550 | "@babel/helper-function-name" "^7.10.4" 551 | "@babel/helper-plugin-utils" "^7.10.4" 552 | 553 | "@babel/plugin-transform-literals@^7.10.4": 554 | version "7.10.4" 555 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" 556 | integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== 557 | dependencies: 558 | "@babel/helper-plugin-utils" "^7.10.4" 559 | 560 | "@babel/plugin-transform-member-expression-literals@^7.10.4": 561 | version "7.10.4" 562 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" 563 | integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== 564 | dependencies: 565 | "@babel/helper-plugin-utils" "^7.10.4" 566 | 567 | "@babel/plugin-transform-modules-amd@^7.10.4": 568 | version "7.10.5" 569 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" 570 | integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== 571 | dependencies: 572 | "@babel/helper-module-transforms" "^7.10.5" 573 | "@babel/helper-plugin-utils" "^7.10.4" 574 | babel-plugin-dynamic-import-node "^2.3.3" 575 | 576 | "@babel/plugin-transform-modules-commonjs@^7.10.4": 577 | version "7.10.4" 578 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" 579 | integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== 580 | dependencies: 581 | "@babel/helper-module-transforms" "^7.10.4" 582 | "@babel/helper-plugin-utils" "^7.10.4" 583 | "@babel/helper-simple-access" "^7.10.4" 584 | babel-plugin-dynamic-import-node "^2.3.3" 585 | 586 | "@babel/plugin-transform-modules-systemjs@^7.10.4": 587 | version "7.10.5" 588 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" 589 | integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== 590 | dependencies: 591 | "@babel/helper-hoist-variables" "^7.10.4" 592 | "@babel/helper-module-transforms" "^7.10.5" 593 | "@babel/helper-plugin-utils" "^7.10.4" 594 | babel-plugin-dynamic-import-node "^2.3.3" 595 | 596 | "@babel/plugin-transform-modules-umd@^7.10.4": 597 | version "7.10.4" 598 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" 599 | integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== 600 | dependencies: 601 | "@babel/helper-module-transforms" "^7.10.4" 602 | "@babel/helper-plugin-utils" "^7.10.4" 603 | 604 | "@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": 605 | version "7.10.4" 606 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" 607 | integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== 608 | dependencies: 609 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" 610 | 611 | "@babel/plugin-transform-new-target@^7.10.4": 612 | version "7.10.4" 613 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" 614 | integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== 615 | dependencies: 616 | "@babel/helper-plugin-utils" "^7.10.4" 617 | 618 | "@babel/plugin-transform-object-super@^7.10.4": 619 | version "7.10.4" 620 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" 621 | integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== 622 | dependencies: 623 | "@babel/helper-plugin-utils" "^7.10.4" 624 | "@babel/helper-replace-supers" "^7.10.4" 625 | 626 | "@babel/plugin-transform-parameters@^7.10.4": 627 | version "7.10.5" 628 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" 629 | integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== 630 | dependencies: 631 | "@babel/helper-get-function-arity" "^7.10.4" 632 | "@babel/helper-plugin-utils" "^7.10.4" 633 | 634 | "@babel/plugin-transform-property-literals@^7.10.4": 635 | version "7.10.4" 636 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" 637 | integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== 638 | dependencies: 639 | "@babel/helper-plugin-utils" "^7.10.4" 640 | 641 | "@babel/plugin-transform-regenerator@^7.10.4": 642 | version "7.10.4" 643 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" 644 | integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== 645 | dependencies: 646 | regenerator-transform "^0.14.2" 647 | 648 | "@babel/plugin-transform-reserved-words@^7.10.4": 649 | version "7.10.4" 650 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" 651 | integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== 652 | dependencies: 653 | "@babel/helper-plugin-utils" "^7.10.4" 654 | 655 | "@babel/plugin-transform-shorthand-properties@^7.10.4": 656 | version "7.10.4" 657 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" 658 | integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== 659 | dependencies: 660 | "@babel/helper-plugin-utils" "^7.10.4" 661 | 662 | "@babel/plugin-transform-spread@^7.11.0": 663 | version "7.11.0" 664 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" 665 | integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== 666 | dependencies: 667 | "@babel/helper-plugin-utils" "^7.10.4" 668 | "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" 669 | 670 | "@babel/plugin-transform-sticky-regex@^7.10.4": 671 | version "7.10.4" 672 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" 673 | integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== 674 | dependencies: 675 | "@babel/helper-plugin-utils" "^7.10.4" 676 | "@babel/helper-regex" "^7.10.4" 677 | 678 | "@babel/plugin-transform-template-literals@^7.10.4": 679 | version "7.10.5" 680 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" 681 | integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== 682 | dependencies: 683 | "@babel/helper-annotate-as-pure" "^7.10.4" 684 | "@babel/helper-plugin-utils" "^7.10.4" 685 | 686 | "@babel/plugin-transform-typeof-symbol@^7.10.4": 687 | version "7.10.4" 688 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" 689 | integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== 690 | dependencies: 691 | "@babel/helper-plugin-utils" "^7.10.4" 692 | 693 | "@babel/plugin-transform-unicode-escapes@^7.10.4": 694 | version "7.10.4" 695 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" 696 | integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== 697 | dependencies: 698 | "@babel/helper-plugin-utils" "^7.10.4" 699 | 700 | "@babel/plugin-transform-unicode-regex@^7.10.4": 701 | version "7.10.4" 702 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" 703 | integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== 704 | dependencies: 705 | "@babel/helper-create-regexp-features-plugin" "^7.10.4" 706 | "@babel/helper-plugin-utils" "^7.10.4" 707 | 708 | "@babel/preset-env@7.11.0": 709 | version "7.11.0" 710 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" 711 | integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== 712 | dependencies: 713 | "@babel/compat-data" "^7.11.0" 714 | "@babel/helper-compilation-targets" "^7.10.4" 715 | "@babel/helper-module-imports" "^7.10.4" 716 | "@babel/helper-plugin-utils" "^7.10.4" 717 | "@babel/plugin-proposal-async-generator-functions" "^7.10.4" 718 | "@babel/plugin-proposal-class-properties" "^7.10.4" 719 | "@babel/plugin-proposal-dynamic-import" "^7.10.4" 720 | "@babel/plugin-proposal-export-namespace-from" "^7.10.4" 721 | "@babel/plugin-proposal-json-strings" "^7.10.4" 722 | "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" 723 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" 724 | "@babel/plugin-proposal-numeric-separator" "^7.10.4" 725 | "@babel/plugin-proposal-object-rest-spread" "^7.11.0" 726 | "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" 727 | "@babel/plugin-proposal-optional-chaining" "^7.11.0" 728 | "@babel/plugin-proposal-private-methods" "^7.10.4" 729 | "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" 730 | "@babel/plugin-syntax-async-generators" "^7.8.0" 731 | "@babel/plugin-syntax-class-properties" "^7.10.4" 732 | "@babel/plugin-syntax-dynamic-import" "^7.8.0" 733 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 734 | "@babel/plugin-syntax-json-strings" "^7.8.0" 735 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 736 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" 737 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 738 | "@babel/plugin-syntax-object-rest-spread" "^7.8.0" 739 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" 740 | "@babel/plugin-syntax-optional-chaining" "^7.8.0" 741 | "@babel/plugin-syntax-top-level-await" "^7.10.4" 742 | "@babel/plugin-transform-arrow-functions" "^7.10.4" 743 | "@babel/plugin-transform-async-to-generator" "^7.10.4" 744 | "@babel/plugin-transform-block-scoped-functions" "^7.10.4" 745 | "@babel/plugin-transform-block-scoping" "^7.10.4" 746 | "@babel/plugin-transform-classes" "^7.10.4" 747 | "@babel/plugin-transform-computed-properties" "^7.10.4" 748 | "@babel/plugin-transform-destructuring" "^7.10.4" 749 | "@babel/plugin-transform-dotall-regex" "^7.10.4" 750 | "@babel/plugin-transform-duplicate-keys" "^7.10.4" 751 | "@babel/plugin-transform-exponentiation-operator" "^7.10.4" 752 | "@babel/plugin-transform-for-of" "^7.10.4" 753 | "@babel/plugin-transform-function-name" "^7.10.4" 754 | "@babel/plugin-transform-literals" "^7.10.4" 755 | "@babel/plugin-transform-member-expression-literals" "^7.10.4" 756 | "@babel/plugin-transform-modules-amd" "^7.10.4" 757 | "@babel/plugin-transform-modules-commonjs" "^7.10.4" 758 | "@babel/plugin-transform-modules-systemjs" "^7.10.4" 759 | "@babel/plugin-transform-modules-umd" "^7.10.4" 760 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" 761 | "@babel/plugin-transform-new-target" "^7.10.4" 762 | "@babel/plugin-transform-object-super" "^7.10.4" 763 | "@babel/plugin-transform-parameters" "^7.10.4" 764 | "@babel/plugin-transform-property-literals" "^7.10.4" 765 | "@babel/plugin-transform-regenerator" "^7.10.4" 766 | "@babel/plugin-transform-reserved-words" "^7.10.4" 767 | "@babel/plugin-transform-shorthand-properties" "^7.10.4" 768 | "@babel/plugin-transform-spread" "^7.11.0" 769 | "@babel/plugin-transform-sticky-regex" "^7.10.4" 770 | "@babel/plugin-transform-template-literals" "^7.10.4" 771 | "@babel/plugin-transform-typeof-symbol" "^7.10.4" 772 | "@babel/plugin-transform-unicode-escapes" "^7.10.4" 773 | "@babel/plugin-transform-unicode-regex" "^7.10.4" 774 | "@babel/preset-modules" "^0.1.3" 775 | "@babel/types" "^7.11.0" 776 | browserslist "^4.12.0" 777 | core-js-compat "^3.6.2" 778 | invariant "^2.2.2" 779 | levenary "^1.1.1" 780 | semver "^5.5.0" 781 | 782 | "@babel/preset-modules@^0.1.3": 783 | version "0.1.3" 784 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" 785 | integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== 786 | dependencies: 787 | "@babel/helper-plugin-utils" "^7.0.0" 788 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" 789 | "@babel/plugin-transform-dotall-regex" "^7.4.4" 790 | "@babel/types" "^7.4.4" 791 | esutils "^2.0.2" 792 | 793 | "@babel/runtime@^7.8.4": 794 | version "7.11.0" 795 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.0.tgz#f10245877042a815e07f7e693faff0ae9d3a2aac" 796 | integrity sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== 797 | dependencies: 798 | regenerator-runtime "^0.13.4" 799 | 800 | "@babel/template@^7.10.4": 801 | version "7.10.4" 802 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" 803 | integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== 804 | dependencies: 805 | "@babel/code-frame" "^7.10.4" 806 | "@babel/parser" "^7.10.4" 807 | "@babel/types" "^7.10.4" 808 | 809 | "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": 810 | version "7.11.0" 811 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" 812 | integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== 813 | dependencies: 814 | "@babel/code-frame" "^7.10.4" 815 | "@babel/generator" "^7.11.0" 816 | "@babel/helper-function-name" "^7.10.4" 817 | "@babel/helper-split-export-declaration" "^7.11.0" 818 | "@babel/parser" "^7.11.0" 819 | "@babel/types" "^7.11.0" 820 | debug "^4.1.0" 821 | globals "^11.1.0" 822 | lodash "^4.17.19" 823 | 824 | "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4.4": 825 | version "7.11.0" 826 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" 827 | integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== 828 | dependencies: 829 | "@babel/helper-validator-identifier" "^7.10.4" 830 | lodash "^4.17.19" 831 | to-fast-properties "^2.0.0" 832 | 833 | "@rollup/plugin-babel@5.1.0": 834 | version "5.1.0" 835 | resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.1.0.tgz#ad8b5803fa6e1feb0f168984edc040b90d966450" 836 | integrity sha512-zXBEYmfiLAMvB+ZBa6m/q9hsQYAq1sUFdjuP1F6C2pf6uQcpHwAWQveZgzS63zXdKPUYHD3Dr7BhjCqcr0bbLw== 837 | dependencies: 838 | "@babel/helper-module-imports" "^7.7.4" 839 | "@rollup/pluginutils" "^3.0.8" 840 | 841 | "@rollup/plugin-commonjs@14.0.0": 842 | version "14.0.0" 843 | resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz#4285f9ec2db686a31129e5a2b415c94aa1f836f0" 844 | integrity sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw== 845 | dependencies: 846 | "@rollup/pluginutils" "^3.0.8" 847 | commondir "^1.0.1" 848 | estree-walker "^1.0.1" 849 | glob "^7.1.2" 850 | is-reference "^1.1.2" 851 | magic-string "^0.25.2" 852 | resolve "^1.11.0" 853 | 854 | "@rollup/plugin-node-resolve@8.4.0": 855 | version "8.4.0" 856 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz#261d79a680e9dc3d86761c14462f24126ba83575" 857 | integrity sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== 858 | dependencies: 859 | "@rollup/pluginutils" "^3.1.0" 860 | "@types/resolve" "1.17.1" 861 | builtin-modules "^3.1.0" 862 | deep-freeze "^0.0.1" 863 | deepmerge "^4.2.2" 864 | is-module "^1.0.0" 865 | resolve "^1.17.0" 866 | 867 | "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": 868 | version "3.1.0" 869 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 870 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 871 | dependencies: 872 | "@types/estree" "0.0.39" 873 | estree-walker "^1.0.1" 874 | picomatch "^2.2.2" 875 | 876 | "@types/chai@^4.2.12": 877 | version "4.2.12" 878 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.12.tgz#6160ae454cd89dae05adc3bb97997f488b608201" 879 | integrity sha512-aN5IAC8QNtSUdQzxu7lGBgYAOuU1tmRU4c9dIq5OKGf/SBVjXo+ffM2wEjudAWbgpOhy60nLoAGH1xm8fpCKFQ== 880 | 881 | "@types/estree@*": 882 | version "0.0.45" 883 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" 884 | integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== 885 | 886 | "@types/estree@0.0.39": 887 | version "0.0.39" 888 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 889 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 890 | 891 | "@types/json5@^0.0.29": 892 | version "0.0.29" 893 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 894 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 895 | 896 | "@types/mocha@^8.0.0": 897 | version "8.0.0" 898 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.0.0.tgz#b0ba1c5b4cb3880c51a6b488ad007a657d1be888" 899 | integrity sha512-jWeYcTo3sCH/rMgsdYXDTO85GNRyTCII5dayMIu/ZO4zbEot1E3iNGaOwpLReLUHjeNQFkgeNNVYlY4dX6azQQ== 900 | 901 | "@types/node@*": 902 | version "14.0.27" 903 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" 904 | integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== 905 | 906 | "@types/prop-types@*": 907 | version "15.7.3" 908 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" 909 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 910 | 911 | "@types/react-dom@^16.9.8": 912 | version "16.9.8" 913 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" 914 | integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== 915 | dependencies: 916 | "@types/react" "*" 917 | 918 | "@types/react-is@16.7.1": 919 | version "16.7.1" 920 | resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-16.7.1.tgz#d3f1c68c358c00ce116b55ef5410cf486dd08539" 921 | integrity sha512-dMLFD2cCsxtDgMkTydQCM0PxDq8vwc6uN5M/jRktDfYvH3nQj6pjC9OrCXS2lKlYoYTNJorI/dI8x9dpLshexQ== 922 | dependencies: 923 | "@types/react" "*" 924 | 925 | "@types/react@*", "@types/react@^16.9.43": 926 | version "16.9.43" 927 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.43.tgz#c287f23f6189666ee3bebc2eb8d0f84bcb6cdb6b" 928 | integrity sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg== 929 | dependencies: 930 | "@types/prop-types" "*" 931 | csstype "^2.2.0" 932 | 933 | "@types/resolve@1.17.1": 934 | version "1.17.1" 935 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" 936 | integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 937 | dependencies: 938 | "@types/node" "*" 939 | 940 | ansi-colors@3.2.3: 941 | version "3.2.3" 942 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 943 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 944 | 945 | ansi-regex@^3.0.0: 946 | version "3.0.0" 947 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 948 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 949 | 950 | ansi-regex@^4.1.0: 951 | version "4.1.0" 952 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 953 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 954 | 955 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 956 | version "3.2.1" 957 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 958 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 959 | dependencies: 960 | color-convert "^1.9.0" 961 | 962 | argparse@^1.0.7: 963 | version "1.0.10" 964 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 965 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 966 | dependencies: 967 | sprintf-js "~1.0.2" 968 | 969 | arrify@^1.0.0: 970 | version "1.0.1" 971 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 972 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 973 | 974 | assertion-error@^1.1.0: 975 | version "1.1.0" 976 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 977 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 978 | 979 | babel-plugin-dynamic-import-node@^2.3.3: 980 | version "2.3.3" 981 | resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" 982 | integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== 983 | dependencies: 984 | object.assign "^4.1.0" 985 | 986 | balanced-match@^1.0.0: 987 | version "1.0.0" 988 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 989 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 990 | 991 | brace-expansion@^1.1.7: 992 | version "1.1.11" 993 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 994 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 995 | dependencies: 996 | balanced-match "^1.0.0" 997 | concat-map "0.0.1" 998 | 999 | browser-stdout@1.3.1: 1000 | version "1.3.1" 1001 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 1002 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 1003 | 1004 | browserslist@^4.12.0, browserslist@^4.8.5: 1005 | version "4.13.0" 1006 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" 1007 | integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== 1008 | dependencies: 1009 | caniuse-lite "^1.0.30001093" 1010 | electron-to-chromium "^1.3.488" 1011 | escalade "^3.0.1" 1012 | node-releases "^1.1.58" 1013 | 1014 | buffer-from@^1.0.0, buffer-from@^1.1.0: 1015 | version "1.1.1" 1016 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 1017 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 1018 | 1019 | builtin-modules@^3.1.0: 1020 | version "3.1.0" 1021 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" 1022 | integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== 1023 | 1024 | camelcase@^5.0.0: 1025 | version "5.3.1" 1026 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 1027 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 1028 | 1029 | caniuse-lite@^1.0.30001093: 1030 | version "1.0.30001109" 1031 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz#a9f3f26a0c3753b063d7acbb48dfb9c0e46f2b19" 1032 | integrity sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ== 1033 | 1034 | chai@^4.2.0: 1035 | version "4.2.0" 1036 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 1037 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== 1038 | dependencies: 1039 | assertion-error "^1.1.0" 1040 | check-error "^1.0.2" 1041 | deep-eql "^3.0.1" 1042 | get-func-name "^2.0.0" 1043 | pathval "^1.1.0" 1044 | type-detect "^4.0.5" 1045 | 1046 | chalk@^2.0.0, chalk@^2.0.1: 1047 | version "2.4.2" 1048 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1049 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1050 | dependencies: 1051 | ansi-styles "^3.2.1" 1052 | escape-string-regexp "^1.0.5" 1053 | supports-color "^5.3.0" 1054 | 1055 | check-error@^1.0.2: 1056 | version "1.0.2" 1057 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 1058 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 1059 | 1060 | cliui@^5.0.0: 1061 | version "5.0.0" 1062 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 1063 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 1064 | dependencies: 1065 | string-width "^3.1.0" 1066 | strip-ansi "^5.2.0" 1067 | wrap-ansi "^5.1.0" 1068 | 1069 | color-convert@^1.9.0: 1070 | version "1.9.3" 1071 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1072 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1073 | dependencies: 1074 | color-name "1.1.3" 1075 | 1076 | color-name@1.1.3: 1077 | version "1.1.3" 1078 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1079 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 1080 | 1081 | commondir@^1.0.1: 1082 | version "1.0.1" 1083 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 1084 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 1085 | 1086 | concat-map@0.0.1: 1087 | version "0.0.1" 1088 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1089 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 1090 | 1091 | convert-source-map@^1.7.0: 1092 | version "1.7.0" 1093 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 1094 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 1095 | dependencies: 1096 | safe-buffer "~5.1.1" 1097 | 1098 | core-js-compat@^3.6.2: 1099 | version "3.6.5" 1100 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" 1101 | integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== 1102 | dependencies: 1103 | browserslist "^4.8.5" 1104 | semver "7.0.0" 1105 | 1106 | csstype@^2.2.0: 1107 | version "2.6.13" 1108 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.13.tgz#a6893015b90e84dd6e85d0e3b442a1e84f2dbe0f" 1109 | integrity sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A== 1110 | 1111 | debug@3.2.6: 1112 | version "3.2.6" 1113 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 1114 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 1115 | dependencies: 1116 | ms "^2.1.1" 1117 | 1118 | debug@^4.1.0: 1119 | version "4.1.1" 1120 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 1121 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 1122 | dependencies: 1123 | ms "^2.1.1" 1124 | 1125 | decamelize@^1.2.0: 1126 | version "1.2.0" 1127 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 1128 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 1129 | 1130 | deep-eql@^3.0.1: 1131 | version "3.0.1" 1132 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 1133 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 1134 | dependencies: 1135 | type-detect "^4.0.0" 1136 | 1137 | deep-freeze@^0.0.1: 1138 | version "0.0.1" 1139 | resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" 1140 | integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= 1141 | 1142 | deepmerge@^4.2.2: 1143 | version "4.2.2" 1144 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 1145 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 1146 | 1147 | define-properties@^1.1.2, define-properties@^1.1.3: 1148 | version "1.1.3" 1149 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 1150 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 1151 | dependencies: 1152 | object-keys "^1.0.12" 1153 | 1154 | diff@3.5.0, diff@^3.1.0: 1155 | version "3.5.0" 1156 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 1157 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 1158 | 1159 | electron-to-chromium@^1.3.488: 1160 | version "1.3.515" 1161 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.515.tgz#96683d2c2be9bf83f6cca75d504a7b443d763c08" 1162 | integrity sha512-C9h2yLQwNSK/GTtWQsA9O6mLKv0ubmiAQgmz1HvHnAIH8g5Sje1shWxcooumbGiwgqvZ9yrTYULe4seMTgMYqQ== 1163 | 1164 | emoji-regex@^7.0.1: 1165 | version "7.0.3" 1166 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1167 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 1168 | 1169 | es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: 1170 | version "1.17.6" 1171 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" 1172 | integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== 1173 | dependencies: 1174 | es-to-primitive "^1.2.1" 1175 | function-bind "^1.1.1" 1176 | has "^1.0.3" 1177 | has-symbols "^1.0.1" 1178 | is-callable "^1.2.0" 1179 | is-regex "^1.1.0" 1180 | object-inspect "^1.7.0" 1181 | object-keys "^1.1.1" 1182 | object.assign "^4.1.0" 1183 | string.prototype.trimend "^1.0.1" 1184 | string.prototype.trimstart "^1.0.1" 1185 | 1186 | es-to-primitive@^1.2.1: 1187 | version "1.2.1" 1188 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1189 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1190 | dependencies: 1191 | is-callable "^1.1.4" 1192 | is-date-object "^1.0.1" 1193 | is-symbol "^1.0.2" 1194 | 1195 | escalade@^3.0.1: 1196 | version "3.0.2" 1197 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" 1198 | integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== 1199 | 1200 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 1201 | version "1.0.5" 1202 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1203 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 1204 | 1205 | esprima@^4.0.0: 1206 | version "4.0.1" 1207 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1208 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1209 | 1210 | estree-walker@^1.0.1: 1211 | version "1.0.1" 1212 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 1213 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 1214 | 1215 | esutils@^2.0.2: 1216 | version "2.0.3" 1217 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1218 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1219 | 1220 | find-up@3.0.0, find-up@^3.0.0: 1221 | version "3.0.0" 1222 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1223 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 1224 | dependencies: 1225 | locate-path "^3.0.0" 1226 | 1227 | flat@^4.1.0: 1228 | version "4.1.0" 1229 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 1230 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 1231 | dependencies: 1232 | is-buffer "~2.0.3" 1233 | 1234 | fs.realpath@^1.0.0: 1235 | version "1.0.0" 1236 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1237 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1238 | 1239 | fsevents@~2.1.2: 1240 | version "2.1.3" 1241 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 1242 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 1243 | 1244 | function-bind@^1.1.1: 1245 | version "1.1.1" 1246 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1247 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1248 | 1249 | gensync@^1.0.0-beta.1: 1250 | version "1.0.0-beta.1" 1251 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" 1252 | integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== 1253 | 1254 | get-caller-file@^2.0.1: 1255 | version "2.0.5" 1256 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1257 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1258 | 1259 | get-func-name@^2.0.0: 1260 | version "2.0.0" 1261 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 1262 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 1263 | 1264 | glob@7.1.3: 1265 | version "7.1.3" 1266 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1267 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 1268 | dependencies: 1269 | fs.realpath "^1.0.0" 1270 | inflight "^1.0.4" 1271 | inherits "2" 1272 | minimatch "^3.0.4" 1273 | once "^1.3.0" 1274 | path-is-absolute "^1.0.0" 1275 | 1276 | glob@^7.1.2: 1277 | version "7.1.6" 1278 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1279 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1280 | dependencies: 1281 | fs.realpath "^1.0.0" 1282 | inflight "^1.0.4" 1283 | inherits "2" 1284 | minimatch "^3.0.4" 1285 | once "^1.3.0" 1286 | path-is-absolute "^1.0.0" 1287 | 1288 | globals@^11.1.0: 1289 | version "11.12.0" 1290 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1291 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1292 | 1293 | growl@1.10.5: 1294 | version "1.10.5" 1295 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1296 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1297 | 1298 | has-flag@^3.0.0: 1299 | version "3.0.0" 1300 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1301 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1302 | 1303 | has-symbols@^1.0.0, has-symbols@^1.0.1: 1304 | version "1.0.1" 1305 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1306 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1307 | 1308 | has@^1.0.3: 1309 | version "1.0.3" 1310 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1311 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1312 | dependencies: 1313 | function-bind "^1.1.1" 1314 | 1315 | he@1.2.0: 1316 | version "1.2.0" 1317 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1318 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1319 | 1320 | inflight@^1.0.4: 1321 | version "1.0.6" 1322 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1323 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1324 | dependencies: 1325 | once "^1.3.0" 1326 | wrappy "1" 1327 | 1328 | inherits@2: 1329 | version "2.0.4" 1330 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1331 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1332 | 1333 | invariant@^2.2.2, invariant@^2.2.4: 1334 | version "2.2.4" 1335 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1336 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== 1337 | dependencies: 1338 | loose-envify "^1.0.0" 1339 | 1340 | inversify@^5.0.1: 1341 | version "5.0.1" 1342 | resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.0.1.tgz#500d709b1434896ce5a0d58915c4a4210e34fb6e" 1343 | integrity sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ== 1344 | 1345 | is-buffer@~2.0.3: 1346 | version "2.0.4" 1347 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 1348 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 1349 | 1350 | is-callable@^1.1.4, is-callable@^1.2.0: 1351 | version "1.2.0" 1352 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" 1353 | integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== 1354 | 1355 | is-date-object@^1.0.1: 1356 | version "1.0.2" 1357 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1358 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1359 | 1360 | is-fullwidth-code-point@^2.0.0: 1361 | version "2.0.0" 1362 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1363 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1364 | 1365 | is-module@^1.0.0: 1366 | version "1.0.0" 1367 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1368 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 1369 | 1370 | is-reference@^1.1.2: 1371 | version "1.2.1" 1372 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" 1373 | integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== 1374 | dependencies: 1375 | "@types/estree" "*" 1376 | 1377 | is-regex@^1.1.0: 1378 | version "1.1.0" 1379 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" 1380 | integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== 1381 | dependencies: 1382 | has-symbols "^1.0.1" 1383 | 1384 | is-symbol@^1.0.2: 1385 | version "1.0.3" 1386 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1387 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1388 | dependencies: 1389 | has-symbols "^1.0.1" 1390 | 1391 | isexe@^2.0.0: 1392 | version "2.0.0" 1393 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1394 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1395 | 1396 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1397 | version "4.0.0" 1398 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1399 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1400 | 1401 | js-yaml@3.13.1: 1402 | version "3.13.1" 1403 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1404 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1405 | dependencies: 1406 | argparse "^1.0.7" 1407 | esprima "^4.0.0" 1408 | 1409 | jsesc@^2.5.1: 1410 | version "2.5.2" 1411 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1412 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1413 | 1414 | jsesc@~0.5.0: 1415 | version "0.5.0" 1416 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1417 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1418 | 1419 | json5@^1.0.1: 1420 | version "1.0.1" 1421 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 1422 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1423 | dependencies: 1424 | minimist "^1.2.0" 1425 | 1426 | json5@^2.1.2: 1427 | version "2.1.3" 1428 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" 1429 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== 1430 | dependencies: 1431 | minimist "^1.2.5" 1432 | 1433 | leven@^3.1.0: 1434 | version "3.1.0" 1435 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1436 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1437 | 1438 | levenary@^1.1.1: 1439 | version "1.1.1" 1440 | resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" 1441 | integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== 1442 | dependencies: 1443 | leven "^3.1.0" 1444 | 1445 | locate-path@^3.0.0: 1446 | version "3.0.0" 1447 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1448 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1449 | dependencies: 1450 | p-locate "^3.0.0" 1451 | path-exists "^3.0.0" 1452 | 1453 | lodash@^4.17.15, lodash@^4.17.19: 1454 | version "4.17.19" 1455 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 1456 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== 1457 | 1458 | log-symbols@2.2.0: 1459 | version "2.2.0" 1460 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1461 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1462 | dependencies: 1463 | chalk "^2.0.1" 1464 | 1465 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: 1466 | version "1.4.0" 1467 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1468 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1469 | dependencies: 1470 | js-tokens "^3.0.0 || ^4.0.0" 1471 | 1472 | magic-string@^0.25.2: 1473 | version "0.25.7" 1474 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 1475 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 1476 | dependencies: 1477 | sourcemap-codec "^1.4.4" 1478 | 1479 | make-error@^1.1.1: 1480 | version "1.3.6" 1481 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1482 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1483 | 1484 | minimatch@3.0.4, minimatch@^3.0.4: 1485 | version "3.0.4" 1486 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1487 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1488 | dependencies: 1489 | brace-expansion "^1.1.7" 1490 | 1491 | minimist@0.0.8: 1492 | version "0.0.8" 1493 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1494 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1495 | 1496 | minimist@^1.2.0, minimist@^1.2.5: 1497 | version "1.2.5" 1498 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1499 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1500 | 1501 | mkdirp@0.5.1: 1502 | version "0.5.1" 1503 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1504 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1505 | dependencies: 1506 | minimist "0.0.8" 1507 | 1508 | mkdirp@^0.5.1: 1509 | version "0.5.5" 1510 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1511 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1512 | dependencies: 1513 | minimist "^1.2.5" 1514 | 1515 | mocha@6.2.2: 1516 | version "6.2.2" 1517 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20" 1518 | integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== 1519 | dependencies: 1520 | ansi-colors "3.2.3" 1521 | browser-stdout "1.3.1" 1522 | debug "3.2.6" 1523 | diff "3.5.0" 1524 | escape-string-regexp "1.0.5" 1525 | find-up "3.0.0" 1526 | glob "7.1.3" 1527 | growl "1.10.5" 1528 | he "1.2.0" 1529 | js-yaml "3.13.1" 1530 | log-symbols "2.2.0" 1531 | minimatch "3.0.4" 1532 | mkdirp "0.5.1" 1533 | ms "2.1.1" 1534 | node-environment-flags "1.0.5" 1535 | object.assign "4.1.0" 1536 | strip-json-comments "2.0.1" 1537 | supports-color "6.0.0" 1538 | which "1.3.1" 1539 | wide-align "1.1.3" 1540 | yargs "13.3.0" 1541 | yargs-parser "13.1.1" 1542 | yargs-unparser "1.6.0" 1543 | 1544 | ms@2.1.1: 1545 | version "2.1.1" 1546 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1547 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1548 | 1549 | ms@^2.1.1: 1550 | version "2.1.2" 1551 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1552 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1553 | 1554 | node-environment-flags@1.0.5: 1555 | version "1.0.5" 1556 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1557 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1558 | dependencies: 1559 | object.getownpropertydescriptors "^2.0.3" 1560 | semver "^5.7.0" 1561 | 1562 | node-releases@^1.1.58: 1563 | version "1.1.60" 1564 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" 1565 | integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== 1566 | 1567 | object-assign@^4.1.1: 1568 | version "4.1.1" 1569 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1570 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1571 | 1572 | object-inspect@^1.7.0: 1573 | version "1.8.0" 1574 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" 1575 | integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== 1576 | 1577 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 1578 | version "1.1.1" 1579 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1580 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1581 | 1582 | object.assign@4.1.0, object.assign@^4.1.0: 1583 | version "4.1.0" 1584 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1585 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1586 | dependencies: 1587 | define-properties "^1.1.2" 1588 | function-bind "^1.1.1" 1589 | has-symbols "^1.0.0" 1590 | object-keys "^1.0.11" 1591 | 1592 | object.getownpropertydescriptors@^2.0.3: 1593 | version "2.1.0" 1594 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 1595 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 1596 | dependencies: 1597 | define-properties "^1.1.3" 1598 | es-abstract "^1.17.0-next.1" 1599 | 1600 | once@^1.3.0: 1601 | version "1.4.0" 1602 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1603 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1604 | dependencies: 1605 | wrappy "1" 1606 | 1607 | p-limit@^2.0.0: 1608 | version "2.3.0" 1609 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1610 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1611 | dependencies: 1612 | p-try "^2.0.0" 1613 | 1614 | p-locate@^3.0.0: 1615 | version "3.0.0" 1616 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1617 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1618 | dependencies: 1619 | p-limit "^2.0.0" 1620 | 1621 | p-try@^2.0.0: 1622 | version "2.2.0" 1623 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1624 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1625 | 1626 | path-exists@^3.0.0: 1627 | version "3.0.0" 1628 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1629 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1630 | 1631 | path-is-absolute@^1.0.0: 1632 | version "1.0.1" 1633 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1634 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1635 | 1636 | path-parse@^1.0.6: 1637 | version "1.0.6" 1638 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1639 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1640 | 1641 | pathval@^1.1.0: 1642 | version "1.1.0" 1643 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 1644 | integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= 1645 | 1646 | picomatch@^2.2.2: 1647 | version "2.2.2" 1648 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1649 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1650 | 1651 | prop-types@^15.6.2: 1652 | version "15.7.2" 1653 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 1654 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 1655 | dependencies: 1656 | loose-envify "^1.4.0" 1657 | object-assign "^4.1.1" 1658 | react-is "^16.8.1" 1659 | 1660 | react-dom@^16.13.1: 1661 | version "16.13.1" 1662 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" 1663 | integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== 1664 | dependencies: 1665 | loose-envify "^1.1.0" 1666 | object-assign "^4.1.1" 1667 | prop-types "^15.6.2" 1668 | scheduler "^0.19.1" 1669 | 1670 | react-is@^16.8.1: 1671 | version "16.13.1" 1672 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1673 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1674 | 1675 | react@^16.13.1: 1676 | version "16.13.1" 1677 | resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" 1678 | integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== 1679 | dependencies: 1680 | loose-envify "^1.1.0" 1681 | object-assign "^4.1.1" 1682 | prop-types "^15.6.2" 1683 | 1684 | reflect-metadata@^0.1.13: 1685 | version "0.1.13" 1686 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" 1687 | integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== 1688 | 1689 | regenerate-unicode-properties@^8.2.0: 1690 | version "8.2.0" 1691 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" 1692 | integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== 1693 | dependencies: 1694 | regenerate "^1.4.0" 1695 | 1696 | regenerate@^1.4.0: 1697 | version "1.4.1" 1698 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" 1699 | integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== 1700 | 1701 | regenerator-runtime@^0.13.4: 1702 | version "0.13.7" 1703 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" 1704 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== 1705 | 1706 | regenerator-transform@^0.14.2: 1707 | version "0.14.5" 1708 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" 1709 | integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== 1710 | dependencies: 1711 | "@babel/runtime" "^7.8.4" 1712 | 1713 | regexpu-core@^4.7.0: 1714 | version "4.7.0" 1715 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" 1716 | integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== 1717 | dependencies: 1718 | regenerate "^1.4.0" 1719 | regenerate-unicode-properties "^8.2.0" 1720 | regjsgen "^0.5.1" 1721 | regjsparser "^0.6.4" 1722 | unicode-match-property-ecmascript "^1.0.4" 1723 | unicode-match-property-value-ecmascript "^1.2.0" 1724 | 1725 | regjsgen@^0.5.1: 1726 | version "0.5.2" 1727 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" 1728 | integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== 1729 | 1730 | regjsparser@^0.6.4: 1731 | version "0.6.4" 1732 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" 1733 | integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== 1734 | dependencies: 1735 | jsesc "~0.5.0" 1736 | 1737 | require-directory@^2.1.1: 1738 | version "2.1.1" 1739 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1740 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1741 | 1742 | require-main-filename@^2.0.0: 1743 | version "2.0.0" 1744 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1745 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1746 | 1747 | resolve@^1.11.0, resolve@^1.17.0, resolve@^1.3.2: 1748 | version "1.17.0" 1749 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" 1750 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 1751 | dependencies: 1752 | path-parse "^1.0.6" 1753 | 1754 | rollup@2.23.0: 1755 | version "2.23.0" 1756 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.23.0.tgz#b7ab1fee0c0e60132fd0553c4df1e9cdacfada9d" 1757 | integrity sha512-vLNmZFUGVwrnqNAJ/BvuLk1MtWzu4IuoqsH9UWK5AIdO3rt8/CSiJNvPvCIvfzrbNsqKbNzPAG1V2O4eTe2XZg== 1758 | optionalDependencies: 1759 | fsevents "~2.1.2" 1760 | 1761 | safe-buffer@~5.1.1: 1762 | version "5.1.2" 1763 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1764 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1765 | 1766 | scheduler@^0.19.1: 1767 | version "0.19.1" 1768 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" 1769 | integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== 1770 | dependencies: 1771 | loose-envify "^1.1.0" 1772 | object-assign "^4.1.1" 1773 | 1774 | semver@7.0.0: 1775 | version "7.0.0" 1776 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" 1777 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== 1778 | 1779 | semver@^5.4.1, semver@^5.5.0, semver@^5.7.0: 1780 | version "5.7.1" 1781 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1782 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1783 | 1784 | set-blocking@^2.0.0: 1785 | version "2.0.0" 1786 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1787 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1788 | 1789 | source-map-support@^0.5.6: 1790 | version "0.5.19" 1791 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1792 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1793 | dependencies: 1794 | buffer-from "^1.0.0" 1795 | source-map "^0.6.0" 1796 | 1797 | source-map@^0.5.0: 1798 | version "0.5.7" 1799 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1800 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1801 | 1802 | source-map@^0.6.0: 1803 | version "0.6.1" 1804 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1805 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1806 | 1807 | sourcemap-codec@^1.4.4: 1808 | version "1.4.8" 1809 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 1810 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 1811 | 1812 | sprintf-js@~1.0.2: 1813 | version "1.0.3" 1814 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1815 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 1816 | 1817 | "string-width@^1.0.2 || 2": 1818 | version "2.1.1" 1819 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1820 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1821 | dependencies: 1822 | is-fullwidth-code-point "^2.0.0" 1823 | strip-ansi "^4.0.0" 1824 | 1825 | string-width@^3.0.0, string-width@^3.1.0: 1826 | version "3.1.0" 1827 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1828 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1829 | dependencies: 1830 | emoji-regex "^7.0.1" 1831 | is-fullwidth-code-point "^2.0.0" 1832 | strip-ansi "^5.1.0" 1833 | 1834 | string.prototype.trimend@^1.0.1: 1835 | version "1.0.1" 1836 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" 1837 | integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== 1838 | dependencies: 1839 | define-properties "^1.1.3" 1840 | es-abstract "^1.17.5" 1841 | 1842 | string.prototype.trimstart@^1.0.1: 1843 | version "1.0.1" 1844 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" 1845 | integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== 1846 | dependencies: 1847 | define-properties "^1.1.3" 1848 | es-abstract "^1.17.5" 1849 | 1850 | strip-ansi@^4.0.0: 1851 | version "4.0.0" 1852 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1853 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1854 | dependencies: 1855 | ansi-regex "^3.0.0" 1856 | 1857 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 1858 | version "5.2.0" 1859 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1860 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1861 | dependencies: 1862 | ansi-regex "^4.1.0" 1863 | 1864 | strip-bom@^3.0.0: 1865 | version "3.0.0" 1866 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1867 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1868 | 1869 | strip-json-comments@2.0.1: 1870 | version "2.0.1" 1871 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1872 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1873 | 1874 | supports-color@6.0.0: 1875 | version "6.0.0" 1876 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 1877 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 1878 | dependencies: 1879 | has-flag "^3.0.0" 1880 | 1881 | supports-color@^5.3.0: 1882 | version "5.5.0" 1883 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1884 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1885 | dependencies: 1886 | has-flag "^3.0.0" 1887 | 1888 | to-fast-properties@^2.0.0: 1889 | version "2.0.0" 1890 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1891 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 1892 | 1893 | ts-mocha@^7.0.0: 1894 | version "7.0.0" 1895 | resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-7.0.0.tgz#f1549b48b46f53d7ae1dccbb26313c7879acb190" 1896 | integrity sha512-7WfkQw1W6JZXG5m4E1w2e945uWzBoZqmnOHvpMu0v+zvyKLdUQeTtRMfcQsVEKsUnYL6nTyH4okRt2PZucmFXQ== 1897 | dependencies: 1898 | ts-node "7.0.1" 1899 | optionalDependencies: 1900 | tsconfig-paths "^3.5.0" 1901 | 1902 | ts-node@7.0.1: 1903 | version "7.0.1" 1904 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1905 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1906 | dependencies: 1907 | arrify "^1.0.0" 1908 | buffer-from "^1.1.0" 1909 | diff "^3.1.0" 1910 | make-error "^1.1.1" 1911 | minimist "^1.2.0" 1912 | mkdirp "^0.5.1" 1913 | source-map-support "^0.5.6" 1914 | yn "^2.0.0" 1915 | 1916 | tsconfig-paths@^3.5.0: 1917 | version "3.9.0" 1918 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" 1919 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== 1920 | dependencies: 1921 | "@types/json5" "^0.0.29" 1922 | json5 "^1.0.1" 1923 | minimist "^1.2.0" 1924 | strip-bom "^3.0.0" 1925 | 1926 | type-detect@^4.0.0, type-detect@^4.0.5: 1927 | version "4.0.8" 1928 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1929 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1930 | 1931 | typescript@^3.9.7: 1932 | version "3.9.7" 1933 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" 1934 | integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== 1935 | 1936 | unicode-canonical-property-names-ecmascript@^1.0.4: 1937 | version "1.0.4" 1938 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" 1939 | integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== 1940 | 1941 | unicode-match-property-ecmascript@^1.0.4: 1942 | version "1.0.4" 1943 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" 1944 | integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== 1945 | dependencies: 1946 | unicode-canonical-property-names-ecmascript "^1.0.4" 1947 | unicode-property-aliases-ecmascript "^1.0.4" 1948 | 1949 | unicode-match-property-value-ecmascript@^1.2.0: 1950 | version "1.2.0" 1951 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" 1952 | integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== 1953 | 1954 | unicode-property-aliases-ecmascript@^1.0.4: 1955 | version "1.1.0" 1956 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" 1957 | integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 1958 | 1959 | which-module@^2.0.0: 1960 | version "2.0.0" 1961 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 1962 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 1963 | 1964 | which@1.3.1: 1965 | version "1.3.1" 1966 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1967 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1968 | dependencies: 1969 | isexe "^2.0.0" 1970 | 1971 | wide-align@1.1.3: 1972 | version "1.1.3" 1973 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1974 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 1975 | dependencies: 1976 | string-width "^1.0.2 || 2" 1977 | 1978 | wrap-ansi@^5.1.0: 1979 | version "5.1.0" 1980 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 1981 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 1982 | dependencies: 1983 | ansi-styles "^3.2.0" 1984 | string-width "^3.0.0" 1985 | strip-ansi "^5.0.0" 1986 | 1987 | wrappy@1: 1988 | version "1.0.2" 1989 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1990 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1991 | 1992 | y18n@^4.0.0: 1993 | version "4.0.0" 1994 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 1995 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 1996 | 1997 | yargs-parser@13.1.1: 1998 | version "13.1.1" 1999 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 2000 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 2001 | dependencies: 2002 | camelcase "^5.0.0" 2003 | decamelize "^1.2.0" 2004 | 2005 | yargs-parser@^13.1.1, yargs-parser@^13.1.2: 2006 | version "13.1.2" 2007 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 2008 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 2009 | dependencies: 2010 | camelcase "^5.0.0" 2011 | decamelize "^1.2.0" 2012 | 2013 | yargs-unparser@1.6.0: 2014 | version "1.6.0" 2015 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 2016 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 2017 | dependencies: 2018 | flat "^4.1.0" 2019 | lodash "^4.17.15" 2020 | yargs "^13.3.0" 2021 | 2022 | yargs@13.3.0: 2023 | version "13.3.0" 2024 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 2025 | integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 2026 | dependencies: 2027 | cliui "^5.0.0" 2028 | find-up "^3.0.0" 2029 | get-caller-file "^2.0.1" 2030 | require-directory "^2.1.1" 2031 | require-main-filename "^2.0.0" 2032 | set-blocking "^2.0.0" 2033 | string-width "^3.0.0" 2034 | which-module "^2.0.0" 2035 | y18n "^4.0.0" 2036 | yargs-parser "^13.1.1" 2037 | 2038 | yargs@^13.3.0: 2039 | version "13.3.2" 2040 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 2041 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 2042 | dependencies: 2043 | cliui "^5.0.0" 2044 | find-up "^3.0.0" 2045 | get-caller-file "^2.0.1" 2046 | require-directory "^2.1.1" 2047 | require-main-filename "^2.0.0" 2048 | set-blocking "^2.0.0" 2049 | string-width "^3.0.0" 2050 | which-module "^2.0.0" 2051 | y18n "^4.0.0" 2052 | yargs-parser "^13.1.2" 2053 | 2054 | yn@^2.0.0: 2055 | version "2.0.0" 2056 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 2057 | integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= 2058 | --------------------------------------------------------------------------------