From 249afef791d4bc6c4446860e4e62be2703410374 Mon Sep 17 00:00:00 2001 From: Isaac Mann Date: Wed, 23 Oct 2019 16:07:34 -0400 Subject: [PATCH] feat(nx): storybook schematics chore(nx): move some schematics into @nrwl/angular chore(nx): add e2e test feat(nx): add storybook schematics and builder test: Add tests test: remove test chore: Move some schematics into @nrwl/angular test: fix tests chore: Add e2e test chore: Bump storybook versions chore: createTestUiLib takes a libName argument chore: configs extend root config fix: Remove custom scss loader feat: add storybook builder fix: generate documentation and fix linting chore: Builder tests passing fix(nx): configuration schematic can run multiple times feat(nx): component story format docs(nx): update storybook docs fix(nx): pin core-js dev dependency to ^2.6.9 chore(nx): fix formatting chore(nx): match core-js version for web/storybook chore(nx): remove storybook's angular dependencies chore(nx): modifyObstructiveCode to false in cypress.json See: https://github.com/cypress-io/cypress/issues/4042#issuecomment-487562075 chore(nx): storybook tests --no-interactive chore(nx): add storybook to e2e tests chore(nx): reorder e2e tests --- .../angular/api-angular/schematics/stories.md | 37 + .../api-storybook/builders/storybook.md | 73 + .../api-storybook/schematics/configuration.md | 49 + .../schematics/cypress-project.md | 31 + docs/angular/builders.json | 1 + docs/angular/schematics.json | 1 + .../schematics/component-cypress-spec.md | 42 + .../api-angular/schematics/component-story.md | 48 + docs/api-angular/schematics/stories.md | 24 + docs/api-storybook/builders/storybook.md | 69 + .../api-storybook/schematics/configuration.md | 36 + .../schematics/cypress-project.md | 18 + docs/api-storybook/schematics/ng-add.md | 10 + docs/api/home.md | 50 + docs/builders.json | 11 + docs/react/api-angular/schematics/stories.md | 37 + .../react/api-storybook/builders/storybook.md | 74 + .../api-storybook/schematics/configuration.md | 49 + .../schematics/cypress-project.md | 31 + docs/react/builders.json | 1 + docs/react/schematics.json | 1 + docs/web/api-angular/schematics/stories.md | 37 + docs/web/api-storybook/builders/storybook.md | 74 + .../api-storybook/schematics/configuration.md | 49 + .../schematics/cypress-project.md | 31 + docs/web/builders.json | 1 + docs/web/schematics.json | 1 + e2e/new.test.ts | 1 - e2e/storybook.test.ts | 46 + e2e/utils.ts | 48 +- package.json | 2 + packages/angular/collection.json | 21 + .../component-cypress-spec.ts | 130 + .../__componentFileName__.spec.ts__tmpl__ | 13 + .../component-cypress-spec/schema.json | 39 + .../component-story/component-story.ts | 152 ++ .../__componentFileName__.stories.ts__tmpl__ | 17 + .../schematics/component-story/schema.json | 45 + .../src/schematics/stories/schema.json | 20 + .../src/schematics/stories/stories.spec.ts | 116 + .../angular/src/schematics/stories/stories.ts | 142 + packages/angular/src/utils/ast-utils.ts | 52 +- packages/angular/src/utils/testing.ts | 76 +- .../cypress-project/cypress-project.spec.ts | 2 + .../cypress-project/files/cypress.json | 1 + packages/storybook/builders.json | 10 + packages/storybook/collection.json | 24 + packages/storybook/index.ts | 0 packages/storybook/migrations.json | 3 + packages/storybook/package.json | 46 + .../src/builders/storybook/schema.json | 88 + .../builders/storybook/storybook.impl.spec.ts | 0 .../src/builders/storybook/storybook.impl.ts | 147 ++ .../configuration/configuration.spec.ts | 128 + .../schematics/configuration/configuration.ts | 125 + .../lib-files/.storybook/addons.js__tmpl__ | 1 + .../lib-files/.storybook/config.js__tmpl__ | 3 + .../lib-files/.storybook/tsconfig.json | 5 + .../.storybook/webpack.config.js__tmpl__ | 6 + .../root-files/.storybook/addons.js | 1 + .../root-files/.storybook/tsconfig.json | 5 + .../root-files/.storybook/webpack.config.js | 36 + .../src/schematics/configuration/schema.d.ts | 6 + .../src/schematics/configuration/schema.json | 28 + .../cypress-project/cypress-project.spec.ts | 48 + .../cypress-project/cypress-project.ts | 91 + .../schematics/cypress-project/schema.json | 16 + .../src/schematics/ng-add/ng-add.spec.ts | 27 + .../storybook/src/schematics/ng-add/ng-add.ts | 78 + .../src/schematics/ng-add/schema.d.ts | 1 + .../src/schematics/ng-add/schema.json | 7 + packages/storybook/src/utils/root.ts | 19 + packages/storybook/src/utils/testing.ts | 94 + packages/storybook/src/utils/utils.ts | 239 ++ packages/storybook/src/utils/versions.ts | 5 + packages/workspace/migrations.json | 2 +- scripts/e2e-ci2.sh | 1 + yarn.lock | 2311 +++++++++++++++-- 78 files changed, 5206 insertions(+), 204 deletions(-) create mode 100644 docs/angular/api-angular/schematics/stories.md create mode 100644 docs/angular/api-storybook/builders/storybook.md create mode 100644 docs/angular/api-storybook/schematics/configuration.md create mode 100644 docs/angular/api-storybook/schematics/cypress-project.md create mode 100644 docs/api-angular/schematics/component-cypress-spec.md create mode 100644 docs/api-angular/schematics/component-story.md create mode 100644 docs/api-angular/schematics/stories.md create mode 100644 docs/api-storybook/builders/storybook.md create mode 100644 docs/api-storybook/schematics/configuration.md create mode 100644 docs/api-storybook/schematics/cypress-project.md create mode 100644 docs/api-storybook/schematics/ng-add.md create mode 100644 docs/api/home.md create mode 100644 docs/builders.json create mode 100644 docs/react/api-angular/schematics/stories.md create mode 100644 docs/react/api-storybook/builders/storybook.md create mode 100644 docs/react/api-storybook/schematics/configuration.md create mode 100644 docs/react/api-storybook/schematics/cypress-project.md create mode 100644 docs/web/api-angular/schematics/stories.md create mode 100644 docs/web/api-storybook/builders/storybook.md create mode 100644 docs/web/api-storybook/schematics/configuration.md create mode 100644 docs/web/api-storybook/schematics/cypress-project.md create mode 100644 e2e/storybook.test.ts create mode 100644 packages/angular/src/schematics/component-cypress-spec/component-cypress-spec.ts create mode 100644 packages/angular/src/schematics/component-cypress-spec/files/__componentFileName__.spec.ts__tmpl__ create mode 100644 packages/angular/src/schematics/component-cypress-spec/schema.json create mode 100644 packages/angular/src/schematics/component-story/component-story.ts create mode 100644 packages/angular/src/schematics/component-story/files/__componentFileName__.stories.ts__tmpl__ create mode 100644 packages/angular/src/schematics/component-story/schema.json create mode 100644 packages/angular/src/schematics/stories/schema.json create mode 100644 packages/angular/src/schematics/stories/stories.spec.ts create mode 100644 packages/angular/src/schematics/stories/stories.ts create mode 100644 packages/storybook/builders.json create mode 100644 packages/storybook/collection.json create mode 100644 packages/storybook/index.ts create mode 100644 packages/storybook/migrations.json create mode 100644 packages/storybook/package.json create mode 100644 packages/storybook/src/builders/storybook/schema.json create mode 100644 packages/storybook/src/builders/storybook/storybook.impl.spec.ts create mode 100644 packages/storybook/src/builders/storybook/storybook.impl.ts create mode 100644 packages/storybook/src/schematics/configuration/configuration.spec.ts create mode 100644 packages/storybook/src/schematics/configuration/configuration.ts create mode 100644 packages/storybook/src/schematics/configuration/lib-files/.storybook/addons.js__tmpl__ create mode 100644 packages/storybook/src/schematics/configuration/lib-files/.storybook/config.js__tmpl__ create mode 100644 packages/storybook/src/schematics/configuration/lib-files/.storybook/tsconfig.json create mode 100644 packages/storybook/src/schematics/configuration/lib-files/.storybook/webpack.config.js__tmpl__ create mode 100644 packages/storybook/src/schematics/configuration/root-files/.storybook/addons.js create mode 100644 packages/storybook/src/schematics/configuration/root-files/.storybook/tsconfig.json create mode 100644 packages/storybook/src/schematics/configuration/root-files/.storybook/webpack.config.js create mode 100644 packages/storybook/src/schematics/configuration/schema.d.ts create mode 100644 packages/storybook/src/schematics/configuration/schema.json create mode 100644 packages/storybook/src/schematics/cypress-project/cypress-project.spec.ts create mode 100644 packages/storybook/src/schematics/cypress-project/cypress-project.ts create mode 100644 packages/storybook/src/schematics/cypress-project/schema.json create mode 100644 packages/storybook/src/schematics/ng-add/ng-add.spec.ts create mode 100644 packages/storybook/src/schematics/ng-add/ng-add.ts create mode 100644 packages/storybook/src/schematics/ng-add/schema.d.ts create mode 100644 packages/storybook/src/schematics/ng-add/schema.json create mode 100644 packages/storybook/src/utils/root.ts create mode 100644 packages/storybook/src/utils/testing.ts create mode 100644 packages/storybook/src/utils/utils.ts create mode 100644 packages/storybook/src/utils/versions.ts diff --git a/docs/angular/api-angular/schematics/stories.md b/docs/angular/api-angular/schematics/stories.md new file mode 100644 index 0000000000000..2a918a8c2917f --- /dev/null +++ b/docs/angular/api-angular/schematics/stories.md @@ -0,0 +1,37 @@ +# stories + +Create stories/specs for all components declared in a library + +## Usage + +```bash +ng generate stories ... +``` + +By default, Nx will search for `stories` in the default collection provisioned in `angular.json`. + +You can specify the collection explicitly as follows: + +```bash +ng g @nrwl/angular:stories ... +``` + +Show what will be generated without writing to disk: + +```bash +ng g stories ... --dry-run +``` + +## Options + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/angular/api-storybook/builders/storybook.md b/docs/angular/api-storybook/builders/storybook.md new file mode 100644 index 0000000000000..8218258baa392 --- /dev/null +++ b/docs/angular/api-storybook/builders/storybook.md @@ -0,0 +1,73 @@ +# storybook + +Serve Storybook + +Builder properties can be configured in angular.json when defining the builder, or when invoking it. + +## Properties + +### host + +Default: `localhost` + +Type: `string` + +Host to listen on. + +### port + +Default: `9009` + +Type: `number` + +Port to listen on. + +### quiet + +Default: `true` + +Type: `boolean` + +Suppress verbose build output. + +### ssl + +Default: `false` + +Type: `boolean` + +Serve using HTTPS. + +### sslCert + +Type: `string` + +SSL certificate to use for serving HTTPS. + +### sslKey + +Type: `string` + +SSL key to use for serving HTTPS. + +### staticDir + +Type: `array` + +Directory where to load static files from, array of strings + +### uiFramework (**hidden**) + +Default: `@storybook/angular` + +Type: `string` + +Storybook framework npm package + +### watch + +Default: `true` + +Type: `boolean` + +Watches for changes and rebuilds application diff --git a/docs/angular/api-storybook/schematics/configuration.md b/docs/angular/api-storybook/schematics/configuration.md new file mode 100644 index 0000000000000..01e0ba63059cb --- /dev/null +++ b/docs/angular/api-storybook/schematics/configuration.md @@ -0,0 +1,49 @@ +# configuration + +Add storybook configuration to a ui library + +## Usage + +```bash +ng generate configuration ... +``` + +By default, Nx will search for `configuration` in the default collection provisioned in `angular.json`. + +You can specify the collection explicitly as follows: + +```bash +ng g @nrwl/storybook:configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +ng g configuration ... --dry-run +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### generateStories + +Type: `boolean` + +Automatically generate \*.stories.ts files for components declared in this library + +### name + +Type: `string` + +Library name diff --git a/docs/angular/api-storybook/schematics/cypress-project.md b/docs/angular/api-storybook/schematics/cypress-project.md new file mode 100644 index 0000000000000..cdbafd222bc0f --- /dev/null +++ b/docs/angular/api-storybook/schematics/cypress-project.md @@ -0,0 +1,31 @@ +# cypress-project + +Add cypress e2e app to test a ui library that is set up for storybook + +## Usage + +```bash +ng generate cypress-project ... +``` + +By default, Nx will search for `cypress-project` in the default collection provisioned in `angular.json`. + +You can specify the collection explicitly as follows: + +```bash +ng g @nrwl/storybook:cypress-project ... +``` + +Show what will be generated without writing to disk: + +```bash +ng g cypress-project ... --dry-run +``` + +## Options + +### name + +Type: `string` + +Library name diff --git a/docs/angular/builders.json b/docs/angular/builders.json index 28942edb39720..745a12ae2eaea 100644 --- a/docs/angular/builders.json +++ b/docs/angular/builders.json @@ -6,6 +6,7 @@ "nest", "next", "node", + "storybook", "web", "workspace" ] diff --git a/docs/angular/schematics.json b/docs/angular/schematics.json index cad5be371d4ed..2516d8f103ec8 100644 --- a/docs/angular/schematics.json +++ b/docs/angular/schematics.json @@ -7,6 +7,7 @@ "next", "node", "react", + "storybook", "web", "workspace" ] diff --git a/docs/api-angular/schematics/component-cypress-spec.md b/docs/api-angular/schematics/component-cypress-spec.md new file mode 100644 index 0000000000000..129fb5d13fe9d --- /dev/null +++ b/docs/api-angular/schematics/component-cypress-spec.md @@ -0,0 +1,42 @@ +# component-cypress-spec [hidden] + +Create a cypress spec for a ui component that has a story + +## Usage + +```bash +ng generate component-cypress-spec ... + +``` + +## Options + +### componentFileName + +Type: `string` + +Component file name without the .ts extension + +### componentName + +Type: `string` + +Class name of the component + +### componentPath + +Type: `string` + +Relative path to the component file from the library root + +### libPath + +Type: `string` + +Path to the library + +### projectName + +Type: `string` + +Name of the library from angular.json diff --git a/docs/api-angular/schematics/component-story.md b/docs/api-angular/schematics/component-story.md new file mode 100644 index 0000000000000..f6847dd1ec087 --- /dev/null +++ b/docs/api-angular/schematics/component-story.md @@ -0,0 +1,48 @@ +# component-story [hidden] + +Create a stories.ts file for a component + +## Usage + +```bash +ng generate component-story ... + +``` + +## Options + +### componentFileName + +Type: `string` + +Component file name without the .ts extension + +### componentName + +Type: `string` + +Class name of the component + +### componentPath + +Type: `string` + +Relative path to the component file from the library root + +### libPath + +Type: `string` + +Path to the library + +### moduleFileName + +Type: `string` + +File name of the module that declares this component + +### ngModuleClassName + +Type: `string` + +Class name of the module that declares this component diff --git a/docs/api-angular/schematics/stories.md b/docs/api-angular/schematics/stories.md new file mode 100644 index 0000000000000..3e90942feb599 --- /dev/null +++ b/docs/api-angular/schematics/stories.md @@ -0,0 +1,24 @@ +# stories + +Create stories/specs for all components declared in a library + +## Usage + +```bash +ng generate stories ... + +``` + +## Options + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/api-storybook/builders/storybook.md b/docs/api-storybook/builders/storybook.md new file mode 100644 index 0000000000000..1120d4e51fef8 --- /dev/null +++ b/docs/api-storybook/builders/storybook.md @@ -0,0 +1,69 @@ +# storybook + +Serve Storybook + +## Properties + +### host + +Default: `localhost` + +Type: `string` + +Host to listen on. + +### port + +Default: `9009` + +Type: `number` + +Port to listen on. + +### quiet + +Default: `true` + +Type: `boolean` + +Suppress verbose build output. + +### ssl + +Default: `false` + +Type: `boolean` + +Serve using HTTPS. + +### sslCert + +Type: `string` + +SSL certificate to use for serving HTTPS. + +### sslKey + +Type: `string` + +SSL key to use for serving HTTPS. + +### staticDir + +Type: `array` + +Directory where to load static files from, array of strings + +### uiFramework + +Type: `string` + +Storybook framework npm package + +### watch + +Default: `true` + +Type: `boolean` + +Watches for changes and rebuilds application diff --git a/docs/api-storybook/schematics/configuration.md b/docs/api-storybook/schematics/configuration.md new file mode 100644 index 0000000000000..88c7e8b73db66 --- /dev/null +++ b/docs/api-storybook/schematics/configuration.md @@ -0,0 +1,36 @@ +# configuration + +Add storybook configuration to a ui library + +## Usage + +```bash +ng generate configuration ... + +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### generateStories + +Type: `boolean` + +Automatically generate \*.stories.ts files for components declared in this library + +### name + +Type: `string` + +Library name diff --git a/docs/api-storybook/schematics/cypress-project.md b/docs/api-storybook/schematics/cypress-project.md new file mode 100644 index 0000000000000..9d77ae3720a6a --- /dev/null +++ b/docs/api-storybook/schematics/cypress-project.md @@ -0,0 +1,18 @@ +# cypress-project + +Add cypress e2e app to test a ui library that is set up for storybook + +## Usage + +```bash +ng generate cypress-project ... + +``` + +## Options + +### name + +Type: `string` + +Library name diff --git a/docs/api-storybook/schematics/ng-add.md b/docs/api-storybook/schematics/ng-add.md new file mode 100644 index 0000000000000..e20639690b9b6 --- /dev/null +++ b/docs/api-storybook/schematics/ng-add.md @@ -0,0 +1,10 @@ +# ng-add [hidden] + +Add storybook configuration to the workspace + +## Usage + +```bash +ng generate ng-add ... + +``` diff --git a/docs/api/home.md b/docs/api/home.md new file mode 100644 index 0000000000000..35cb4ad4c50a0 --- /dev/null +++ b/docs/api/home.md @@ -0,0 +1,50 @@ +# API + +Here is the list of all the available packages inside the Nx ecosystem. You +can see, for each package its dependencies. + +| PackageName | Dependencies | PeerDependencies | +| --------------- | --------------------------------------- | ---------------- | +| @nrwl/angular | @nrwl/cypress, @nrwl/jest | @nrwl/workspace | +| @nrwl/cypress | | @nrwl/workspace | +| @nrwl/express | @nrwl/node, @nrwl/jest | @nrwl/workspace | +| @nrwl/jest | | @nrwl/workspace | +| @nrwl/linter | | @nrwl/workspace | +| @nrwl/nest | @nrwl/node, @nrwl/jest | @nrwl/workspace | +| @nrwl/node | @nrwl/jest, @nrwl/linter | @nrwl/workspace | +| @nrwl/react | @nrwl/cypress, @nrwl/jest, @nrwl/web | @nrwl/workspace | +| @nrwl/storybook | @nrwl/cypress | @nrwl/workspace | +| @nrwl/web | @nrwl/cypress, @nrwl/jest, @nrwl/linter | @nrwl/workspace | +| @nrwl/workspace | @nrwl/cli | | + +## Angular + +![Angular](/assets/content/api/angular.jpg) + +## React + +![React](/assets/content/api/react.jpg) + +## Nest + +![Nest](/assets/content/api/nest.jpg) + +## Express + +![Express](/assets/content/api/express.jpg) + +## Node + +![Node](/assets/content/api/node.jpg) + +## Cypress + +![Cypress](/assets/content/api/cypress.jpg) + +## Jest + +![Jest](/assets/content/api/jest.jpg) + +## Web + +![Web](/assets/content/api/web.jpg) diff --git a/docs/builders.json b/docs/builders.json new file mode 100644 index 0000000000000..d147d35dea142 --- /dev/null +++ b/docs/builders.json @@ -0,0 +1,11 @@ +[ + "cypress", + "express", + "jest", + "linter", + "nest", + "node", + "storybook", + "web", + "workspace" +] diff --git a/docs/react/api-angular/schematics/stories.md b/docs/react/api-angular/schematics/stories.md new file mode 100644 index 0000000000000..b2f44ffb0abe1 --- /dev/null +++ b/docs/react/api-angular/schematics/stories.md @@ -0,0 +1,37 @@ +# stories + +Create stories/specs for all components declared in a library + +## Usage + +```bash +nx generate stories ... +``` + +By default, Nx will search for `stories` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/angular:stories ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g stories ... --dry-run +``` + +## Options + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/react/api-storybook/builders/storybook.md b/docs/react/api-storybook/builders/storybook.md new file mode 100644 index 0000000000000..cfc64b9ae8e0c --- /dev/null +++ b/docs/react/api-storybook/builders/storybook.md @@ -0,0 +1,74 @@ +# storybook + +Serve Storybook + +Builder properties can be configured in workspace.json when defining the builder, or when invoking it. +Read more about how to use builders and the CLI here: https://nx.dev/react/guides/cli. + +## Properties + +### host + +Default: `localhost` + +Type: `string` + +Host to listen on. + +### port + +Default: `9009` + +Type: `number` + +Port to listen on. + +### quiet + +Default: `true` + +Type: `boolean` + +Suppress verbose build output. + +### ssl + +Default: `false` + +Type: `boolean` + +Serve using HTTPS. + +### sslCert + +Type: `string` + +SSL certificate to use for serving HTTPS. + +### sslKey + +Type: `string` + +SSL key to use for serving HTTPS. + +### staticDir + +Type: `array` + +Directory where to load static files from, array of strings + +### uiFramework (**hidden**) + +Default: `@storybook/angular` + +Type: `string` + +Storybook framework npm package + +### watch + +Default: `true` + +Type: `boolean` + +Watches for changes and rebuilds application diff --git a/docs/react/api-storybook/schematics/configuration.md b/docs/react/api-storybook/schematics/configuration.md new file mode 100644 index 0000000000000..d69c596a9e61a --- /dev/null +++ b/docs/react/api-storybook/schematics/configuration.md @@ -0,0 +1,49 @@ +# configuration + +Add storybook configuration to a ui library + +## Usage + +```bash +nx generate configuration ... +``` + +By default, Nx will search for `configuration` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/storybook:configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g configuration ... --dry-run +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### generateStories + +Type: `boolean` + +Automatically generate \*.stories.ts files for components declared in this library + +### name + +Type: `string` + +Library name diff --git a/docs/react/api-storybook/schematics/cypress-project.md b/docs/react/api-storybook/schematics/cypress-project.md new file mode 100644 index 0000000000000..bdeae049820ae --- /dev/null +++ b/docs/react/api-storybook/schematics/cypress-project.md @@ -0,0 +1,31 @@ +# cypress-project + +Add cypress e2e app to test a ui library that is set up for storybook + +## Usage + +```bash +nx generate cypress-project ... +``` + +By default, Nx will search for `cypress-project` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/storybook:cypress-project ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g cypress-project ... --dry-run +``` + +## Options + +### name + +Type: `string` + +Library name diff --git a/docs/react/builders.json b/docs/react/builders.json index 28942edb39720..745a12ae2eaea 100644 --- a/docs/react/builders.json +++ b/docs/react/builders.json @@ -6,6 +6,7 @@ "nest", "next", "node", + "storybook", "web", "workspace" ] diff --git a/docs/react/schematics.json b/docs/react/schematics.json index cad5be371d4ed..2516d8f103ec8 100644 --- a/docs/react/schematics.json +++ b/docs/react/schematics.json @@ -7,6 +7,7 @@ "next", "node", "react", + "storybook", "web", "workspace" ] diff --git a/docs/web/api-angular/schematics/stories.md b/docs/web/api-angular/schematics/stories.md new file mode 100644 index 0000000000000..b2f44ffb0abe1 --- /dev/null +++ b/docs/web/api-angular/schematics/stories.md @@ -0,0 +1,37 @@ +# stories + +Create stories/specs for all components declared in a library + +## Usage + +```bash +nx generate stories ... +``` + +By default, Nx will search for `stories` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/angular:stories ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g stories ... --dry-run +``` + +## Options + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/web/api-storybook/builders/storybook.md b/docs/web/api-storybook/builders/storybook.md new file mode 100644 index 0000000000000..f033745292939 --- /dev/null +++ b/docs/web/api-storybook/builders/storybook.md @@ -0,0 +1,74 @@ +# storybook + +Serve Storybook + +Builder properties can be configured in workspace.json when defining the builder, or when invoking it. +Read more about how to use builders and the CLI here: https://nx.dev/web/guides/cli. + +## Properties + +### host + +Default: `localhost` + +Type: `string` + +Host to listen on. + +### port + +Default: `9009` + +Type: `number` + +Port to listen on. + +### quiet + +Default: `true` + +Type: `boolean` + +Suppress verbose build output. + +### ssl + +Default: `false` + +Type: `boolean` + +Serve using HTTPS. + +### sslCert + +Type: `string` + +SSL certificate to use for serving HTTPS. + +### sslKey + +Type: `string` + +SSL key to use for serving HTTPS. + +### staticDir + +Type: `array` + +Directory where to load static files from, array of strings + +### uiFramework (**hidden**) + +Default: `@storybook/angular` + +Type: `string` + +Storybook framework npm package + +### watch + +Default: `true` + +Type: `boolean` + +Watches for changes and rebuilds application diff --git a/docs/web/api-storybook/schematics/configuration.md b/docs/web/api-storybook/schematics/configuration.md new file mode 100644 index 0000000000000..d69c596a9e61a --- /dev/null +++ b/docs/web/api-storybook/schematics/configuration.md @@ -0,0 +1,49 @@ +# configuration + +Add storybook configuration to a ui library + +## Usage + +```bash +nx generate configuration ... +``` + +By default, Nx will search for `configuration` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/storybook:configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g configuration ... --dry-run +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### generateCypressSpecs + +Type: `boolean` + +Automatically generate \*.spec.ts files in the cypress e2e app generated by the cypress-configure schematic + +### generateStories + +Type: `boolean` + +Automatically generate \*.stories.ts files for components declared in this library + +### name + +Type: `string` + +Library name diff --git a/docs/web/api-storybook/schematics/cypress-project.md b/docs/web/api-storybook/schematics/cypress-project.md new file mode 100644 index 0000000000000..bdeae049820ae --- /dev/null +++ b/docs/web/api-storybook/schematics/cypress-project.md @@ -0,0 +1,31 @@ +# cypress-project + +Add cypress e2e app to test a ui library that is set up for storybook + +## Usage + +```bash +nx generate cypress-project ... +``` + +By default, Nx will search for `cypress-project` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/storybook:cypress-project ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g cypress-project ... --dry-run +``` + +## Options + +### name + +Type: `string` + +Library name diff --git a/docs/web/builders.json b/docs/web/builders.json index 28942edb39720..745a12ae2eaea 100644 --- a/docs/web/builders.json +++ b/docs/web/builders.json @@ -6,6 +6,7 @@ "nest", "next", "node", + "storybook", "web", "workspace" ] diff --git a/docs/web/schematics.json b/docs/web/schematics.json index cad5be371d4ed..2516d8f103ec8 100644 --- a/docs/web/schematics.json +++ b/docs/web/schematics.json @@ -7,6 +7,7 @@ "next", "node", "react", + "storybook", "web", "workspace" ] diff --git a/e2e/new.test.ts b/e2e/new.test.ts index bcb4a07979ebd..14fd62f3cea66 100644 --- a/e2e/new.test.ts +++ b/e2e/new.test.ts @@ -78,7 +78,6 @@ forEachCli(() => { expectTestsPass(await runCLIAsync(`test my-dir-${mylib} --no-watch`)); if (supportUi()) { - console.log(runCLI(`e2e my-dir-${myapp}-e2e --headless --no-watch`)); expect( runCLI(`e2e my-dir-${myapp}-e2e --headless --no-watch`) ).toContain('All specs passed!'); diff --git a/e2e/storybook.test.ts b/e2e/storybook.test.ts new file mode 100644 index 0000000000000..ffa921410852d --- /dev/null +++ b/e2e/storybook.test.ts @@ -0,0 +1,46 @@ +import { + createTestUILib, + forEachCli, + runCLI, + supportUi, + newProject, + runYarnInstall, + uniq, + ensureProject +} from './utils'; + +forEachCli(() => { + describe('Storybook schematics', () => { + if (supportUi()) { + describe('running Storybook and Cypress', () => { + it('should execute e2e tests using Cypress running against Storybook', () => { + ensureProject(); + + const myapp = uniq('myapp'); + runCLI(`generate @nrwl/angular:app ${myapp} --no-interactive`); + + const mylib = uniq('test-ui-lib'); + createTestUILib(mylib); + + const mylib2 = uniq('test-ui-lib2'); + createTestUILib(mylib2); + + runCLI( + `generate @nrwl/storybook:configuration ${mylib} --configureCypress --generateStories --generateCypressSpecs --no-interactive` + ); + runCLI( + `generate @nrwl/storybook:configuration ${mylib} --no-interactive` + ); + runCLI( + `generate @nrwl/storybook:configuration ${mylib2} --configureCypress --generateStories --generateCypressSpecs --no-interactive` + ); + runYarnInstall(); + + expect( + runCLI(`run ${mylib}-e2e:e2e --configuration=headless --no-watch`) + ).toContain('All specs passed!'); + }, 1000000); + }); + } + }); +}); diff --git a/e2e/utils.ts b/e2e/utils.ts index 97d797c40c4a2..d8c62e295c011 100644 --- a/e2e/utils.ts +++ b/e2e/utils.ts @@ -64,16 +64,18 @@ function patchPackageJsonDeps(addWorkspace = true) { const workspacePath = path.join(getCwd(), 'build', 'packages', 'workspace'); const angularPath = path.join(getCwd(), 'build', 'packages', 'angular'); const reactPath = path.join(getCwd(), 'build', 'packages', 'react'); + const storybookPath = path.join(getCwd(), 'build', 'packages', 'storybook'); if (addWorkspace) { p.devDependencies['@nrwl/workspace'] = `file:${workspacePath}`; } p.devDependencies['@nrwl/angular'] = `file:${angularPath}`; p.devDependencies['@nrwl/react'] = `file:${reactPath}`; + p.devDependencies['@nrwl/storybook'] = `file:${storybookPath}`; writeFileSync(tmpProjPath('package.json'), JSON.stringify(p, null, 2)); } -function runYarnInstall(silent: boolean = true) { +export function runYarnInstall(silent: boolean = true) { const install = execSync('yarn install', { cwd: tmpProjPath(), ...(silent ? { stdio: ['ignore', 'ignore', 'ignore'] } : {}) @@ -141,6 +143,50 @@ exports.default = default_1;` execSync(`cp -a ${tmpBackupProjPath()} ${tmpProjPath()}`); } +export function createTestUILib(libName: string): void { + runCLI(`g @nrwl/angular:library ${libName} --no-interactive`); + runCLI( + `g @schematics/angular:component test-button --project=${libName} --no-interactive` + ); + + writeFileSync( + tmpProjPath(`libs/${libName}/src/lib/test-button/test-button.component.ts`), + ` +import { Component, OnInit, Input } from '@angular/core'; + +export type ButtonStyle = 'default' | 'primary' | 'accent'; + +@Component({ + selector: 'proj-test-button', + templateUrl: './test-button.component.html', + styleUrls: ['./test-button.component.css'] +}) +export class TestButtonComponent implements OnInit { + @Input('buttonType') type = 'button'; + @Input() style: ButtonStyle = 'default'; + @Input() age: number; + @Input() isOn = false; + + constructor() { } + + ngOnInit() { + } + +} + ` + ); + + writeFileSync( + tmpProjPath( + `libs/${libName}/src/lib/test-button/test-button.component.html` + ), + `` + ); + runCLI( + `g @schematics/angular:component test-other --project=${libName} --no-interactive` + ); +} + export function ensureProject(): void { if (!directoryExists(tmpProjPath())) { newProject(); diff --git a/package.json b/package.json index 3273de91ae444..dc8773761b35d 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "@ngrx/store-devtools": "8.3.0", "@schematics/angular": "8.3.3", "@testing-library/react": "9.3.0", + "@storybook/core": "^5.2.0", "@types/express": "4.17.0", "@types/fast-levenshtein": "^0.0.1", "@types/jasmine": "~2.8.6", @@ -92,6 +93,7 @@ "confusing-browser-globals": "^1.0.8", "conventional-changelog-cli": "^2.0.23", "copy-webpack-plugin": "5.0.3", + "core-js": "^2.6.9", "cosmiconfig": "^4.0.0", "cypress": "3.4.1", "cz-conventional-changelog": "^3.0.2", diff --git a/packages/angular/collection.json b/packages/angular/collection.json index 2c6642ee862b3..12fb995ddbd90 100644 --- a/packages/angular/collection.json +++ b/packages/angular/collection.json @@ -53,6 +53,27 @@ "factory": "./src/schematics/upgrade-module/upgrade-module", "schema": "./src/schematics/upgrade-module/schema.json", "description": "Add an upgrade module" + }, + + "stories": { + "factory": "./src/schematics/stories/stories", + "schema": "./src/schematics/stories/schema.json", + "description": "Create stories/specs for all components declared in a library", + "hidden": false + }, + + "component-cypress-spec": { + "factory": "./src/schematics/component-cypress-spec/component-cypress-spec", + "schema": "./src/schematics/component-cypress-spec/schema.json", + "description": "Create a cypress spec for a ui component that has a story", + "hidden": true + }, + + "component-story": { + "factory": "./src/schematics/component-story/component-story", + "schema": "./src/schematics/component-story/schema.json", + "description": "Create a stories.ts file for a component", + "hidden": true } } } diff --git a/packages/angular/src/schematics/component-cypress-spec/component-cypress-spec.ts b/packages/angular/src/schematics/component-cypress-spec/component-cypress-spec.ts new file mode 100644 index 0000000000000..1a14c94e7f314 --- /dev/null +++ b/packages/angular/src/schematics/component-cypress-spec/component-cypress-spec.ts @@ -0,0 +1,130 @@ +import { + apply, + chain, + mergeWith, + move, + Rule, + SchematicContext, + SchematicsException, + template, + Tree, + url +} from '@angular-devkit/schematics'; +import { findNodes, getProjectConfig } from '@nrwl/workspace'; +import { + PropertyAssignment, + PropertyDeclaration, + SyntaxKind +} from 'typescript'; +import { getTsSourceFile, getDecoratorMetadata } from '../../utils/ast-utils'; +import { + getInputPropertyDeclarations, + getKnobType +} from '../component-story/component-story'; + +export default function(schema: CreateComponentSpecFileSchema): Rule { + return chain([createComponentSpecFile(schema)]); +} + +export interface CreateComponentSpecFileSchema { + projectName: string; + libPath: string; + componentName: string; + componentPath: string; + componentFileName: string; +} + +export function createComponentSpecFile({ + projectName, + libPath, + componentName, + componentPath, + componentFileName +}: CreateComponentSpecFileSchema): Rule { + return (tree: Tree, context: SchematicContext): Rule => { + const e2eLibIntegrationFolderPath = + getProjectConfig(tree, projectName + '-e2e').sourceRoot + '/integration'; + const fullComponentPath = + libPath + '/' + componentPath + '/' + componentFileName + '.ts'; + const props = getInputPropertyDeclarations(tree, fullComponentPath).map( + node => { + const decoratorContent = findNodes( + findNodes(node, SyntaxKind.Decorator)[0], + SyntaxKind.StringLiteral + ); + const name = decoratorContent.length + ? decoratorContent[0].getText().slice(1, -1) + : node.name.getText(); + + const type = getKnobType(node); + const defaultValue = getKnobDefaultValue(node); + + return { + name, + type, + defaultValue + }; + } + ); + const componentSelector = getComponentSelector(tree, fullComponentPath); + return chain([ + mergeWith( + apply(url('./files'), [ + template({ + projectName, + componentFileName: componentFileName, + componentName: componentName, + componentSelector, + props, + tmpl: '' + }), + move(e2eLibIntegrationFolderPath + '/' + componentPath) + ]) + ) + ]); + }; +} + +export function getComponentSelector(tree: Tree, path: string): string { + const file = getTsSourceFile(tree, path); + + const componentDecorators = getDecoratorMetadata( + file, + 'Component', + '@angular/core' + ); + if (componentDecorators.length === 0) { + throw new SchematicsException(`No @NgModule decorator in ${path}`); + } + const componentDecorator = componentDecorators[0]; + const selectorNode = ( + findNodes(componentDecorator, SyntaxKind.PropertyAssignment).find( + (node: PropertyAssignment) => node.name.getText() === 'selector' + ) + ); + if (!selectorNode) { + throw new SchematicsException( + `No selector defined for the component in ${path}` + ); + } + + return selectorNode.initializer.getText().slice(1, -1); +} + +export function getKnobDefaultValue( + property: PropertyDeclaration +): string | undefined { + if (!property.initializer) { + return undefined; + } + switch (property.initializer.kind) { + case SyntaxKind.StringLiteral: + return property.initializer.getText().slice(1, -1); + case SyntaxKind.NumericLiteral: + case SyntaxKind.TrueKeyword: + case SyntaxKind.FalseKeyword: + return property.initializer.getText(); + default: + return undefined; + } +} diff --git a/packages/angular/src/schematics/component-cypress-spec/files/__componentFileName__.spec.ts__tmpl__ b/packages/angular/src/schematics/component-cypress-spec/files/__componentFileName__.spec.ts__tmpl__ new file mode 100644 index 0000000000000..c89d6b6bafca2 --- /dev/null +++ b/packages/angular/src/schematics/component-cypress-spec/files/__componentFileName__.spec.ts__tmpl__ @@ -0,0 +1,13 @@ +describe('<%=projectName%>', () => { + beforeEach(() => cy.visit('/iframe.html?id=<%= componentName.toLowerCase() %>--primary<% + for(let prop of props) { + %>&knob-<%=prop.name%><% + if(prop.defaultValue !== undefined) { + %>=<%=prop.defaultValue%><% + } %><% + }%>')); + + it('should render the component', () => { + cy.get('<%=componentSelector%>').should('exist'); + }); +}); diff --git a/packages/angular/src/schematics/component-cypress-spec/schema.json b/packages/angular/src/schematics/component-cypress-spec/schema.json new file mode 100644 index 0000000000000..4423b54cf19bd --- /dev/null +++ b/packages/angular/src/schematics/component-cypress-spec/schema.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "component-cypress-spec", + "type": "object", + "properties": { + "projectName": { + "type": "string", + "description": "Name of the library from angular.json", + "examples": ["ui-samples"] + }, + "libPath": { + "type": "string", + "description": "Path to the library", + "examples": ["libs/ui-samples"] + }, + "componentName": { + "type": "string", + "description": "Class name of the component", + "examples": ["AwesomeComponent"] + }, + "componentPath": { + "type": "string", + "description": "Relative path to the component file from the library root", + "examples": ["awesome"] + }, + "componentFileName": { + "type": "string", + "description": "Component file name without the .ts extension", + "examples": ["awesome.component"] + } + }, + "required": [ + "projectName", + "libPath", + "componentName", + "componentPath", + "componentFileName" + ] +} diff --git a/packages/angular/src/schematics/component-story/component-story.ts b/packages/angular/src/schematics/component-story/component-story.ts new file mode 100644 index 0000000000000..65c5f6a1f2b0f --- /dev/null +++ b/packages/angular/src/schematics/component-story/component-story.ts @@ -0,0 +1,152 @@ +import { + apply, + chain, + mergeWith, + move, + Rule, + SchematicContext, + template, + Tree, + url +} from '@angular-devkit/schematics'; +import { findNodes } from '@nrwl/workspace'; +import { PropertyDeclaration, SyntaxKind } from 'typescript'; +import { getTsSourceFile } from '../../utils/ast-utils'; +import { getSourceNodes } from '@nrwl/workspace/src/utils/ast-utils'; + +export interface CreateComponentStoriesFileSchema { + libPath: string; + moduleFileName: string; + ngModuleClassName: string; + componentName: string; + componentPath: string; + componentFileName: string; +} + +export default function(schema: CreateComponentStoriesFileSchema): Rule { + return chain([createComponentStoriesFile(schema)]); +} + +export function createComponentStoriesFile({ + libPath, + moduleFileName, + ngModuleClassName, + componentName, + componentPath, + componentFileName +}: CreateComponentStoriesFileSchema): Rule { + return (tree: Tree, context: SchematicContext): Rule => { + const relativeModulePath = + componentPath + .split('/') + .filter(segment => segment !== '.') + .map(() => '..') + .join('/') + + '/' + + moduleFileName.replace(/\.ts$/, ''); + const props = getInputDescriptors( + tree, + libPath + '/' + componentPath + '/' + componentFileName + '.ts' + ); + return chain([ + mergeWith( + apply(url('./files'), [ + template({ + componentFileName: componentFileName, + componentName: componentName, + relativeModulePath, + moduleName: ngModuleClassName, + props, + tmpl: '' + }), + move(libPath + '/' + componentPath) + ]) + ) + ]); + }; +} + +export type KnobType = 'text' | 'boolean' | 'number' | 'select'; +export interface InputDescriptor { + name: string; + type: KnobType; + defaultValue?: string; +} + +export function getInputPropertyDeclarations( + tree: Tree, + path: string +): PropertyDeclaration[] { + const file = getTsSourceFile(tree, path); + + const decorators = getSourceNodes(file).filter( + node => node.kind === SyntaxKind.Decorator + ); + + return decorators + .filter(decorator => + findNodes(decorator, SyntaxKind.Identifier).some( + node => node.getText() === 'Input' + ) + ) + .map(node => node.parent as PropertyDeclaration); +} + +export function getInputDescriptors( + tree: Tree, + path: string +): InputDescriptor[] { + return getInputPropertyDeclarations(tree, path).map(node => { + const decoratorContent = findNodes( + findNodes(node, SyntaxKind.Decorator)[0], + SyntaxKind.StringLiteral + ); + const name = decoratorContent.length + ? decoratorContent[0].getText().slice(1, -1) + : node.name.getText(); + + const type = getKnobType(node); + const defaultValue = getKnobDefaultValue(node); + + return { + name, + type, + defaultValue + }; + }); +} + +export function getKnobType(property: PropertyDeclaration): KnobType { + if (property.type) { + const typeName = property.type.getText(); + const typeNameToKnobType: Record = { + string: 'text', + number: 'number', + boolean: 'boolean' + }; + return typeNameToKnobType[typeName] || 'text'; + } + if (property.initializer) { + const initializerKindToKnobType: Record = { + [SyntaxKind.StringLiteral]: 'text', + [SyntaxKind.NumericLiteral]: 'number', + [SyntaxKind.TrueKeyword]: 'boolean', + [SyntaxKind.FalseKeyword]: 'boolean' + }; + return initializerKindToKnobType[property.initializer.kind] || 'text'; + } + return 'text'; +} + +export function getKnobDefaultValue(property: PropertyDeclaration): string { + const typeNameToDefault = { + string: "''", + number: '0', + boolean: 'false' + }; + return property.initializer + ? property.initializer.getText() + : property.type + ? typeNameToDefault[property.type.getText()] + : "''"; +} diff --git a/packages/angular/src/schematics/component-story/files/__componentFileName__.stories.ts__tmpl__ b/packages/angular/src/schematics/component-story/files/__componentFileName__.stories.ts__tmpl__ new file mode 100644 index 0000000000000..05c853e467e94 --- /dev/null +++ b/packages/angular/src/schematics/component-story/files/__componentFileName__.stories.ts__tmpl__ @@ -0,0 +1,17 @@ +<% if(props.length > 0) { %>import { text, number, boolean } from '@storybook/addon-knobs';<% } %> +import { <%=moduleName%> } from '<%=relativeModulePath%>'; +import { <%=componentName%> } from './<%=componentFileName%>'; + +export default { + title: '<%=componentName%>' +} + +export const primary = () => ({ + moduleMetadata: { + imports: [<%=moduleName%>] + }, + component: <%=componentName%>, + props: {<% for (let prop of props) { %> + <%=prop.name%>: <%=prop.type%>('<%=prop.name%>', <%=prop.defaultValue%>),<% } %> + } +}) diff --git a/packages/angular/src/schematics/component-story/schema.json b/packages/angular/src/schematics/component-story/schema.json new file mode 100644 index 0000000000000..cabd92fc1f943 --- /dev/null +++ b/packages/angular/src/schematics/component-story/schema.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "component-story", + "type": "object", + "properties": { + "libPath": { + "type": "string", + "description": "Path to the library", + "examples": ["libs/ui-samples"] + }, + "moduleFileName": { + "type": "string", + "description": "File name of the module that declares this component", + "examples": ["ui-samples.module.ts"] + }, + "ngModuleClassName": { + "type": "string", + "description": "Class name of the module that declares this component", + "examples": ["UiSamplesModule"] + }, + "componentName": { + "type": "string", + "description": "Class name of the component", + "examples": ["AwesomeComponent"] + }, + "componentPath": { + "type": "string", + "description": "Relative path to the component file from the library root", + "examples": ["awesome"] + }, + "componentFileName": { + "type": "string", + "description": "Component file name without the .ts extension", + "examples": ["awesome.component"] + } + }, + "required": [ + "libPath", + "moduleFileName", + "ngModuleClassName", + "componentName", + "componentPath", + "componentFileName" + ] +} diff --git a/packages/angular/src/schematics/stories/schema.json b/packages/angular/src/schematics/stories/schema.json new file mode 100644 index 0000000000000..4c18eb180cf14 --- /dev/null +++ b/packages/angular/src/schematics/stories/schema.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "storybook-stories", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Library name", + "$default": { + "$source": "argv", + "index": 0 + } + }, + "generateCypressSpecs": { + "type": "boolean", + "description": "Automatically generate *.spec.ts files in the cypress e2e app generated by the cypress-configure schematic" + } + }, + "required": ["name"] +} diff --git a/packages/angular/src/schematics/stories/stories.spec.ts b/packages/angular/src/schematics/stories/stories.spec.ts new file mode 100644 index 0000000000000..0e14474ae55e1 --- /dev/null +++ b/packages/angular/src/schematics/stories/stories.spec.ts @@ -0,0 +1,116 @@ +import { Tree } from '@angular-devkit/schematics'; +import { CypressConfigureSchema } from '../../../../storybook/src/schematics/cypress-project/cypress-project'; +import { StorybookStoriesSchema } from './stories'; +import { + createTestUILib, + runSchematic, + runExternalSchematic +} from '../../utils/testing'; + +describe('schematic:stories', () => { + let appTree: Tree; + + beforeEach(async () => { + appTree = await createTestUILib('test-ui-lib'); + }); + + describe('Storybook stories', () => { + it('should generate stories.ts files', async () => { + const tree = await runSchematic( + 'stories', + { name: 'test-ui-lib', generateCypressSpecs: false }, + appTree + ); + + expect( + tree.exists( + 'libs/test-ui-lib/src/lib/test-button/test-button.component.stories.ts' + ) + ).toBeTruthy(); + expect( + tree.exists( + 'libs/test-ui-lib/src/lib/test-other/test-other.component.stories.ts' + ) + ).toBeTruthy(); + const propLines = [ + `buttonType: text('buttonType', 'button'),`, + `style: text('style', 'default'),`, + `age: number('age', ''),`, + `isOn: boolean('isOn', false), ` + ]; + const storyContent = tree.readContent( + 'libs/test-ui-lib/src/lib/test-button/test-button.component.stories.ts' + ); + propLines.forEach(propLine => { + storyContent.includes(propLine); + }); + }); + + it('should generate cypress spec files', async () => { + let tree = await runExternalSchematic( + '@nrwl/storybook', + 'cypress-project', + { name: 'test-ui-lib' }, + appTree + ); + tree = await runSchematic( + 'stories', + { name: 'test-ui-lib', generateCypressSpecs: true }, + tree + ); + + expect( + tree.exists( + 'libs/test-ui-lib/src/lib/test-button/test-button.component.stories.ts' + ) + ).toBeTruthy(); + expect( + tree.exists( + 'libs/test-ui-lib/src/lib/test-other/test-other.component.stories.ts' + ) + ).toBeTruthy(); + const propLines = [ + `buttonType: text('buttonType', 'button'),`, + `style: text('style', 'default'),`, + `age: number('age', ''),`, + `isOn: boolean('isOn', false), ` + ]; + const storyContent = tree.readContent( + 'libs/test-ui-lib/src/lib/test-button/test-button.component.stories.ts' + ); + propLines.forEach(propLine => { + storyContent.includes(propLine); + }); + + expect( + tree.exists( + 'apps/test-ui-lib-e2e/src/integration/test-button/test-button.component.spec.ts' + ) + ).toBeTruthy(); + expect( + tree.exists( + 'apps/test-ui-lib-e2e/src/integration/test-other/test-other.component.spec.ts' + ) + ).toBeTruthy(); + }); + + it('should run twice without errors', async () => { + let tree = await runExternalSchematic( + '@nrwl/storybook', + 'cypress-project', + { name: 'test-ui-lib' }, + appTree + ); + tree = await runSchematic( + 'stories', + { name: 'test-ui-lib', generateCypressSpecs: false }, + tree + ); + tree = await runSchematic( + 'stories', + { name: 'test-ui-lib', generateCypressSpecs: true }, + tree + ); + }); + }); +}); diff --git a/packages/angular/src/schematics/stories/stories.ts b/packages/angular/src/schematics/stories/stories.ts new file mode 100644 index 0000000000000..1c33eb31c8380 --- /dev/null +++ b/packages/angular/src/schematics/stories/stories.ts @@ -0,0 +1,142 @@ +import { + chain, + Rule, + schematic, + SchematicContext, + SchematicsException, + Tree +} from '@angular-devkit/schematics'; +import { getProjectConfig } from '@nrwl/workspace'; +import { SyntaxKind } from 'typescript'; +import { + getTsSourceFile, + getDecoratorMetadata, + getFirstNgModuleName +} from '../../utils/ast-utils'; +import { CreateComponentSpecFileSchema } from '../component-cypress-spec/component-cypress-spec'; +import { CreateComponentStoriesFileSchema } from '../component-story/component-story'; + +export interface StorybookStoriesSchema { + name: string; + generateCypressSpecs: boolean; +} + +export default function(schema: StorybookStoriesSchema): Rule { + return chain([createAllStories(schema.name, schema.generateCypressSpecs)]); +} + +export function createAllStories( + projectName: string, + generateCypressSpecs: boolean +): Rule { + return (tree: Tree, context: SchematicContext) => { + context.logger.debug('adding .storybook folder to lib'); + + debugger; + const libPath = getProjectConfig(tree, projectName).sourceRoot + '/lib'; + return chain( + tree + .getDir(libPath) + .subfiles.filter(fileName => fileName.endsWith('.module.ts')) + .map(fileName => { + const filePath = libPath + '/' + fileName; + const file = getTsSourceFile(tree, filePath); + + const ngModuleDecorators = getDecoratorMetadata( + file, + 'NgModule', + '@angular/core' + ); + if (ngModuleDecorators.length === 0) { + throw new SchematicsException( + `No @NgModule decorator in ${filePath}` + ); + } + const ngModuleDecorator = ngModuleDecorators[0]; + const syntaxList = ngModuleDecorator.getChildren().find(node => { + return node.kind === SyntaxKind.SyntaxList; + }); + const declarationsPropertyAssignment = syntaxList + .getChildren() + .find(node => { + return ( + node.kind === SyntaxKind.PropertyAssignment && + node.getChildren()[0].getText() === 'declarations' + ); + }); + if (!declarationsPropertyAssignment) { + throw new SchematicsException( + `No declarations array in the @NgModule decorator in ${filePath}` + ); + } + const declaredComponents = declarationsPropertyAssignment + .getChildren() + .find(node => node.kind === SyntaxKind.ArrayLiteralExpression) + .getChildren() + .find(node => node.kind === SyntaxKind.SyntaxList) + .getChildren() + .filter(node => node.kind === SyntaxKind.Identifier) + .map(node => node.getText()) + .filter(name => name.endsWith('Component')); + + const imports = file.statements.filter( + statement => statement.kind === SyntaxKind.ImportDeclaration + ); + const componentInfo = declaredComponents.map(componentName => { + const importStatement = imports.find(statement => { + const importedIdentifiers = statement + .getChildren() + .find(node => node.kind === SyntaxKind.ImportClause) + .getChildren() + .find(node => node.kind === SyntaxKind.NamedImports) + .getChildren() + .find(node => node.kind === SyntaxKind.SyntaxList) + .getChildren() + .filter(node => node.kind === SyntaxKind.ImportSpecifier) + .map(node => node.getText()); + return importedIdentifiers.includes(componentName); + }); + const fullPath = importStatement + .getChildren() + .find(node => node.kind === SyntaxKind.StringLiteral) + .getText() + .slice(1, -1); + const path = fullPath.slice(0, fullPath.lastIndexOf('/')); + const componentFileName = fullPath.slice( + fullPath.lastIndexOf('/') + 1 + ); + return { name: componentName, path, componentFileName }; + }); + + const moduleName = getFirstNgModuleName(file); + + return chain( + componentInfo.map(info => + chain([ + schematic('component-story', { + libPath, + moduleFileName: fileName, + ngModuleClassName: moduleName, + componentName: info.name, + componentPath: info.path, + componentFileName: info.componentFileName + }), + generateCypressSpecs + ? schematic( + 'component-cypress-spec', + { + projectName, + libPath, + componentName: info.name, + componentPath: info.path, + componentFileName: info.componentFileName + } + ) + : () => {} + ]) + ) + ); + }) + ); + }; +} diff --git a/packages/angular/src/utils/ast-utils.ts b/packages/angular/src/utils/ast-utils.ts index 1137b437b0eb1..70ab7f3fd6681 100644 --- a/packages/angular/src/utils/ast-utils.ts +++ b/packages/angular/src/utils/ast-utils.ts @@ -8,7 +8,7 @@ import { InsertChange, RemoveChange } from '@nrwl/workspace/src/utils/ast-utils'; -import { Tree } from '@angular-devkit/schematics'; +import { Tree, SchematicsException } from '@angular-devkit/schematics'; import * as path from 'path'; import { toFileName } from '@nrwl/workspace/src/utils/name-utils'; @@ -64,7 +64,7 @@ function _angularImportsFromNode( } } -function getDecoratorMetadata( +export function getDecoratorMetadata( source: ts.SourceFile, identifier: string, module: string @@ -130,6 +130,38 @@ function getDecoratorMetadata( .map(expr => expr.arguments[0] as ts.ObjectLiteralExpression); } +function findClassDeclarationParent(node) { + if (ts.isClassDeclaration(node)) { + return node; + } + return node.parent && findClassDeclarationParent(node.parent); +} +/** + * Given a source file with @NgModule class(es), find the name of the first @NgModule class. + * + * @param source source file containing one or more @NgModule + * @returns the name of the first @NgModule, or `undefined` if none is found + */ +export function getFirstNgModuleName(source) { + // First, find the @NgModule decorators. + const ngModulesMetadata = getDecoratorMetadata( + source, + 'NgModule', + '@angular/core' + ); + if (ngModulesMetadata.length === 0) { + return undefined; + } + // Then walk parent pointers up the AST, looking for the ClassDeclaration parent of the NgModule + // metadata. + const moduleClass = findClassDeclarationParent(ngModulesMetadata[0]); + if (!moduleClass || !moduleClass.name) { + return undefined; + } + // Get the class name of the module ClassDeclaration. + return moduleClass.name.text; +} + function _addSymbolToNgModuleMetadata( source: ts.SourceFile, ngModulePath: string, @@ -599,3 +631,19 @@ function getMatchingObjectLiteralElement( })[0] ); } + +export function getTsSourceFile(host: Tree, path: string): ts.SourceFile { + const buffer = host.read(path); + if (!buffer) { + throw new SchematicsException(`Could not read TS file (${path}).`); + } + const content = buffer.toString(); + const source = ts.createSourceFile( + path, + content, + ts.ScriptTarget.Latest, + true + ); + + return source; +} diff --git a/packages/angular/src/utils/testing.ts b/packages/angular/src/utils/testing.ts index 63385af099973..fb82e5996da12 100644 --- a/packages/angular/src/utils/testing.ts +++ b/packages/angular/src/utils/testing.ts @@ -1,17 +1,33 @@ import { join } from 'path'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { Tree, Rule } from '@angular-devkit/schematics'; +import { Tree, Rule, externalSchematic } from '@angular-devkit/schematics'; import { names, toFileName } from '@nrwl/workspace/src/utils/name-utils'; +import { createEmptyWorkspace } from '@nrwl/workspace/testing'; const testRunner = new SchematicTestRunner( '@nrwl/angular', join(__dirname, '../../collection.json') ); -export function runSchematic(schematicName: string, options: any, tree: Tree) { +export function runSchematic( + schematicName: string, + options: SchemaOptions, + tree: Tree +) { return testRunner.runSchematicAsync(schematicName, options, tree).toPromise(); } +export function runExternalSchematic( + collectionName: string, + schematicName: string, + options: SchemaOptions, + tree: Tree +) { + return testRunner + .runExternalSchematicAsync(collectionName, schematicName, options, tree) + .toPromise(); +} + export function callRule(rule: Rule, tree: Tree) { return testRunner.callRule(rule, tree).toPromise(); } @@ -150,3 +166,59 @@ export function createLib(tree: Tree, libName: string): Tree { ); return tree; } + +export async function createTestUILib(libName: string): Promise { + let appTree = Tree.empty(); + appTree = createEmptyWorkspace(appTree); + appTree = await callRule( + externalSchematic('@nrwl/angular', 'library', { + name: libName + }), + appTree + ); + appTree = await callRule( + externalSchematic('@schematics/angular', 'component', { + name: 'test-button', + project: libName + }), + appTree + ); + appTree.overwrite( + `libs/${libName}/src/lib/test-button/test-button.component.ts`, + ` +import { Component, OnInit, Input } from '@angular/core'; + +export type ButtonStyle = 'default' | 'primary' | 'accent'; + +@Component({ + selector: 'proj-test-button', + templateUrl: './test-button.component.html', + styleUrls: ['./test-button.component.css'] +}) +export class TestButtonComponent implements OnInit { + @Input('buttonType') type = 'button'; + @Input() style: ButtonStyle = 'default'; + @Input() age: number; + @Input() isOn = false; + + constructor() { } + + ngOnInit() { + } + +} +` + ); + appTree.overwrite( + `libs/${libName}/src/lib/test-button/test-button.component.html`, + `` + ); + appTree = await callRule( + externalSchematic('@schematics/angular', 'component', { + name: 'test-other', + project: libName + }), + appTree + ); + return appTree; +} diff --git a/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts b/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts index a684fb4ce9405..8cd42e6a61dab 100644 --- a/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts +++ b/packages/cypress/src/schematics/cypress-project/cypress-project.spec.ts @@ -101,6 +101,7 @@ describe('schematic:cypress-project', () => { fileServerFolder: '.', fixturesFolder: './src/fixtures', integrationFolder: './src/integration', + modifyObstructiveCode: false, pluginsFile: './src/plugins/index', supportFile: false, video: true, @@ -180,6 +181,7 @@ describe('schematic:cypress-project', () => { fileServerFolder: '.', fixturesFolder: './src/fixtures', integrationFolder: './src/integration', + modifyObstructiveCode: false, pluginsFile: './src/plugins/index', supportFile: false, video: true, diff --git a/packages/cypress/src/schematics/cypress-project/files/cypress.json b/packages/cypress/src/schematics/cypress-project/files/cypress.json index 6d559622a8a69..02ba794aead35 100644 --- a/packages/cypress/src/schematics/cypress-project/files/cypress.json +++ b/packages/cypress/src/schematics/cypress-project/files/cypress.json @@ -2,6 +2,7 @@ "fileServerFolder": ".", "fixturesFolder": "./src/fixtures", "integrationFolder": "./src/integration", + "modifyObstructiveCode": false, "pluginsFile": "./src/plugins/index", "supportFile": false, "video": true, diff --git a/packages/storybook/builders.json b/packages/storybook/builders.json new file mode 100644 index 0000000000000..36f11d57aa6a6 --- /dev/null +++ b/packages/storybook/builders.json @@ -0,0 +1,10 @@ +{ + "$schema": "@angular-devkit/architect/src/builders-schema.json", + "builders": { + "storybook": { + "implementation": "./src/builders/storybook/storybook.impl", + "schema": "./src/builders/storybook/schema.json", + "description": "Serve Storybook" + } + } +} diff --git a/packages/storybook/collection.json b/packages/storybook/collection.json new file mode 100644 index 0000000000000..d60c8fb51af49 --- /dev/null +++ b/packages/storybook/collection.json @@ -0,0 +1,24 @@ +{ + "name": "Nx Cypress", + "version": "0.1", + "schematics": { + "ng-add": { + "factory": "./src/schematics/ng-add/ng-add", + "schema": "./src/schematics/ng-add/schema.json", + "description": "Add storybook configuration to the workspace", + "hidden": true + }, + "configuration": { + "factory": "./src/schematics/configuration/configuration", + "schema": "./src/schematics/configuration/schema.json", + "description": "Add storybook configuration to a ui library", + "hidden": false + }, + "cypress-project": { + "factory": "./src/schematics/cypress-project/cypress-project", + "schema": "./src/schematics/cypress-project/schema.json", + "description": "Add cypress e2e app to test a ui library that is set up for storybook", + "hidden": false + } + } +} diff --git a/packages/storybook/index.ts b/packages/storybook/index.ts new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/storybook/migrations.json b/packages/storybook/migrations.json new file mode 100644 index 0000000000000..63001b4458891 --- /dev/null +++ b/packages/storybook/migrations.json @@ -0,0 +1,3 @@ +{ + "schematics": {} +} diff --git a/packages/storybook/package.json b/packages/storybook/package.json new file mode 100644 index 0000000000000..aa090e0a12cea --- /dev/null +++ b/packages/storybook/package.json @@ -0,0 +1,46 @@ +{ + "name": "@nrwl/storybook", + "version": "0.0.1", + "description": "Storybook plugin for Nx", + "repository": { + "type": "git", + "url": "git+https://github.com/nrwl/nx.git" + }, + "keywords": [ + "Angular", + "React", + "Web", + "Storybook", + "Cypress" + ], + "main": "index.js", + "types": "index.d.ts", + "author": "Isaac Mann", + "license": "MIT", + "bugs": { + "url": "https://github.com/nrwl/nx/issues" + }, + "homepage": "https://nx.dev", + "schematics": "./collection.json", + "builders": "./builders.json", + "ng-update": { + "requirements": {}, + "migrations": "./migrations.json" + }, + "peerDependencies": { + "@nrwl/workspace": "*", + "@storybook/angular": "^5.1.9", + "@storybook/addon-knobs": "^5.1.9", + "@types/storybook__addon-knobs": "^5.1.9", + "babel-loader": "^7.5.4", + "@babel/core": "^8.0.6" + }, + "dependencies": { + "@nrwl/cypress": "*", + "core-js": "^3.2.1", + "tree-kill": "1.2.1", + "ts-loader": "5.3.1", + "tsconfig-paths-webpack-plugin": "3.2.0", + "webpack-node-externals": "1.7.2" + } +} diff --git a/packages/storybook/src/builders/storybook/schema.json b/packages/storybook/src/builders/storybook/schema.json new file mode 100644 index 0000000000000..2afd3cb4241c7 --- /dev/null +++ b/packages/storybook/src/builders/storybook/schema.json @@ -0,0 +1,88 @@ +{ + "title": "Storybook Dev Builder", + "description": "Serve up storybook in development mode", + "type": "object", + "properties": { + "uiFramework": { + "type": "string", + "description": "Storybook framework npm package", + "default": "@storybook/angular", + "hidden": true + }, + "port": { + "type": "number", + "description": "Port to listen on.", + "default": 9009 + }, + "host": { + "type": "string", + "description": "Host to listen on.", + "default": "localhost" + }, + "ssl": { + "type": "boolean", + "description": "Serve using HTTPS.", + "default": false + }, + "sslKey": { + "type": "string", + "description": "SSL key to use for serving HTTPS." + }, + "sslCert": { + "type": "string", + "description": "SSL certificate to use for serving HTTPS." + }, + "watch": { + "type": "boolean", + "description": "Watches for changes and rebuilds application", + "default": true + }, + "staticDir": { + "type": "array", + "description": "Directory where to load static files from, array of strings", + "items": { + "type": "number" + } + }, + "config": { + "type": "object", + "description": ".storybook configuration", + "properties": { + "configFolder": { + "type": "string", + "description": "Directory where to load Storybook configurations from" + }, + "pluginPath": { + "type": "string", + "description": "Path to storybook plugin.js file." + }, + "configPath": { + "type": "string", + "description": "Path to storybook config.js file." + }, + "srcRoot": { + "type": "string", + "description": "Project source path." + } + }, + "oneOf": [ + { + "anyOf": [ + { + "required": ["configFolder"] + }, + { + "required": ["pluginPath", "configPath", "srcRoot"] + } + ] + } + ] + }, + "quiet": { + "type": "boolean", + "description": "Suppress verbose build output.", + "default": true + } + }, + "required": ["uiFramework", "config"] +} diff --git a/packages/storybook/src/builders/storybook/storybook.impl.spec.ts b/packages/storybook/src/builders/storybook/storybook.impl.spec.ts new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/packages/storybook/src/builders/storybook/storybook.impl.ts b/packages/storybook/src/builders/storybook/storybook.impl.ts new file mode 100644 index 0000000000000..99b0a77fba575 --- /dev/null +++ b/packages/storybook/src/builders/storybook/storybook.impl.ts @@ -0,0 +1,147 @@ +import { + BuilderContext, + createBuilder, + BuilderOutput +} from '@angular-devkit/architect'; +import { Observable, from } from 'rxjs'; +import { map, switchMap } from 'rxjs/operators'; +import { JsonObject } from '@angular-devkit/core'; +import { join, sep, basename } from 'path'; +import { tmpdir } from 'os'; +import { mkdtempSync, statSync, copyFileSync, constants } from 'fs'; + +import { buildDevStandalone } from '@storybook/core/dist/server/build-dev'; + +import { NodeJsSyncHost } from '@angular-devkit/core/node'; +import { getRoot } from '../../utils/root'; + +export interface StorybookConfig extends JsonObject { + configFolder?: string; + configPath?: string; + pluginPath?: string; + srcRoot?: string; +} + +export interface StorybookBuilderOptions extends JsonObject { + uiFramework: string; + config: StorybookConfig; + host?: string; + port?: number; + quiet?: boolean; + ssl?: boolean; + sslCert?: string; + sslKey?: string; + staticDir?: number[]; + watch?: boolean; +} + +try { + require('dotenv').config(); +} catch (e) {} + +export default createBuilder(run); + +/** + * @whatItDoes This is the starting point of the builder. + * @param builderConfig + */ +function run( + options: StorybookBuilderOptions, + context: BuilderContext +): Observable { + const frameworkPath = `${options.uiFramework}/dist/server/options`; + return from(import(frameworkPath)).pipe( + map(m => m.default), + switchMap(frameworkOptions => + from(storybookOptionMapper(options, frameworkOptions, context)) + ), + switchMap(option => runInstance(option)), + map(loaded => { + const builder: BuilderOutput = { success: true } as BuilderOutput; + return builder; + }) + ); +} + +function runInstance(options: StorybookBuilderOptions) { + return new Observable(obs => { + buildDevStandalone({ ...options, ci: true }) + .then(sucess => obs.next(sucess)) + .catch(err => obs.error(err)); + }); +} + +async function storybookOptionMapper( + builderOptions: StorybookBuilderOptions, + frameworkOptions: any, + context: BuilderContext +) { + const storybookConfig = await findOrCreateConfig( + builderOptions.config, + context + ); + const optionsWithFramework = { + ...builderOptions, + mode: 'dev', + configDir: storybookConfig, + ...frameworkOptions, + frameworkPresets: [...(frameworkOptions.frameworkPresets || [])] + }; + optionsWithFramework.config; + return optionsWithFramework; +} + +async function findOrCreateConfig( + config: StorybookConfig, + context: BuilderContext +): Promise { + const host = new NodeJsSyncHost(); + const sourceRoot = await getRoot(context, host); + + if (config.configFolder && statSync(config.configFolder).isDirectory()) { + return config.configFolder; + } else if ( + statSync(config.configPath).isFile() && + statSync(config.pluginPath).isFile() && + statSync(config.srcRoot).isFile() + ) { + return createStorybookConfig( + config.configPath, + config.pluginPath, + config.srcRoot + ); + } else if ( + statSync( + join(context.workspaceRoot, sourceRoot, '.storybook') + ).isDirectory() + ) { + return join(context.workspaceRoot, sourceRoot, '.storybook'); + } + throw new Error('No configuration settings'); +} + +function createStorybookConfig( + configPath: string, + pluginPath: string, + srcRoot: string +): string { + const tmpDir = tmpdir(); + const tmpFolder = `${tmpDir}${sep}`; + mkdtempSync(tmpFolder); + copyFileSync( + configPath, + `${tmpFolder}/${basename(configPath)}`, + constants.COPYFILE_EXCL + ); + copyFileSync( + pluginPath, + `${tmpFolder}/${basename(pluginPath)}`, + constants.COPYFILE_EXCL + ); + copyFileSync( + srcRoot, + `${tmpFolder}/${basename(srcRoot)}`, + constants.COPYFILE_EXCL + ); + return tmpFolder; +} diff --git a/packages/storybook/src/schematics/configuration/configuration.spec.ts b/packages/storybook/src/schematics/configuration/configuration.spec.ts new file mode 100644 index 0000000000000..68c55d90f9956 --- /dev/null +++ b/packages/storybook/src/schematics/configuration/configuration.spec.ts @@ -0,0 +1,128 @@ +import { Tree } from '@angular-devkit/schematics'; +import { readJsonInTree } from '@nrwl/workspace'; +import { createTestUILib, runSchematic } from '../../utils/testing'; +import { StorybookConfigureSchema } from './schema'; + +describe('schematic:configuration', () => { + let appTree: Tree; + + beforeEach(async () => { + appTree = await createTestUILib('test-ui-lib'); + }); + + it('should generate files', async () => { + const tree = await runSchematic( + 'configuration', + { name: 'test-ui-lib' }, + appTree + ); + + expect(tree.exists('libs/test-ui-lib/.storybook/addons.js')).toBeTruthy(); + expect(tree.exists('libs/test-ui-lib/.storybook/config.js')).toBeTruthy(); + expect( + tree.exists('libs/test-ui-lib/.storybook/tsconfig.json') + ).toBeTruthy(); + }); + + it('should update `angular.json` file', async () => { + const tree = await runSchematic( + 'configuration', + { name: 'test-ui-lib' }, + appTree + ); + const angularJson = readJsonInTree(tree, 'angular.json'); + const project = angularJson.projects['test-ui-lib']; + + expect(project.architect.storybook).toEqual({ + builder: '@nrwl/storybook:storybook', + options: { + port: 4400, + config: { + configFolder: 'libs/test-ui-lib/.storybook' + } + } + }); + }); + + it('should update `tsconfig.lib.json` file', async () => { + const tree = await runSchematic( + 'configuration', + { name: 'test-ui-lib' }, + appTree + ); + const tsconfigLibJson = readJsonInTree( + tree, + 'libs/test-ui-lib/tsconfig.lib.json' + ); + expect(tsconfigLibJson.exclude.includes('**/*.stories.ts')).toBeTruthy(); + }); + + it('should configure everything at once', async () => { + const tree = await runSchematic( + 'configuration', + { + name: 'test-ui-lib', + configureCypress: true, + generateCypressSpecs: true, + generateStories: true + }, + appTree + ); + expect(tree.exists('libs/test-ui-lib/.storybook/addons.js')).toBeTruthy(); + expect(tree.exists('libs/test-ui-lib/.storybook/config.js')).toBeTruthy(); + expect( + tree.exists('libs/test-ui-lib/.storybook/tsconfig.json') + ).toBeTruthy(); + expect(tree.exists('apps/test-ui-lib-e2e/cypress.json')).toBeTruthy(); + expect( + tree.exists( + 'libs/test-ui-lib/src/lib/test-button/test-button.component.stories.ts' + ) + ).toBeTruthy(); + expect( + tree.exists( + 'libs/test-ui-lib/src/lib/test-other/test-other.component.stories.ts' + ) + ).toBeTruthy(); + expect( + tree.exists( + 'apps/test-ui-lib-e2e/src/integration/test-button/test-button.component.spec.ts' + ) + ).toBeTruthy(); + expect( + tree.exists( + 'apps/test-ui-lib-e2e/src/integration/test-other/test-other.component.spec.ts' + ) + ).toBeTruthy(); + }); + + // it('should launch cypress and storybook successfully', async done => { + // const tree = await runSchematic( + // 'configuration', + // { + // name: 'test-ui-lib', + // configureCypress: true, + // generateCypressSpecs: true, + // generateStories: true + // }, + // appTree + // ); + // const registry = new schema.CoreSchemaRegistry(); + // registry.addPostTransform(schema.transforms.addUndefinedDefaults); + // const testArchitectHost = new TestingArchitectHost('/root', '/root'); + + // const architect = new Architect(testArchitectHost, registry); + // await testArchitectHost.addBuilderFromPackage( + // path.join(__dirname, '../../..') + // ); + // const run = await architect.scheduleTarget( + // targetFromTargetString('test-ui-lib-e2e:e2e') + // ); + // expect(await run.result).toEqual( + // jasmine.objectContaining({ + // success: true + // }) + // ); + // done(); + // }); +}); diff --git a/packages/storybook/src/schematics/configuration/configuration.ts b/packages/storybook/src/schematics/configuration/configuration.ts new file mode 100644 index 0000000000000..9c913798b1054 --- /dev/null +++ b/packages/storybook/src/schematics/configuration/configuration.ts @@ -0,0 +1,125 @@ +import { + chain, + externalSchematic, + move, + Rule, + schematic, + SchematicContext, + template, + Tree, + url +} from '@angular-devkit/schematics'; +import { + getProjectConfig, + offsetFromRoot, + readJsonFile, + updateWorkspace +} from '@nrwl/workspace'; +import { StorybookStoriesSchema } from '../../../../angular/src/schematics/stories/stories'; +import { applyWithSkipExisting, parseJsonAtPath } from '../../utils/utils'; +import { CypressConfigureSchema } from '../cypress-project/cypress-project'; +import { StorybookConfigureSchema } from './schema'; + +export default function(schema: StorybookConfigureSchema): Rule { + return chain([ + schematic('ng-add', {}), + createRootStorybookDir(), + createLibStorybookDir(schema.name), + configureTsConfig(schema.name), + addStorybookTask(schema.name), + schema.configureCypress + ? schematic('cypress-project', { + name: schema.name + }) + : () => {}, + schema.generateStories + ? externalSchematic('@nrwl/angular', 'stories', { + name: schema.name, + generateCypressSpecs: + schema.configureCypress && schema.generateCypressSpecs + }) + : () => {} + ]); +} + +function createRootStorybookDir(): Rule { + return (tree: Tree, context: SchematicContext) => { + context.logger.debug('adding .storybook folder to lib'); + + return chain([applyWithSkipExisting(url('./root-files'), [])])( + tree, + context + ); + }; +} + +function createLibStorybookDir(projectName: string): Rule { + return (tree: Tree, context: SchematicContext) => { + context.logger.debug('adding .storybook folder to lib'); + const projectConfig = getProjectConfig(tree, projectName); + + return chain([ + applyWithSkipExisting(url('./lib-files'), [ + template({ + tmpl: '', + offsetFromRoot: offsetFromRoot(projectConfig.root) + }), + move(projectConfig.root) + ]) + ])(tree, context); + }; +} + +function configureTsConfig(projectName: string): Rule { + return (tree: Tree) => { + const projectPath = getProjectConfig(tree, projectName).root; + const tsConfigPath = projectPath + '/tsconfig.lib.json'; + const projectTsConfig = parseJsonAtPath(tree, tsConfigPath); + + let tsConfigContent: any; + + if (projectTsConfig && projectTsConfig.value) { + tsConfigContent = projectTsConfig.value; + } else { + return tree; + } + + tsConfigContent.exclude = [...tsConfigContent.exclude, '**/*.stories.ts']; + + tree.overwrite( + tsConfigPath, + JSON.stringify(tsConfigContent, null, 2) + '\n' + ); + return tree; + }; +} + +function addStorybookTask(projectName: string): Rule { + return updateWorkspace(workspace => { + const projectConfig = workspace.projects.get(projectName); + let uiFramework = '@storybook/react'; + try { + if ( + readJsonFile(projectConfig.root + '/tsconfig.lib.json') + .angularCompilerOptions + ) { + uiFramework = '@storybook/angular'; + } + } catch (e) {} + projectConfig.targets.set('storybook', { + builder: '@nrwl/storybook:storybook', + options: { + uiFramework, + port: 4400, + config: { + configFolder: `${projectConfig.root}/.storybook` + } + }, + configurations: { + ci: { + quiet: true + } + } + }); + }); +} diff --git a/packages/storybook/src/schematics/configuration/lib-files/.storybook/addons.js__tmpl__ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/addons.js__tmpl__ new file mode 100644 index 0000000000000..9ba582015be3a --- /dev/null +++ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/addons.js__tmpl__ @@ -0,0 +1 @@ +import '<%= offsetFromRoot %>../.storybook/addons'; diff --git a/packages/storybook/src/schematics/configuration/lib-files/.storybook/config.js__tmpl__ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/config.js__tmpl__ new file mode 100644 index 0000000000000..53acdcc0345c7 --- /dev/null +++ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/config.js__tmpl__ @@ -0,0 +1,3 @@ +import { configure } from '@storybook/angular'; + +configure(require.context('../src/lib', true, /\.stories\.ts$/), module); diff --git a/packages/storybook/src/schematics/configuration/lib-files/.storybook/tsconfig.json b/packages/storybook/src/schematics/configuration/lib-files/.storybook/tsconfig.json new file mode 100644 index 0000000000000..e133757ea1559 --- /dev/null +++ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../tsconfig.json", + "exclude": ["../src/test.ts", "../**/*.spec.ts"], + "include": ["../src/**/*"] +} diff --git a/packages/storybook/src/schematics/configuration/lib-files/.storybook/webpack.config.js__tmpl__ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/webpack.config.js__tmpl__ new file mode 100644 index 0000000000000..b5883ae28ce06 --- /dev/null +++ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/webpack.config.js__tmpl__ @@ -0,0 +1,6 @@ +const rootWebpackConfig = require('<%= offsetFromRoot %>../.storybook/webpack.config'); +// Export a function. Accept the base config as the only param. +module.exports = async ({ config, mode }) => { + config = await rootWebpackConfig({ config, mode }); + return config; +}; diff --git a/packages/storybook/src/schematics/configuration/root-files/.storybook/addons.js b/packages/storybook/src/schematics/configuration/root-files/.storybook/addons.js new file mode 100644 index 0000000000000..6622fe475d5fe --- /dev/null +++ b/packages/storybook/src/schematics/configuration/root-files/.storybook/addons.js @@ -0,0 +1 @@ +import '@storybook/addon-knobs/register'; diff --git a/packages/storybook/src/schematics/configuration/root-files/.storybook/tsconfig.json b/packages/storybook/src/schematics/configuration/root-files/.storybook/tsconfig.json new file mode 100644 index 0000000000000..c76ab8e21621c --- /dev/null +++ b/packages/storybook/src/schematics/configuration/root-files/.storybook/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../tsconfig.json", + "exclude": ["../**/test.ts", "../**/*.spec.ts"], + "include": ["../**/*"] +} diff --git a/packages/storybook/src/schematics/configuration/root-files/.storybook/webpack.config.js b/packages/storybook/src/schematics/configuration/root-files/.storybook/webpack.config.js new file mode 100644 index 0000000000000..37facf778ed9a --- /dev/null +++ b/packages/storybook/src/schematics/configuration/root-files/.storybook/webpack.config.js @@ -0,0 +1,36 @@ +// Export a function. Accept the base config as the only param. +module.exports = async ({ config, mode }) => { + // `mode` has a value of 'DEVELOPMENT' or 'PRODUCTION' + // You can change the configuration based on that. + // 'PRODUCTION' is used when building the static version of storybook. + + r = config.module.rules.filter(rule => rule.test != '/\\.css$/'); + + // Make whatever fine-grained changes you need + r.push({ + test: /\.css$/, + use: [ + 'to-string-loader', + { + loader: 'style-loader' + }, + { + loader: 'css-loader', + options: { + sourceMap: true + } + } + ] + }); + + config.module.rules = r; + + let scssLoader = config.module.rules.find(i => !!'a.scss'.match(i.test)); + scssLoader.use = ['to-string-loader', ...scssLoader.use]; + + let htmlLoader = config.module.rules.find(i => !!'a.html'.match(i.test)); + htmlLoader.loader = 'html-loader'; + + // Return the altered config + return config; +}; diff --git a/packages/storybook/src/schematics/configuration/schema.d.ts b/packages/storybook/src/schematics/configuration/schema.d.ts new file mode 100644 index 0000000000000..b5d205ffe85a9 --- /dev/null +++ b/packages/storybook/src/schematics/configuration/schema.d.ts @@ -0,0 +1,6 @@ +export interface StorybookConfigureSchema { + name: string; + configureCypress: boolean; + generateStories: boolean; + generateCypressSpecs: boolean; +} diff --git a/packages/storybook/src/schematics/configuration/schema.json b/packages/storybook/src/schematics/configuration/schema.json new file mode 100644 index 0000000000000..39ae7ee77a3ef --- /dev/null +++ b/packages/storybook/src/schematics/configuration/schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "storybook-configure", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Library name", + "$default": { + "$source": "argv", + "index": 0 + } + }, + "configureCypress": { + "type": "boolean", + "description": "Run the cypress-configure schematic" + }, + "generateStories": { + "type": "boolean", + "description": "Automatically generate *.stories.ts files for components declared in this library" + }, + "generateCypressSpecs": { + "type": "boolean", + "description": "Automatically generate *.spec.ts files in the cypress e2e app generated by the cypress-configure schematic" + } + }, + "required": ["name"] +} diff --git a/packages/storybook/src/schematics/cypress-project/cypress-project.spec.ts b/packages/storybook/src/schematics/cypress-project/cypress-project.spec.ts new file mode 100644 index 0000000000000..4b6cfb84dc155 --- /dev/null +++ b/packages/storybook/src/schematics/cypress-project/cypress-project.spec.ts @@ -0,0 +1,48 @@ +import { Tree } from '@angular-devkit/schematics'; +import { readJsonInTree } from '@nrwl/workspace'; +import { createTestUILib, runSchematic } from '../../utils/testing'; + +describe('schematic:cypress-project', () => { + let appTree: Tree; + + beforeEach(async () => { + appTree = await createTestUILib('test-ui-lib'); + }); + + it('should generate files', async () => { + const tree = await runSchematic( + 'cypress-project', + { name: 'test-ui-lib' }, + appTree + ); + + expect(tree.exists('apps/test-ui-lib-e2e/cypress.json')).toBeTruthy(); + const cypressJson = readJsonInTree( + tree, + 'apps/test-ui-lib-e2e/cypress.json' + ); + expect(cypressJson.baseUrl).toBe('http://localhost:4400'); + }); + + it('should update `angular.json` file', async () => { + const tree = await runSchematic( + 'cypress-project', + { name: 'test-ui-lib' }, + appTree + ); + const angularJson = readJsonInTree(tree, 'angular.json'); + const project = angularJson.projects['test-ui-lib-e2e']; + + expect(project.architect.e2e.options.devServerTarget).toEqual( + 'test-ui-lib:storybook' + ); + expect(project.architect.e2e.options.headless).toEqual(false); + expect(project.architect.e2e.options.watch).toEqual(true); + expect( + project.architect.e2e.configurations.headless.devServerTarget + ).toEqual('test-ui-lib:storybook:ci'); + expect(project.architect.e2e.configurations.headless.headless).toEqual( + true + ); + }); +}); diff --git a/packages/storybook/src/schematics/cypress-project/cypress-project.ts b/packages/storybook/src/schematics/cypress-project/cypress-project.ts new file mode 100644 index 0000000000000..68d3b975a5f95 --- /dev/null +++ b/packages/storybook/src/schematics/cypress-project/cypress-project.ts @@ -0,0 +1,91 @@ +import { + chain, + externalSchematic, + Rule, + SchematicContext, + Tree +} from '@angular-devkit/schematics'; +import { getProjectConfig, updateWorkspaceInTree } from '@nrwl/workspace'; +import { parseJsonAtPath, safeFileDelete } from '../../utils/utils'; + +export interface CypressConfigureSchema { + name: string; +} + +export default function(schema: CypressConfigureSchema): Rule { + const e2eProjectName = schema.name + '-e2e'; + return chain([ + externalSchematic('@nrwl/cypress', 'cypress-project', { + name: e2eProjectName, + project: schema.name + }), + removeUnneededFiles(e2eProjectName), + addBaseUrlToCypressConfig(e2eProjectName), + updateAngularJsonBuilder(e2eProjectName, schema.name) + ]); +} + +function removeUnneededFiles(projectName: string): Rule { + return (tree: Tree, context: SchematicContext): Tree => { + safeFileDelete( + tree, + getProjectConfig(tree, projectName).sourceRoot + + '/integration/app.spec.ts' + ); + safeFileDelete( + tree, + getProjectConfig(tree, projectName).sourceRoot + '/support/app.po.ts' + ); + + return tree; + }; +} + +function addBaseUrlToCypressConfig(projectName: string): Rule { + return (tree: Tree, context: SchematicContext): void | Tree => { + const cypressConfigPath = + getProjectConfig(tree, projectName).root + '/cypress.json'; + const cypressConfig = parseJsonAtPath(tree, cypressConfigPath); + + let cypressConfigContent: any; + + if (cypressConfig && cypressConfig.value) { + cypressConfigContent = cypressConfig.value; + } else { + return tree; + } + + cypressConfigContent.baseUrl = 'http://localhost:4400'; + + return tree.overwrite( + cypressConfigPath, + JSON.stringify(cypressConfigContent, null, 2) + '\n' + ); + }; +} + +function updateAngularJsonBuilder( + e2eProjectName: string, + targetProjectName +): Rule { + return updateWorkspaceInTree(workspace => { + const project = workspace.projects[e2eProjectName]; + const e2eTarget = project.architect['e2e']; + project.architect['e2e'] = { + ...e2eTarget, + options: { + ...e2eTarget.options, + devServerTarget: `${targetProjectName}:storybook`, + headless: false, + watch: true + }, + configurations: { + headless: { + devServerTarget: `${targetProjectName}:storybook:ci`, + headless: true + } + } + }; + return workspace; + }); +} diff --git a/packages/storybook/src/schematics/cypress-project/schema.json b/packages/storybook/src/schematics/cypress-project/schema.json new file mode 100644 index 0000000000000..f2368cc2fc480 --- /dev/null +++ b/packages/storybook/src/schematics/cypress-project/schema.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "cypress-configure", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Library name", + "$default": { + "$source": "argv", + "index": 0 + } + } + }, + "required": ["name"] +} diff --git a/packages/storybook/src/schematics/ng-add/ng-add.spec.ts b/packages/storybook/src/schematics/ng-add/ng-add.spec.ts new file mode 100644 index 0000000000000..7862480f851ab --- /dev/null +++ b/packages/storybook/src/schematics/ng-add/ng-add.spec.ts @@ -0,0 +1,27 @@ +import { Tree } from '@angular-devkit/schematics'; + +import { readJsonInTree } from '@nrwl/workspace'; +import { createEmptyWorkspace } from '@nrwl/workspace/testing'; + +import { runSchematic } from '../../utils/testing'; + +describe('ng-add', () => { + let appTree: Tree; + + beforeEach(() => { + appTree = Tree.empty(); + appTree = createEmptyWorkspace(appTree); + }); + + it('should add dependencies into `package.json` file', async () => { + const tree = await runSchematic('ng-add', {}, appTree); + const packageJson = readJsonInTree(tree, 'package.json'); + expect(packageJson.devDependencies['@storybook/angular']).toBeDefined(); + expect(packageJson.devDependencies['@storybook/addon-knobs']).toBeDefined(); + expect( + packageJson.devDependencies['@types/storybook__addon-knobs'] + ).toBeDefined(); + expect(packageJson.devDependencies['babel-loader']).toBeDefined(); + expect(packageJson.devDependencies['@babel/core']).toBeDefined(); + }); +}); diff --git a/packages/storybook/src/schematics/ng-add/ng-add.ts b/packages/storybook/src/schematics/ng-add/ng-add.ts new file mode 100644 index 0000000000000..8d4981eac51f3 --- /dev/null +++ b/packages/storybook/src/schematics/ng-add/ng-add.ts @@ -0,0 +1,78 @@ +import { + chain, + noop, + Rule, + Tree, + SchematicContext +} from '@angular-devkit/schematics'; +import { + addDepsToPackageJson, + readJsonInTree, + updateJsonInTree +} from '@nrwl/workspace'; +import { + babelCoreVersion, + babelLoaderVersion, + storybookAddonKnobsVersion, + storybookAngularVersion, + storybookAddonKnobsTypesVersion +} from '../../utils/versions'; +import { Schema } from './schema'; +import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; + +function checkDependenciesInstalled(): Rule { + return (host: Tree, context: SchematicContext): Rule => { + const packageJson = readJsonInTree(host, 'package.json'); + const dependencyList: { name: string; version: string }[] = []; + if (!packageJson.devDependencies['@storybook/angular']) { + context.addTask(new NodePackageInstallTask()); + dependencyList.push( + { name: '@nrwl/storybook', version: '*' }, + { name: '@storybook/angular', version: storybookAngularVersion }, + { name: '@storybook/addon-knobs', version: storybookAddonKnobsVersion }, + { + name: '@types/storybook__addon-knobs', + version: storybookAddonKnobsTypesVersion + }, + { name: 'babel-loader', version: babelLoaderVersion }, + { name: '@babel/core', version: babelCoreVersion }, + { name: 'to-string-loader', version: '*' }, + { name: 'html-loader', version: '*' }, + { name: 'css-loader', version: '*' } + ); + } + if ( + !packageJson.dependencies['@angular/forms'] && + !packageJson.devDependencies['@angular/forms'] + ) { + dependencyList.push({ + name: '@angular/forms', + version: '*' + }); + } + + if (!dependencyList.length) { + return noop(); + } + + return addDepsToPackageJson( + {}, + dependencyList.reduce((dictionary, value) => { + dictionary[value.name] = value.version; + return dictionary; + }, {}) + ); + }; +} + +function removeDependency() { + return updateJsonInTree('package.json', json => { + json.dependencies = json.dependencies || {}; + delete json.dependencies['@nrwl/storybook']; + return json; + }); +} + +export default function(schema: Schema) { + return chain([removeDependency(), checkDependenciesInstalled()]); +} diff --git a/packages/storybook/src/schematics/ng-add/schema.d.ts b/packages/storybook/src/schematics/ng-add/schema.d.ts new file mode 100644 index 0000000000000..e53f1202a2dbc --- /dev/null +++ b/packages/storybook/src/schematics/ng-add/schema.d.ts @@ -0,0 +1 @@ +export interface Schema {} diff --git a/packages/storybook/src/schematics/ng-add/schema.json b/packages/storybook/src/schematics/ng-add/schema.json new file mode 100644 index 0000000000000..42feb62fe3d07 --- /dev/null +++ b/packages/storybook/src/schematics/ng-add/schema.json @@ -0,0 +1,7 @@ +{ + "$schema": "http://json-schema.org/schema", + "id": "Nx Storybook Project Schematics Schema", + "title": "Add Storybook Configuration to the workspace", + "type": "object", + "properties": {} +} diff --git a/packages/storybook/src/utils/root.ts b/packages/storybook/src/utils/root.ts new file mode 100644 index 0000000000000..992f28f31ba3a --- /dev/null +++ b/packages/storybook/src/utils/root.ts @@ -0,0 +1,19 @@ +import { BuilderContext } from '@angular-devkit/architect'; +import { workspaces } from '@angular-devkit/core'; +import { Host } from '@angular-devkit/core/src/virtual-fs/host'; + +export async function getRoot(context: BuilderContext, host: Host<{}>) { + const workspaceHost = workspaces.createWorkspaceHost(host); + const { workspace } = await workspaces.readWorkspace( + context.workspaceRoot, + workspaceHost + ); + if (workspace.projects.get(context.target.project).root) { + return workspace.projects.get(context.target.project).root; + } else { + context.reportStatus('Error'); + const message = `${context.target.project} does not have a root. Please define one.`; + context.logger.error(message); + throw new Error(message); + } +} diff --git a/packages/storybook/src/utils/testing.ts b/packages/storybook/src/utils/testing.ts new file mode 100644 index 0000000000000..48371daf5b627 --- /dev/null +++ b/packages/storybook/src/utils/testing.ts @@ -0,0 +1,94 @@ +import { join } from 'path'; +import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; +import { + Tree, + Rule, + externalSchematic, + apply, + source +} from '@angular-devkit/schematics'; +import { createEmptyWorkspace } from '@nrwl/workspace/testing'; + +const testRunner = new SchematicTestRunner( + '@nrwl/storybook', + join(__dirname, '../../collection.json') +); + +const migrationRunner = new SchematicTestRunner( + '@nrwl/storybook/migrations', + join(__dirname, '../../migrations.json') +); + +export function runSchematic( + schematicName: string, + options: SchemaOptions, + tree: Tree +) { + return testRunner.runSchematicAsync(schematicName, options, tree).toPromise(); +} + +export function callRule(rule: Rule, tree: Tree) { + return testRunner.callRule(rule, tree).toPromise(); +} + +export function runMigration(migrationName: string, options: any, tree: Tree) { + return migrationRunner + .runSchematicAsync(migrationName, options, tree) + .toPromise(); +} + +export async function createTestUILib(libName: string): Promise { + let appTree = Tree.empty(); + appTree = createEmptyWorkspace(appTree); + appTree = await callRule( + externalSchematic('@nrwl/angular', 'library', { + name: libName + }), + appTree + ); + appTree = await callRule( + externalSchematic('@schematics/angular', 'component', { + name: 'test-button', + project: libName + }), + appTree + ); + appTree.overwrite( + `libs/${libName}/src/lib/test-button/test-button.component.ts`, + ` +import { Component, OnInit, Input } from '@angular/core'; + +export type ButtonStyle = 'default' | 'primary' | 'accent'; + +@Component({ + selector: 'proj-test-button', + templateUrl: './test-button.component.html', + styleUrls: ['./test-button.component.css'] +}) +export class TestButtonComponent implements OnInit { + @Input('buttonType') type = 'button'; + @Input() style: ButtonStyle = 'default'; + @Input() age: number; + @Input() isOn = false; + + constructor() { } + + ngOnInit() { + } + +} +` + ); + appTree.overwrite( + `libs/${libName}/src/lib/test-button/test-button.component.html`, + `` + ); + appTree = await callRule( + externalSchematic('@schematics/angular', 'component', { + name: 'test-other', + project: libName + }), + appTree + ); + return appTree; +} diff --git a/packages/storybook/src/utils/utils.ts b/packages/storybook/src/utils/utils.ts new file mode 100644 index 0000000000000..a3a5ebeffc8cb --- /dev/null +++ b/packages/storybook/src/utils/utils.ts @@ -0,0 +1,239 @@ +import { + JsonParseMode, + join, + Path, + JsonAstObject, + parseJsonAst, + JsonValue +} from '@angular-devkit/core'; + +import { + SchematicsException, + Tree, + SchematicContext, + Source, + Rule, + mergeWith, + apply, + forEach +} from '@angular-devkit/schematics'; + +import { + findPropertyInAstObject, + appendPropertyInAstObject, + insertPropertyInAstObjectInOrder, + appendValueInAstArray +} from '@schematics/angular/utility/json-utils'; + +import { get } from 'http'; +import { SourceFile, createSourceFile, ScriptTarget } from 'typescript'; + +export interface NodePackage { + name: string; + version: string; +} + +export const Constants = { + addonDependencies: ['@storybook/addons'], + tsConfigExclusions: ['stories', '**/*.stories.ts'], + pkgJsonScripts: { + storybook: 'start-storybook -p 9001 -c .storybook' + }, + jsonIndentLevel: 2, + coreAddonPrefix: '@storybook/addon-' +}; + +export function safeFileDelete(tree: Tree, path: string): boolean { + if (tree.exists(path)) { + tree.delete(path); + return true; + } else { + return false; + } +} + +export function addPropertyToPackageJson( + tree: Tree, + context: SchematicContext, + propertyName: string, + propertyValue: { [key: string]: string } +) { + addPropertyToJsonAst( + tree, + context, + '/package.json', + propertyName, + propertyValue + ); +} + +export function addPropertyToJsonAst( + tree: Tree, + context: SchematicContext, + jsonPath: string, + propertyName: string, + propertyValue: { [key: string]: string } | JsonValue, + appendInArray = false +) { + const jsonAst = getJsonFile(tree, jsonPath); + const jsonNode = findPropertyInAstObject(jsonAst, propertyName); + const recorder = tree.beginUpdate(jsonPath); + + if (!jsonNode) { + // outer node missing, add key/value + appendPropertyInAstObject( + recorder, + jsonAst, + propertyName, + propertyValue, + Constants.jsonIndentLevel + ); + } else if (jsonNode.kind === 'object') { + // property exists, update values + for (const [key, value] of Object.entries(propertyValue as { + [key: string]: string; + })) { + const innerNode = findPropertyInAstObject(jsonNode, key); + + if (!innerNode) { + // 'propertyName' not found, add it + context.logger.debug(`creating ${key} with ${value}`); + + insertPropertyInAstObjectInOrder( + recorder, + jsonNode, + key, + value, + Constants.jsonIndentLevel + ); + } else { + // 'propertyName' found, overwrite value + context.logger.debug(`overwriting ${key} with ${value}`); + + const { end, start } = innerNode; + + recorder.remove(start.offset, end.offset - start.offset); + recorder.insertRight(start.offset, JSON.stringify(value)); + } + } + } else if (jsonNode.kind === 'array' && appendInArray) { + appendValueInAstArray(recorder, jsonNode, propertyValue); + } + + tree.commitUpdate(recorder); +} + +/** + * Attempt to retrieve the latest package version from NPM + * Return an optional "latest" version in case of error + * @param packageName + */ +export function getLatestNodeVersion( + packageName: string +): Promise { + const DEFAULT_VERSION = 'latest'; + + return new Promise(resolve => { + return get(`http://registry.npmjs.org/${packageName}`, res => { + let rawData = ''; + res.on('data', chunk => (rawData += chunk)); + res.on('end', () => { + try { + const response = JSON.parse(rawData); + const version = (response && response['dist-tags']) || {}; + + resolve(buildPackage(packageName, version.latest)); + } catch (e) { + resolve(buildPackage(packageName)); + } + }); + }).on('error', () => resolve(buildPackage(packageName))); + }); + + function buildPackage( + name: string, + version: string = DEFAULT_VERSION + ): NodePackage { + return { name, version }; + } +} + +export function getJsonFile(tree: Tree, path: string): JsonAstObject { + const buffer = tree.read(path); + if (buffer === null) { + throw new SchematicsException(`Could not read JSON file (${path}).`); + } + const content = buffer.toString(); + + const packageJson = parseJsonAst(content, JsonParseMode.Strict); + if (packageJson.kind !== 'object') { + throw new SchematicsException('Invalid JSON file. Was expecting an object'); + } + + return packageJson; +} + +export function parseJsonAtPath(tree: Tree, path: string): JsonAstObject { + const buffer = tree.read(path); + + if (buffer === null) { + throw new SchematicsException(`Could not read ${path}.`); + } + + const content = buffer.toString(); + + const json = parseJsonAst(content, JsonParseMode.Strict); + if (json.kind !== 'object') { + throw new SchematicsException(`Invalid ${path}. Was expecting an object`); + } + + return json; +} + +export function getTsSourceFile(host: Tree, path: string): SourceFile { + const buffer = host.read(path); + if (!buffer) { + throw new SchematicsException(`Could not read TS file (${path}).`); + } + const content = buffer.toString(); + const source = createSourceFile(path, content, ScriptTarget.Latest, true); + + return source; +} + +export function applyWithOverwrite(source: Source, rules: Rule[]): Rule { + return (tree: Tree, _context: SchematicContext) => { + const rule = mergeWith( + apply(source, [ + ...rules, + forEach(fileEntry => { + if (tree.exists(fileEntry.path)) { + tree.overwrite(fileEntry.path, fileEntry.content); + return null; + } + return fileEntry; + }) + ]) + ); + + return rule(tree, _context); + }; +} + +export function applyWithSkipExisting(source: Source, rules: Rule[]): Rule { + return (tree: Tree, _context: SchematicContext) => { + const rule = mergeWith( + apply(source, [ + ...rules, + forEach(fileEntry => { + if (tree.exists(fileEntry.path)) { + return null; + } + return fileEntry; + }) + ]) + ); + + return rule(tree, _context); + }; +} diff --git a/packages/storybook/src/utils/versions.ts b/packages/storybook/src/utils/versions.ts new file mode 100644 index 0000000000000..7e4410df14c14 --- /dev/null +++ b/packages/storybook/src/utils/versions.ts @@ -0,0 +1,5 @@ +export const storybookAngularVersion = '5.2.0'; +export const storybookAddonKnobsVersion = '5.2.0'; +export const storybookAddonKnobsTypesVersion = '5.0.3'; +export const babelCoreVersion = '7.5.4'; +export const babelLoaderVersion = '8.0.6'; diff --git a/packages/workspace/migrations.json b/packages/workspace/migrations.json index 0199130284600..d2b28004e6a8a 100644 --- a/packages/workspace/migrations.json +++ b/packages/workspace/migrations.json @@ -192,4 +192,4 @@ } } } -} \ No newline at end of file +} diff --git a/scripts/e2e-ci2.sh b/scripts/e2e-ci2.sh index 9935de93e3648..73d9d872f5a30 100755 --- a/scripts/e2e-ci2.sh +++ b/scripts/e2e-ci2.sh @@ -15,3 +15,4 @@ jest --maxWorkers=1 ./build/e2e/react.test.js jest --maxWorkers=1 ./build/e2e/report.test.js jest --maxWorkers=1 ./build/e2e/upgrade-module.test.js jest --maxWorkers=1 ./build/e2e/web.test.js +jest --maxWorkers=1 ./build/e2e/storybook.test.js diff --git a/yarn.lock b/yarn.lock index e8d4a02e03bb9..248aec8724911 100644 --- a/yarn.lock +++ b/yarn.lock @@ -258,7 +258,7 @@ dependencies: tslib "^1.9.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.5.5": +"@babel/code-frame@7.5.5", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== @@ -529,12 +529,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.5", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== - -"@babel/parser@^7.6.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.5", "@babel/parser@^7.5.5", "@babel/parser@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== @@ -556,7 +551,7 @@ "@babel/helper-create-class-features-plugin" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-class-properties@7.5.5": +"@babel/plugin-proposal-class-properties@7.5.5", "@babel/plugin-proposal-class-properties@^7.3.3": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz#a974cfae1e37c3110e71f3c6a2e48b8e71958cd4" integrity sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A== @@ -597,7 +592,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.4.4", "@babel/plugin-proposal-object-rest-spread@^7.5.5": +"@babel/plugin-proposal-object-rest-spread@^7.3.2", "@babel/plugin-proposal-object-rest-spread@^7.4.4", "@babel/plugin-proposal-object-rest-spread@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== @@ -873,6 +868,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-react-constant-elements@^7.2.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.0.tgz#13b8434fb817d30feebd811256eb402c9a245c9e" + integrity sha512-np/nPuII8DHOZWB3u8u+NSeKlEz0eBrOlnVksIQog4C9NGVzXO+NLxMcXn4Eu4GMFzOw2W6Tyo6L3+Wv8z9Y5w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" @@ -1094,7 +1097,7 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-env@^7.0.0": +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.4.5": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.0.tgz#aae4141c506100bb2bfaa4ac2a5c12b395619e50" integrity sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg== @@ -1177,6 +1180,13 @@ core-js "^2.6.5" regenerator-runtime "^0.13.2" +"@babel/runtime@7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.3.4.tgz#73d12ba819e365fcf7fd152aed56d6df97d21c83" + integrity sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g== + dependencies: + regenerator-runtime "^0.12.0" + "@babel/runtime@7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" @@ -1184,7 +1194,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205" integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ== @@ -1239,28 +1249,28 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@commitlint/execute-rule@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.1.0.tgz#e8386bd0836b3dcdd41ebb9d5904bbeb447e4715" - integrity sha512-+vpH3RFuO6ypuCqhP2rSqTjFTQ7ClzXtUvXphpROv9v9+7zH4L+Ex+wZLVkL8Xj2cxefSLn/5Kcqa9XyJTn3kg== +"@commitlint/execute-rule@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-8.2.0.tgz#aefb3744e22613660adefb7ebcccaa60bd24e78d" + integrity sha512-9MBRthHaulbWTa8ReG2Oii2qc117NuvzhZdnkuKuYLhker7sUXGFcVhLanuWUKGyfyI2o9zVr/NHsNbCCsTzAA== "@commitlint/load@>6.1.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.1.0.tgz#63b72ae5bb9152b8fa5b17c5428053032a9a49c8" - integrity sha512-ra02Dvmd7Gp1+uFLzTY3yGOpHjPzl5T9wYg/xrtPJNiOWXvQ0Mw7THw+ucd1M5iLUWjvdavv2N87YDRc428wHg== + version "8.2.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-8.2.0.tgz#9ca53a0c795e4f63d796b4d42279e856549add1a" + integrity sha512-EV6PfAY/p83QynNd1llHxJiNxKmp43g8+7dZbyfHFbsGOdokrCnoelAVZ+WGgktXwLN/uXyfkcIAxwac015UYw== dependencies: - "@commitlint/execute-rule" "^8.1.0" - "@commitlint/resolve-extends" "^8.1.0" + "@commitlint/execute-rule" "^8.2.0" + "@commitlint/resolve-extends" "^8.2.0" babel-runtime "^6.23.0" chalk "2.4.2" cosmiconfig "^5.2.0" lodash "4.17.14" resolve-from "^5.0.0" -"@commitlint/resolve-extends@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.1.0.tgz#ed67f2ee484160ac8e0078bae52f172625157472" - integrity sha512-r/y+CeKW72Oa9BUctS1+I/MFCDiI3lfhwfQ65Tpfn6eZ4CuBYKzrCRi++GTHeAFKE3y8q1epJq5Rl/1GBejtBw== +"@commitlint/resolve-extends@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-8.2.0.tgz#b7f2f0c71c10f24b98a199ed11d2c14cfd7a318f" + integrity sha512-cwi0HUsDcD502HBP8huXfTkVuWmeo1Fiz3GKxNwMBBsJV4+bKa7QrtxbNpXhVuarX7QjWfNTvmW6KmFS7YK9uw== dependencies: "@types/node" "^12.0.2" import-fresh "^3.0.0" @@ -1306,23 +1316,113 @@ is-absolute "^1.0.0" is-negated-glob "^1.0.0" -"@emotion/is-prop-valid@^0.8.1": - version "0.8.2" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.2.tgz#b9692080da79041683021fcc32f96b40c54c59dc" - integrity sha512-ZQIMAA2kLUWiUeMZNJDTeCwYRx1l8SQL0kHktze4COT22occKpDML1GDUXP5/sxhOMrZO8vZw773ni4H5Snrsg== +"@emotion/cache@^10.0.17", "@emotion/cache@^10.0.9": + version "10.0.19" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.19.tgz#d258d94d9c707dcadaf1558def968b86bb87ad71" + integrity sha512-BoiLlk4vEsGBg2dAqGSJu0vJl/PgVtCYLBFJaEO8RmQzPugXewQCXZJNXTDFaRlfCs0W+quesayav4fvaif5WQ== dependencies: - "@emotion/memoize" "0.7.2" + "@emotion/sheet" "0.9.3" + "@emotion/stylis" "0.8.4" + "@emotion/utils" "0.11.2" + "@emotion/weak-memoize" "0.2.4" -"@emotion/memoize@0.7.2": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.2.tgz#7f4c71b7654068dfcccad29553520f984cc66b30" - integrity sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w== +"@emotion/core@^10.0.14", "@emotion/core@^10.0.9": + version "10.0.17" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.17.tgz#3367376709721f4ee2068cff54ba581d362789d8" + integrity sha512-gykyjjr0sxzVuZBVTVK4dUmYsorc2qLhdYgSiOVK+m7WXgcYTKZevGWZ7TLAgTZvMelCTvhNq8xnf8FR1IdTbg== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.17" + "@emotion/css" "^10.0.14" + "@emotion/serialize" "^0.11.10" + "@emotion/sheet" "0.9.3" + "@emotion/utils" "0.11.2" + +"@emotion/css@^10.0.14", "@emotion/css@^10.0.9": + version "10.0.14" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.14.tgz#95dacabdd0e22845d1a1b0b5968d9afa34011139" + integrity sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg== + dependencies: + "@emotion/serialize" "^0.11.8" + "@emotion/utils" "0.11.2" + babel-plugin-emotion "^10.0.14" + +"@emotion/hash@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" + integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== + +"@emotion/is-prop-valid@0.8.3", "@emotion/is-prop-valid@^0.8.1": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.3.tgz#cbe62ddbea08aa022cdf72da3971570a33190d29" + integrity sha512-We7VBiltAJ70KQA0dWkdPMXnYoizlxOXpvtjmu5/MBnExd+u0PGgV27WCYanmLAbCwAU30Le/xA0CQs/F/Otig== + dependencies: + "@emotion/memoize" "0.7.3" + +"@emotion/memoize@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" + integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== + +"@emotion/serialize@^0.11.10", "@emotion/serialize@^0.11.11", "@emotion/serialize@^0.11.8": + version "0.11.11" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.11.tgz#c92a5e5b358070a7242d10508143306524e842a4" + integrity sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw== + dependencies: + "@emotion/hash" "0.7.3" + "@emotion/memoize" "0.7.3" + "@emotion/unitless" "0.7.4" + "@emotion/utils" "0.11.2" + csstype "^2.5.7" + +"@emotion/sheet@0.9.3": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.3.tgz#689f135ecf87d3c650ed0c4f5ddcbe579883564a" + integrity sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A== + +"@emotion/styled-base@^10.0.17": + version "10.0.19" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.19.tgz#53655274797194d86453354fdb2c947b46032db6" + integrity sha512-Sz6GBHTbOZoeZQKvkE9gQPzaJ6/qtoQ/OPvyG2Z/6NILlYk60Es1cEcTgTkm26H8y7A0GSgp4UmXl+srvsnFPg== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/is-prop-valid" "0.8.3" + "@emotion/serialize" "^0.11.11" + "@emotion/utils" "0.11.2" -"@emotion/unitless@^0.7.0": +"@emotion/styled@^10.0.14": + version "10.0.17" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.17.tgz#0cd38b8b36259541f2c6717fc22607a120623654" + integrity sha512-zHMgWjHDMNjD+ux64POtDnjLAObniu3znxFBLSdV/RiEhSLjHIowfvSbbd/C33/3uwtI6Uzs2KXnRZtka/PpAQ== + dependencies: + "@emotion/styled-base" "^10.0.17" + babel-plugin-emotion "^10.0.17" + +"@emotion/stylis@0.8.4": + version "0.8.4" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.4.tgz#6c51afdf1dd0d73666ba09d2eb6c25c220d6fe4c" + integrity sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ== + +"@emotion/unitless@0.7.4", "@emotion/unitless@^0.7.0": version "0.7.4" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== +"@emotion/utils@0.11.2": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.2.tgz#713056bfdffb396b0a14f1c8f18e7b4d0d200183" + integrity sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA== + +"@emotion/weak-memoize@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.4.tgz#622a72bebd1e3f48d921563b4b60a762295a81fc" + integrity sha512-6PYY5DVdAY1ifaQW6XYTnOMihmBVT27elqSjEoodchsGjzYlEsTQMcEhSud99kVawatyTZRTiVkJ/c6lwbQ7nA== + +"@icons/material@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" + integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== + "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" @@ -1480,30 +1580,30 @@ glob-to-regexp "^0.3.0" "@nestjs/common@^6.2.4": - version "6.6.7" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-6.6.7.tgz#71bb2ddf4ab891a389c8e5b70d8dedef4a9b1e83" - integrity sha512-F/jZ8YKJXqZj5qaDSmIauSBv/zybX85reAjuJMgBGj+gv/8FlQGvsvA0/8HPdjqDAQ2xIi4hRfe+CjZyDnxzvQ== + version "6.7.1" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-6.7.1.tgz#a3ec48d0f82556f5779dac1c278633c206ee97a6" + integrity sha512-3g4XqXmQxi+jjdi1ieoErwNjj1MbjxUumXug2xbF0Qkc1P+IkBNNktaBFTNRPHx6Se4qIcxj7p1vv6mAX6jAYQ== dependencies: axios "0.19.0" cli-color "1.4.0" uuid "3.3.3" "@nestjs/core@^6.2.4": - version "6.6.7" - resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-6.6.7.tgz#a0cb16157e0c670f714d460ba4a1dde8f4162b1c" - integrity sha512-SH3ZiG8+LruM3N1Csp87HocBmfn/BASwHAUkQdQxsNIBJanbOEjIc1HiPxXv0RXZMrXDM2Wt483VxZUtLsetLQ== + version "6.7.1" + resolved "https://registry.yarnpkg.com/@nestjs/core/-/core-6.7.1.tgz#c786db762157dce7e4f72df9c2ef71693ea7361d" + integrity sha512-qk1LBF37VQhiFw0FGY8e3Q90lJ1i7+vjlVOBpCQVL1qCWB2AZldiB9uscoDYkn1Ugf310LOylnlV+ghtwrfeng== dependencies: "@nuxtjs/opencollective" "0.2.2" - fast-safe-stringify "2.0.6" + fast-safe-stringify "2.0.7" iterare "1.2.0" object-hash "1.3.1" optional "0.1.4" uuid "3.3.3" "@nestjs/platform-express@^6.2.4": - version "6.6.7" - resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-6.6.7.tgz#8258a301b1b0ac99204d3623c6431edd16619f50" - integrity sha512-cflh5DqKF3ofhs2wWKij4JJ25fxJB0/04jLzX2WZDssU8FFPzlLg/mU+VoJqar6VT9taZl/Q6LnRGSjiRnXhUw== + version "6.7.1" + resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-6.7.1.tgz#236681d1dc96db68db06ef4660c27028fdb2adc0" + integrity sha512-il6ckjXx3vqNBkCD1lCn3zMEIMx5ygS5dAxlvdliYTJaPlZmKIQ+ERhUgRJR4yteV2NFjd6vcO++m6W2BCbPHw== dependencies: body-parser "1.19.0" cors "2.8.5" @@ -1521,9 +1621,9 @@ typescript "3.4.5" "@nestjs/testing@^6.2.4": - version "6.6.7" - resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-6.6.7.tgz#ee6df8b3cc1857dba037bbf4ac861b2fbc3bc266" - integrity sha512-SKP1aTnTKTKbzL7QqiVmQC3EEZH7javf67GZMuFkIJ5hVCEuc6FEdfV9iyCGH6hC/68ArCa8U8jbxt9+CbyPew== + version "6.7.1" + resolved "https://registry.yarnpkg.com/@nestjs/testing/-/testing-6.7.1.tgz#111bea47eb9a949cb6c6edd512026cb0c1d75627" + integrity sha512-5SrS/YSC46qVuw+rjvFSoaokCzIqtyTixSsrgbOc9x0yBYuWAw9HbMAPgAzTkpKkztjOW96ITbGx7P5r6+G1rg== dependencies: optional "0.1.4" @@ -1623,6 +1723,17 @@ universal-user-agent "^2.0.0" url-template "^2.0.8" +"@reach/router@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.2.1.tgz#34ae3541a5ac44fa7796e5506a5d7274a162be4e" + integrity sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ== + dependencies: + create-react-context "^0.2.1" + invariant "^2.2.3" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + warning "^3.0.0" + "@schematics/angular@8.3.3": version "8.3.3" resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-8.3.3.tgz#939f5a2ec78e7ca3aa768ab8f11df8d37a2b8a22" @@ -1660,6 +1771,319 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== +"@storybook/addon-actions@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.2.1.tgz#2096e7f938b289be48af6f0adfd620997e7a420c" + integrity sha512-tu4LGeRGAq+sLlsRPE1PzGyYU9JyM3HMLXnOCh5dvRSS8wnoDw1zQ55LPOXH6aoJGdsrvktiw+uTVf4OyN7ryg== + dependencies: + "@storybook/addons" "5.2.1" + "@storybook/api" "5.2.1" + "@storybook/client-api" "5.2.1" + "@storybook/components" "5.2.1" + "@storybook/core-events" "5.2.1" + "@storybook/theming" "5.2.1" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + polished "^3.3.1" + prop-types "^15.7.2" + react "^16.8.3" + react-inspector "^3.0.2" + uuid "^3.3.2" + +"@storybook/addon-knobs@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-5.2.1.tgz#6bc2f7e254ccce09d6f5136e9cce63cd808c9853" + integrity sha512-JCSqrGYyVVBNkudhvla7qc9m0/Mn1UMaMzIxH5kewEE1KWZcCkdXD5hDASN39pkn3mX1yyqveP8jiyIL9vVBLg== + dependencies: + "@storybook/addons" "5.2.1" + "@storybook/api" "5.2.1" + "@storybook/client-api" "5.2.1" + "@storybook/components" "5.2.1" + "@storybook/core-events" "5.2.1" + "@storybook/theming" "5.2.1" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + escape-html "^1.0.3" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.11" + prop-types "^15.7.2" + qs "^6.6.0" + react-color "^2.17.0" + react-lifecycles-compat "^3.0.4" + react-select "^3.0.0" + +"@storybook/addons@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.2.1.tgz#6e52aa1fa2737e170fb675eb1fcceebd0a915a0b" + integrity sha512-kdx97tTKsMf/lBlT40uLYsHMF1J71mn2j41RNaCXmWw/PrKCDmiNfinemN2wtbwRSvGqb3q/BAqjKLvUtWynGg== + dependencies: + "@storybook/api" "5.2.1" + "@storybook/channels" "5.2.1" + "@storybook/client-logger" "5.2.1" + "@storybook/core-events" "5.2.1" + core-js "^3.0.1" + global "^4.3.2" + util-deprecate "^1.0.2" + +"@storybook/api@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.2.1.tgz#b9cd6639019e044a8ade6fb358cade79c0e3b5d3" + integrity sha512-EXN6sqkGHRuNq0W6BZXOlxe2I2dmN0yUdQLiUOpzH2I3mXnVHpad/0v76dRc9fZbC4LaYUSxR8lBTr0rqIb4mA== + dependencies: + "@storybook/channels" "5.2.1" + "@storybook/client-logger" "5.2.1" + "@storybook/core-events" "5.2.1" + "@storybook/router" "5.2.1" + "@storybook/theming" "5.2.1" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.11" + memoizerific "^1.11.3" + prop-types "^15.6.2" + react "^16.8.3" + semver "^6.0.0" + shallow-equal "^1.1.0" + store2 "^2.7.1" + telejson "^2.2.2" + util-deprecate "^1.0.2" + +"@storybook/channel-postmessage@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.2.1.tgz#85541f926d61eedbe2a687bb394d37fc06252751" + integrity sha512-gmnn9qU1iLCpfF6bZuEM3QQOZsAviWeIpiezjrd/qkxatgr3qtbXd4EoZpcVuQw314etarWtNxVpcX6PXcASjQ== + dependencies: + "@storybook/channels" "5.2.1" + "@storybook/client-logger" "5.2.1" + core-js "^3.0.1" + global "^4.3.2" + telejson "^2.2.2" + +"@storybook/channels@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.2.1.tgz#e5e35f6d9fb1b1fba4f18b171f31d5f6540f3bef" + integrity sha512-AsF/Hwx91SDOgiOGOBSWS8EJAgqVm939n2nkfdLSJQQmX5EdPRAc3EIE3f13tyQub2yNx0OR4UzQDWgjwfVsEQ== + dependencies: + core-js "^3.0.1" + +"@storybook/client-api@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.2.1.tgz#bdd335187279a4ab45e20d6d5e9131e5f7098acf" + integrity sha512-VxexqxrbORCGqwx2j0/91Eu1A/vq+rSVIesWwzIowmoLfBwRwDdskO20Yn9U7iMSpux4RvHGF6y1Q1ZtnXm9aA== + dependencies: + "@storybook/addons" "5.2.1" + "@storybook/channel-postmessage" "5.2.1" + "@storybook/channels" "5.2.1" + "@storybook/client-logger" "5.2.1" + "@storybook/core-events" "5.2.1" + "@storybook/router" "5.2.1" + common-tags "^1.8.0" + core-js "^3.0.1" + eventemitter3 "^4.0.0" + global "^4.3.2" + is-plain-object "^3.0.0" + lodash "^4.17.11" + memoizerific "^1.11.3" + qs "^6.6.0" + util-deprecate "^1.0.2" + +"@storybook/client-logger@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.2.1.tgz#5c1f122b65386f04a6ad648808dfa89f2d852d7a" + integrity sha512-wzxSE9t3DaLCdd/gnGFnjevmYRZ92F3TEwhUP/QDXM9cZkNsRKHkjE61qjiO5aQPaZQG6Ea9ayWEQEMgZXDucg== + dependencies: + core-js "^3.0.1" + +"@storybook/components@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.2.1.tgz#a4519c5d435c2c25c481e2b64a768e1e568a223f" + integrity sha512-cik5J/mTm1b1TOI17qM+2Mikk3rjb3SbBD4WlNz3Zvn+Hw0ukgbx6kQwVBgujhMlDtsHreidyEgIg4TM13S0Tg== + dependencies: + "@storybook/client-logger" "5.2.1" + "@storybook/theming" "5.2.1" + "@types/react-syntax-highlighter" "10.1.0" + core-js "^3.0.1" + global "^4.3.2" + markdown-to-jsx "^6.9.1" + memoizerific "^1.11.3" + polished "^3.3.1" + popper.js "^1.14.7" + prop-types "^15.7.2" + react "^16.8.3" + react-dom "^16.8.3" + react-focus-lock "^1.18.3" + react-helmet-async "^1.0.2" + react-popper-tooltip "^2.8.3" + react-syntax-highlighter "^8.0.1" + react-textarea-autosize "^7.1.0" + simplebar-react "^1.0.0-alpha.6" + +"@storybook/core-events@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.2.1.tgz#bc28d704938d26dd544d0362d38ef08e8cfed916" + integrity sha512-AIYV/I+baQ0KxvEM7QAKqUedLn2os0XU9HTdtfZJTC3U9wjmR2ah2ScD6T0n7PBz3MderkvZG6dNjs9h8gRquQ== + dependencies: + core-js "^3.0.1" + +"@storybook/core@^5.2.0": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.2.1.tgz#3aa17c6fa9b02704723501d32884453869e3c06c" + integrity sha512-mGGvN3GWeLxZ9lYZ4IuD1IoJD+cn6XXm2Arzw+k6KEtJJDFrC5SjESTDGLVFienX5s2tgH4FjYb9Ps9sKfhHlg== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.3.3" + "@babel/plugin-proposal-object-rest-spread" "^7.3.2" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-transform-react-constant-elements" "^7.2.0" + "@babel/preset-env" "^7.4.5" + "@storybook/addons" "5.2.1" + "@storybook/channel-postmessage" "5.2.1" + "@storybook/client-api" "5.2.1" + "@storybook/client-logger" "5.2.1" + "@storybook/core-events" "5.2.1" + "@storybook/node-logger" "5.2.1" + "@storybook/router" "5.2.1" + "@storybook/theming" "5.2.1" + "@storybook/ui" "5.2.1" + airbnb-js-shims "^1 || ^2" + ansi-to-html "^0.6.11" + autoprefixer "^9.4.9" + babel-plugin-add-react-displayname "^0.0.5" + babel-plugin-emotion "^10.0.14" + babel-plugin-macros "^2.4.5" + babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" + boxen "^3.0.0" + case-sensitive-paths-webpack-plugin "^2.2.0" + chalk "^2.4.2" + cli-table3 "0.5.1" + commander "^2.19.0" + common-tags "^1.8.0" + core-js "^3.0.1" + corejs-upgrade-webpack-plugin "^2.2.0" + css-loader "^3.0.0" + detect-port "^1.3.0" + dotenv-webpack "^1.7.0" + ejs "^2.6.1" + express "^4.17.0" + file-loader "^3.0.1" + file-system-cache "^1.0.5" + find-cache-dir "^3.0.0" + fs-extra "^8.0.1" + global "^4.3.2" + html-webpack-plugin "^4.0.0-beta.2" + inquirer "^6.2.0" + interpret "^1.2.0" + ip "^1.1.5" + json5 "^2.1.0" + lazy-universal-dotenv "^3.0.1" + node-fetch "^2.6.0" + open "^6.1.0" + pnp-webpack-plugin "1.4.3" + postcss-flexbugs-fixes "^4.1.0" + postcss-loader "^3.0.0" + pretty-hrtime "^1.0.3" + qs "^6.6.0" + raw-loader "^2.0.0" + react-dev-utils "^9.0.0" + regenerator-runtime "^0.12.1" + resolve "^1.11.0" + resolve-from "^5.0.0" + semver "^6.0.0" + serve-favicon "^2.5.0" + shelljs "^0.8.3" + style-loader "^0.23.1" + terser-webpack-plugin "^1.2.4" + unfetch "^4.1.0" + url-loader "^2.0.1" + util-deprecate "^1.0.2" + webpack "^4.33.0" + webpack-dev-middleware "^3.7.0" + webpack-hot-middleware "^2.25.0" + +"@storybook/node-logger@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.2.1.tgz#00d8c0dc9dfd482e7d1d244a59c46726c6b761d9" + integrity sha512-rz+snXZyKwTegKEf15w4uaFWIKpgaWzTw+Ar8mxa+mX7C2DP65TOc+JGYZ7lsXdred+0WP0DhnmhGu2cX8z3lA== + dependencies: + chalk "^2.4.2" + core-js "^3.0.1" + npmlog "^4.1.2" + pretty-hrtime "^1.0.3" + regenerator-runtime "^0.12.1" + +"@storybook/router@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.2.1.tgz#9c49df79343d3be10c7f984858fb5c9ae3eb7491" + integrity sha512-Mlk275cyPoKtnP4DwQ5D8gTfnaRPL6kDZOSn0wbTMa6pQOfYKgJsa7tjzeAtZuZ/j8hKI4gAfT/auMgH6g+94A== + dependencies: + "@reach/router" "^1.2.1" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.11" + memoizerific "^1.11.3" + qs "^6.6.0" + +"@storybook/theming@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.2.1.tgz#913e383632e4702035a107c2cc5e5cb27231b389" + integrity sha512-lbAfcyI7Tx8swduIPmlu/jdWzqTBN/v82IEQbZbPR4LS5OHRPmhXPNgFGrcH4kFAiD0GoezSsdum1x0ZZpsQUQ== + dependencies: + "@emotion/core" "^10.0.14" + "@emotion/styled" "^10.0.14" + "@storybook/client-logger" "5.2.1" + common-tags "^1.8.0" + core-js "^3.0.1" + deep-object-diff "^1.1.0" + emotion-theming "^10.0.14" + global "^4.3.2" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + resolve-from "^5.0.0" + +"@storybook/ui@5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.2.1.tgz#ceba1657a232efd10f839027f8ae274e370c89f6" + integrity sha512-h6Yf1ro/nZcz4nQAU+eSVPxVmpqv7uT7RMb3Vz+VLTY59IEA/sWcoIgA4MIxwf14nVcWOqSmVBJzNKWwc+NGJw== + dependencies: + "@storybook/addon-actions" "5.2.1" + "@storybook/addon-knobs" "5.2.1" + "@storybook/addons" "5.2.1" + "@storybook/api" "5.2.1" + "@storybook/channels" "5.2.1" + "@storybook/client-logger" "5.2.1" + "@storybook/components" "5.2.1" + "@storybook/core-events" "5.2.1" + "@storybook/router" "5.2.1" + "@storybook/theming" "5.2.1" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + core-js-pure "^3.0.1" + emotion-theming "^10.0.14" + fast-deep-equal "^2.0.1" + fuse.js "^3.4.4" + global "^4.3.2" + lodash "^4.17.11" + markdown-to-jsx "^6.9.3" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + qs "^6.6.0" + react "^16.8.3" + react-dom "^16.8.3" + react-draggable "^3.3.2" + react-helmet-async "^1.0.2" + react-hotkeys "2.0.0-pre4" + react-sizeme "^2.6.7" + regenerator-runtime "^0.13.2" + resolve-from "^5.0.0" + semver "^6.0.0" + store2 "^2.7.1" + telejson "^2.2.2" + util-deprecate "^1.0.2" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -1861,7 +2285,7 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^12.0.2": +"@types/node@*", "@types/node@^12.0.2", "@types/node@^12.7.5": version "12.7.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f" integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w== @@ -1901,6 +2325,14 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== +"@types/reach__router@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.2.4.tgz#44a701fdf15934880f6dfdef38ca49bc30e2d372" + integrity sha512-a+MFhebeSGi0LwHZ0UhH/ke77rWtNQnt8YmaHnquSaY3HmyEi+BPQi3GhPcUPnC9X5BLw/qORw3BPxGb1mCtEw== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-dom@*": version "16.9.1" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.1.tgz#79206237cba9532a9f870b1cd5428bef6b66378c" @@ -1932,6 +2364,13 @@ "@types/history" "*" "@types/react" "*" +"@types/react-syntax-highlighter@10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-10.1.0.tgz#9c534e29bbe05dba9beae1234f3ae944836685d4" + integrity sha512-dF49hC4FZp1dIKyzacOrHvqMUe8U2IXyQCQXOcT1e6n64gLBp+xM6qGtPsThIT9XjiIHSg2W5Jc2V5IqekBfnA== + dependencies: + "@types/react" "*" + "@types/react@*": version "16.9.2" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.2.tgz#6d1765431a1ad1877979013906731aae373de268" @@ -2339,6 +2778,16 @@ add-stream@^1.0.0: resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= +address@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.0.tgz#ef8e047847fcd2c5b6f50c16965f924fd99fe709" + integrity sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ== + +address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -2365,6 +2814,29 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +"airbnb-js-shims@^1 || ^2": + version "2.2.0" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.0.tgz#46e1d9d9516f704ef736de76a3b6d484df9a96d8" + integrity sha512-pcSQf1+Kx7/0ibRmxj6rmMYc5V8SHlKu+rkQ80h0bjSLDaIxHg/3PiiFJi4A9mDc01CoBHoc8Fls2G/W0/+s5g== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + array.prototype.flatmap "^1.2.1" + es5-shim "^4.5.13" + es6-shim "^0.35.5" + function.prototype.name "^1.1.0" + globalthis "^1.0.0" + object.entries "^1.1.0" + object.fromentries "^2.0.0 || ^1.0.0" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.1.0" + promise.allsettled "^1.0.0" + promise.prototype.finally "^3.1.0" + string.prototype.matchall "^3.0.1" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + symbol.prototype.description "^1.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -2492,6 +2964,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-to-html@^0.6.11: + version "0.6.11" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.11.tgz#5093fc4962186c0e9343dec572a4f71abdc93439" + integrity sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA== + dependencies: + entities "^1.1.1" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2500,7 +2979,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.1: +anymatch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.0.tgz#e609350e50a9313b472789b2f14ef35808ee14d6" integrity sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA== @@ -2508,6 +2987,11 @@ anymatch@^3.0.1: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-dir@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" + integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + app-root-path@^2.0.1, app-root-path@^2.1.0: version "2.2.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" @@ -2595,6 +3079,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -2623,6 +3112,16 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -2650,6 +3149,24 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" + integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + +array.prototype.flatmap@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.1.tgz#3103cd4826ef90019c9b0a4839b2535fa6faf4e9" + integrity sha512-i18e2APdsiezkcqDyZor78Pbfjfds3S94dG6dgIV2ZASJaUf1N0dz2tGdrmwrmlZuNUgxH+wz6Z0zYVH2c5xzQ== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.10.0" + function-bind "^1.1.1" + arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -2786,7 +3303,7 @@ autodll-webpack-plugin@0.4.2: webpack-merge "^4.1.0" webpack-sources "^1.0.1" -autoprefixer@9.6.1, autoprefixer@^9.6.0: +autoprefixer@9.6.1, autoprefixer@^9.4.9, autoprefixer@^9.6.0: version "9.6.1" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw== @@ -2906,6 +3423,11 @@ babel-helper-define-map@^6.24.1: babel-types "^6.26.0" lodash "^4.17.4" +babel-helper-evaluate-path@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" + integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== + babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" @@ -2915,6 +3437,11 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-flip-expressions@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" + integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= + babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -2942,6 +3469,21 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-helper-is-nodes-equiv@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" + integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= + +babel-helper-is-void-0@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" + integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= + babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" @@ -2970,6 +3512,11 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= + babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" @@ -2982,6 +3529,11 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-to-multiple-sequence-expressions@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" + integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== + babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -3020,6 +3572,11 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-add-react-displayname@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" + integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= + babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" @@ -3034,6 +3591,22 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" +babel-plugin-emotion@^10.0.14, babel-plugin-emotion@^10.0.17: + version "10.0.19" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.19.tgz#67b9b213f7505c015f163a387a005c12c502b1de" + integrity sha512-1pJb5uKN/gx6bi3gGr588Krj49sxARI9KmxhtMUa+NRJb6lR3OfC51mh3NlWRsOqdjWlT4cSjnZpnFq5K3T5ZA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@emotion/hash" "0.7.3" + "@emotion/memoize" "0.7.3" + "@emotion/serialize" "^0.11.11" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + babel-plugin-istanbul@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -3051,7 +3624,7 @@ babel-plugin-jest-hoist@^24.9.0: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@2.6.1: +babel-plugin-macros@2.6.1, babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.4.5: version "2.6.1" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181" integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ== @@ -3060,6 +3633,82 @@ babel-plugin-macros@2.6.1: cosmiconfig "^5.2.0" resolve "^1.10.0" +babel-plugin-minify-builtins@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" + integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== + +babel-plugin-minify-constant-folding@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" + integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-minify-dead-code-elimination@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" + integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + lodash "^4.17.11" + +babel-plugin-minify-flip-comparisons@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" + integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-minify-guarded-expressions@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" + integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + +babel-plugin-minify-infinity@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" + integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= + +babel-plugin-minify-mangle-names@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" + integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== + dependencies: + babel-helper-mark-eval-scopes "^0.4.3" + +babel-plugin-minify-numeric-literals@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" + integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= + +babel-plugin-minify-replace@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" + integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== + +babel-plugin-minify-simplify@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" + integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + babel-helper-is-nodes-equiv "^0.0.1" + babel-helper-to-multiple-sequence-expressions "^0.5.0" + +babel-plugin-minify-type-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" + integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= + dependencies: + babel-helper-is-void-0 "^0.4.3" + "babel-plugin-styled-components@>= 1": version "1.10.6" resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz#f8782953751115faf09a9f92431436912c34006b" @@ -3311,6 +3960,33 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-inline-consecutive-adds@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" + integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= + +babel-plugin-transform-member-expression-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" + integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= + +babel-plugin-transform-merge-sibling-variables@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" + integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= + +babel-plugin-transform-minify-booleans@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" + integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= + +babel-plugin-transform-property-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" + integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= + dependencies: + esutils "^2.0.2" + babel-plugin-transform-react-remove-prop-types@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" @@ -3323,6 +3999,33 @@ babel-plugin-transform-regenerator@^6.22.0: dependencies: regenerator-transform "^0.10.0" +babel-plugin-transform-regexp-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" + integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= + +babel-plugin-transform-remove-console@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" + integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= + +babel-plugin-transform-remove-debugger@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" + integrity sha1-QrcnYxyXl44estGZp67IShgznvI= + +babel-plugin-transform-remove-undefined@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" + integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-transform-simplify-comparison-operators@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" + integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= + babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" @@ -3331,6 +4034,11 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-plugin-transform-undefined-to-void@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" + integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= + babel-preset-env@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" @@ -3375,6 +4083,35 @@ babel-preset-jest@^24.9.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.9.0" +"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" + integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== + dependencies: + babel-plugin-minify-builtins "^0.5.0" + babel-plugin-minify-constant-folding "^0.5.0" + babel-plugin-minify-dead-code-elimination "^0.5.1" + babel-plugin-minify-flip-comparisons "^0.4.3" + babel-plugin-minify-guarded-expressions "^0.4.4" + babel-plugin-minify-infinity "^0.4.3" + babel-plugin-minify-mangle-names "^0.5.0" + babel-plugin-minify-numeric-literals "^0.4.3" + babel-plugin-minify-replace "^0.5.0" + babel-plugin-minify-simplify "^0.5.1" + babel-plugin-minify-type-constructors "^0.4.3" + babel-plugin-transform-inline-consecutive-adds "^0.4.3" + babel-plugin-transform-member-expression-literals "^6.9.4" + babel-plugin-transform-merge-sibling-variables "^6.9.4" + babel-plugin-transform-minify-booleans "^6.9.4" + babel-plugin-transform-property-literals "^6.9.4" + babel-plugin-transform-regexp-constructors "^0.4.3" + babel-plugin-transform-remove-console "^6.9.4" + babel-plugin-transform-remove-debugger "^6.9.4" + babel-plugin-transform-remove-undefined "^0.5.0" + babel-plugin-transform-simplify-comparison-operators "^6.9.4" + babel-plugin-transform-undefined-to-void "^6.9.4" + lodash "^4.17.11" + babel-register@6.26.0, babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -3475,6 +4212,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch-processor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" + integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -3529,7 +4271,7 @@ bluebird@3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= -bluebird@^3.3.0, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@^3.3.0, bluebird@^3.3.5, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== @@ -4023,7 +4765,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@3.0.x: +camel-case@3.0.x, camel-case@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= @@ -4068,6 +4810,11 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= +can-use-dom@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" + integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -4105,6 +4852,11 @@ capture-stack-trace@^1.0.0: resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz#3371ef6365ef9c25fa4b81c16ace0e9c7dc58c3e" + integrity sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -4139,6 +4891,21 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +character-entities-legacy@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" + integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== + +character-entities@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" + integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== + +character-reference-invalid@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" + integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -4150,11 +4917,11 @@ check-more-types@2.24.0: integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= "chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" - integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.1.0.tgz#ff23d077682a90eadd209bfa76eb10ed6d359668" + integrity sha512-6vZfo+7W0EOlbSo0nhVKMz4yyssrwiPbBZ8wj1lq8/+l4ZhGZ2U4Md7PspvmijXp1a26D3B7AHEBmIB7aVtaOQ== dependencies: - anymatch "^3.0.1" + anymatch "^3.1.0" braces "^3.0.2" glob-parent "^5.0.0" is-binary-path "^2.1.0" @@ -4228,7 +4995,12 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.2.1, clean-css@4.2.x, clean-css@^4.1.11: +classnames@^2.2.5: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@4.2.1, clean-css@4.2.x, clean-css@^4.1.11, clean-css@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== @@ -4288,6 +5060,16 @@ cli-spinners@^1.0.1, cli-spinners@^1.1.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-table3@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -4301,6 +5083,15 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +clipboard@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" + integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -4440,7 +5231,7 @@ colors@1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= -colors@^1.1.0, colors@^1.3.3: +colors@^1.1.0, colors@^1.1.2, colors@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== @@ -4452,6 +5243,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" + integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== + commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -4500,7 +5296,7 @@ commitizen@^4.0.3: strip-bom "4.0.0" strip-json-comments "3.0.1" -common-tags@1.8.0: +common-tags@1.8.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -4967,6 +5763,13 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +copy-to-clipboard@^3.0.8: + version "3.2.0" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.2.0.tgz#d2724a3ccbfed89706fac8a894872c979ac74467" + integrity sha512-eOZERzvCmxS8HWzugj4Uxl8OJxa7T2k1Gi0X5qavwydHIfuSHq2dTD09LOg/XyGq4Zpb5IsR/2OJ5lbOegz78w== + dependencies: + toggle-selection "^1.0.6" + copy-webpack-plugin@5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.0.3.tgz#2179e3c8fd69f13afe74da338896f1f01a875b5c" @@ -5011,13 +5814,23 @@ core-js-compat@^3.1.1: browserslist "^4.6.6" semver "^6.3.0" -core-js@3.2.1: +core-js-pure@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.2.1.tgz#879a23699cff46175bfd2d09158b5c50645a3c45" + integrity sha512-+qpvnYrsi/JDeQTArB7NnNc2VoMYLE1YSkziCDHgjexC2KH7OFiGhLUd3urxfyWmNjSwSW7NYXPWHMhuIJx9Ow== + +core-js@3.2.1, core-js@^3.0.1, core-js@^3.0.4: version "3.2.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== -core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: - version "2.6.9" +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5, core-js@^2.6.9: + version "2.6.9" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== @@ -5026,6 +5839,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +corejs-upgrade-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" + integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== + dependencies: + resolve-from "^5.0.0" + webpack "^4.38.0" + cors@2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -5113,16 +5934,23 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= +create-react-context@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3" + integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag== dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" + fbjs "^0.8.0" + gud "^1.0.0" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +create-react-context@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -5133,6 +5961,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -5191,6 +6028,24 @@ css-loader@1.0.0: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" +css-loader@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" + integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.17" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.0" + schema-utils "^2.0.0" + css-modules-loader-core@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16" @@ -5311,6 +6166,11 @@ cssesc@^2.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + cssnano-preset-default@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" @@ -5398,7 +6258,7 @@ cssstyle@^1.0.0, cssstyle@^1.1.1: dependencies: cssom "0.3.x" -csstype@^2.2.0: +csstype@^2.2.0, csstype@^2.5.7: version "2.6.6" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41" integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg== @@ -5553,7 +6413,7 @@ debug@*, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -5657,10 +6517,10 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== +deep-object-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" + integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== default-gateway@^2.6.0: version "2.7.2" @@ -5756,6 +6616,11 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -5821,6 +6686,22 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + devalue@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/devalue/-/devalue-2.0.0.tgz#2afa0b7c1bb35bebbef792498150663fdcd33c68" @@ -5954,6 +6835,13 @@ dom-converter@^0.2: dependencies: utila "~0.4" +dom-helpers@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" + integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== + dependencies: + "@babel/runtime" "^7.1.2" + dom-serialize@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" @@ -5972,6 +6860,11 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -6031,11 +6924,35 @@ dot-prop@^4.1.0, dot-prop@^4.1.1: dependencies: is-obj "^1.0.0" -dotenv@6.2.0: +dotenv-defaults@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.0.2.tgz#441cf5f067653fca4bbdce9dd3b803f6f84c585d" + integrity sha512-iXFvHtXl/hZPiFj++1hBg4lbKwGM+t/GlvELDnRtOFdjXyWP7mubkVr+eZGWG62kdsbulXAef6v/j6kiWc/xGA== + dependencies: + dotenv "^6.2.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv-webpack@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz#4384d8c57ee6f405c296278c14a9f9167856d3a1" + integrity sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw== + dependencies: + dotenv-defaults "^1.0.2" + +dotenv@6.2.0, dotenv@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== +dotenv@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.1.0.tgz#d811e178652bfb8a1e593c6dd704ec7e90d85ea2" + integrity sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA== + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -6069,21 +6986,28 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.5.7: +ejs@^2.5.7, ejs@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== electron-to-chromium@^1.3.191, electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.47: - version "1.3.255" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.255.tgz#9f4b4f9ffd559dd7a81fef962186fc918d118b66" - integrity sha512-SZ6NlaNw3h4WR5kA1BK8XltdJCax02P+lW+z78RYoLDqmpyYuDQ5bS+/O6MCJ/j761qoZIFox2qYYt+UwqGA5w== + version "1.3.260" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.260.tgz#ffd686b4810bab0e1a428e7af5f08c21fe7c1fa2" + integrity sha512-wGt+OivF1C1MPwaSv3LJ96ebNbLAWlx3HndivDDWqwIVSQxmhL17Y/YmwUdEMtS/bPyommELt47Dct0/VZNQBQ== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= +element-resize-detector@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.1.15.tgz#48eba1a2eaa26969a4c998d972171128c971d8d2" + integrity sha512-16/5avDegXlUxytGgaumhjyQoM6hpp5j3+L79sYq5hlXfTNRy5WMMuTVWkZU3egp/CokCmTmvf18P3KeB57Iog== + dependencies: + batch-processor "^1.0.0" + elliptic@^6.0.0: version "6.5.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" @@ -6112,6 +7036,15 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emotion-theming@^10.0.14: + version "10.0.19" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.19.tgz#66d13db74fccaefad71ba57c915b306cf2250295" + integrity sha512-dQRBPLAAQ6eA8JKhkLCIWC8fdjPbiNC1zNTdFF292h9amhZXofcNGUP7axHoHX4XesqQESYwZrXp53OPInMrKw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/weak-memoize" "0.2.4" + hoist-non-react-statics "^3.3.0" + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -6214,7 +7147,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: +es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.14.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== @@ -6248,6 +7181,11 @@ es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@ es6-symbol "~3.1.1" next-tick "^1.0.0" +es5-shim@^4.5.13: + version "4.5.13" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.13.tgz#5d88062de049f8969f83783f4a4884395f21d28b" + integrity sha512-xi6hh6gsvDE0MaW4Vp1lgNEBpVcCXRWfPXj5egDvtgLz4L9MEvNwYEMdJH+JJinWkwa8c3c3o5HduV7dB/e1Hw== + es6-iterator@^2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -6269,6 +7207,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-shim@^0.35.5: + version "0.35.5" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" + integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== + es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.2.tgz#859fdd34f32e905ff06d752e7171ddd4444a7ed1" @@ -6287,12 +7230,12 @@ es6-weak-map@^2.0.2: es6-iterator "^2.0.3" es6-symbol "^3.1.1" -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -6521,6 +7464,11 @@ eventemitter3@^3.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" @@ -6661,7 +7609,7 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -express@4.17.1, express@^4.16.2, express@^4.17.1: +express@4.17.1, express@^4.16.2, express@^4.17.0, express@^4.17.1: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== @@ -6816,10 +7764,10 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-safe-stringify@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2" - integrity sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg== +fast-safe-stringify@2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== fastparse@^1.1.1: version "1.1.2" @@ -6833,6 +7781,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.0" +fault@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.3.tgz#4da88cf979b6b792b4e13c7ec836767725170b7e" + integrity sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA== + dependencies: + format "^0.2.2" + faye-websocket@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" @@ -6854,6 +7809,19 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +fbjs@^0.8.0: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + fd-slicer@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" @@ -6910,6 +7878,23 @@ file-loader@4.2.0: loader-utils "^1.2.3" schema-utils "^2.0.0" +file-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" + integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== + dependencies: + loader-utils "^1.0.2" + schema-utils "^1.0.0" + +file-system-cache@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" + integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= + dependencies: + bluebird "^3.3.5" + fs-extra "^0.30.0" + ramda "^0.21.0" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -6923,6 +7908,11 @@ fileset@^2.0.3: glob "^7.0.3" minimatch "^3.0.3" +filesize@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + filesize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.1.2.tgz#fcd570af1353cea97897be64f56183adb995994b" @@ -7009,7 +7999,7 @@ find-parent-dir@^0.3.0: resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= -find-root@1.1.0: +find-root@1.1.0, find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== @@ -7021,6 +8011,13 @@ find-up@2.1.0, find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.0.0.tgz#c367f8024de92efb75f2d4906536d24682065c3a" @@ -7036,13 +8033,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -7083,6 +8073,11 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +focus-lock@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.5.tgz#f6eb37832a9b1b205406175f5277396a28c0fce1" + integrity sha512-i/mVBOoa9o+tl+u9owOJUF8k8L85odZNIsctB+JAK2HFT8jckiBwmk+3uydlm6FN8czgnkIwQtBv6yyAbrzXjw== + follow-redirects@1.5.10: version "1.5.10" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" @@ -7140,6 +8135,20 @@ fork-ts-checker-webpack-plugin@1.3.4: tapable "^1.0.0" worker-rpc "^0.1.0" +fork-ts-checker-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" + integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^2.0.4" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + fork-ts-checker-webpack-plugin@^0.4.9: version "0.4.15" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.4.15.tgz#7cd9f94f3dd58cd1fe8f953f876e72090eda3f6d" @@ -7163,6 +8172,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +format@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -7213,7 +8227,7 @@ fs-extra@7.0.1, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@8.1.0, fs-extra@^8.0.0, fs-extra@^8.1.0: +fs-extra@8.1.0, fs-extra@^8.0.0, fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -7222,12 +8236,23 @@ fs-extra@8.1.0, fs-extra@^8.0.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" @@ -7262,11 +8287,31 @@ function-bind@^1.0.2, function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" + integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + functions-have-names "^1.1.1" + is-callable "^1.1.4" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.1.1.tgz#79d35927f07b8e7103d819fed475b64ccf7225ea" + integrity sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw== + +fuse.js@^3.4.4: + version "3.4.5" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.4.5.tgz#8954fb43f9729bd5dbcb8c08f251db552595a7a6" + integrity sha512-s9PGTaQIkT69HaeoTVjwGsLfb8V8ScJLx5XGFcKHg0MqLUH/UZ4EKOtqtXX9k7AFqCGxD1aJmYb8Q5VYDibVRQ== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -7480,6 +8525,13 @@ global-dirs@^0.1.0, global-dirs@^0.1.1: dependencies: ini "^1.3.4" +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -7500,6 +8552,23 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -7510,6 +8579,15 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globalthis@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.0.tgz#c5fb98213a9b4595f59cf3e7074f141b4169daae" + integrity sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + object-keys "^1.0.12" + globby@8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" @@ -7523,6 +8601,19 @@ globby@8.0.1: pify "^3.0.0" slash "^1.0.0" +globby@8.0.2, globby@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + globby@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" @@ -7560,18 +8651,12 @@ globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -globby@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: - array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" + delegate "^3.1.2" got@8.3.2: version "8.3.2" @@ -7630,7 +8715,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== @@ -7650,7 +8735,7 @@ gud@^1.0.0: resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== -gzip-size@^5.1.1: +gzip-size@5.1.1, gzip-size@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== @@ -7802,7 +8887,22 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.2.x: +hast-util-parse-selector@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz#66aabccb252c47d94975f50a281446955160380b" + integrity sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw== + +hastscript@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.0.tgz#a19b3cca6a26a2bcd0f1b1eac574af9427c1c7df" + integrity sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^5.0.1" + space-separated-tokens "^1.0.0" + +he@1.2.x, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -7812,17 +8912,22 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +highlight.js@~9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= + history@^4.9.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/history/-/history-4.9.0.tgz#84587c2068039ead8af769e9d6a6860a14fa1bca" - integrity sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA== + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== dependencies: "@babel/runtime" "^7.1.2" loose-envify "^1.2.0" - resolve-pathname "^2.2.0" + resolve-pathname "^3.0.0" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" - value-equal "^0.4.0" + value-equal "^1.0.1" hmac-drbg@^1.0.0: version "1.0.1" @@ -7833,7 +8938,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== @@ -7910,6 +9015,19 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.4.x" +html-minifier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" + integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== + dependencies: + camel-case "^3.0.0" + clean-css "^4.2.1" + commander "^2.19.0" + he "^1.2.0" + param-case "^2.1.1" + relateurl "^0.2.7" + uglify-js "^3.5.1" + html-webpack-plugin@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" @@ -7923,6 +9041,18 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" +html-webpack-plugin@^4.0.0-beta.2: + version "4.0.0-beta.8" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.8.tgz#d9a8d4322d8cf310f1568f6f4f585a80df0ad378" + integrity sha512-n5S2hJi3/vioRvEDswZP2WFgZU8TUqFoYIrkg5dt+xDC4TigQEhIcl4Y81Qs2La/EqKWuJZP8+ikbHGVmzQ4Mg== + dependencies: + html-minifier "^4.0.0" + loader-utils "^1.2.3" + lodash "^4.17.11" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + htmlparser2@^3.3.0: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -8089,6 +9219,13 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" @@ -8138,6 +9275,11 @@ image-size@~0.5.0: resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= +immer@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== + import-cwd@^2.0.0, import-cwd@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -8236,7 +9378,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@1.3.5, ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@1.3.5, ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -8303,7 +9445,7 @@ inquirer@6.5.1: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.4.1: +inquirer@^6.2.0, inquirer@^6.4.1: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -8338,7 +9480,7 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@^1.0.0: +interpret@^1.0.0, interpret@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== @@ -8351,7 +9493,7 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.2.2, invariant@^2.2.4: +invariant@2.2.4, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -8394,9 +9536,9 @@ is-absolute-url@^2.0.0: integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= is-absolute-url@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.1.tgz#e315cbdcbbc3d6789532d591954ac78a0e5049f6" - integrity sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.2.tgz#554f2933e7385cc46e94351977ca2081170a206e" + integrity sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA== is-absolute@^1.0.0: version "1.0.0" @@ -8420,6 +9562,19 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" + integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== + +is-alphanumerical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" + integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arguments@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" @@ -8509,6 +9664,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-decimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" + integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -8532,6 +9692,14 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-dom@^1.0.9: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" + integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== + dependencies: + is-object "^1.0.1" + is-window "^1.0.2" + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -8590,6 +9758,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -8616,6 +9789,11 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" + integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== + is-installed-globally@0.1.0, is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -8728,6 +9906,13 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" + integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== + dependencies: + isobject "^4.0.0" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -8779,7 +9964,12 @@ is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== -is-stream@^1.0.0, is-stream@^1.1.0: +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -8839,6 +10029,11 @@ is-what@^3.3.1: resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.3.1.tgz#79502181f40226e2d8c09226999db90ef7c1bcbe" integrity sha512-seFn10yAXy+yJlTRO+8VfiafC+0QJanGLMPTBWLrJm/QPauuchy0UXh8B6H5o9VA8BAzk0iYievt6mNp6gfaqA== +is-window@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" + integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -8893,6 +10088,19 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isobject@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" + integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -9596,6 +10804,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -9603,6 +10818,11 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -9755,6 +10975,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + optionalDependencies: + graceful-fs "^4.1.9" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -9792,6 +11019,17 @@ lazy-cache@^0.2.3: resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= +lazy-universal-dotenv@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" + integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== + dependencies: + "@babel/runtime" "^7.5.0" + app-root-dir "^1.0.2" + core-js "^3.0.4" + dotenv "^8.0.0" + dotenv-expand "^5.1.0" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -10051,6 +11289,11 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -10061,7 +11304,7 @@ lodash.map@^4.5.1: resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= -lodash.memoize@^4.1.2: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= @@ -10096,6 +11339,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= + lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" @@ -10116,7 +11364,7 @@ lodash@4.17.14: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== -lodash@4.17.15, lodash@^4.14.14, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0: +lodash@4.17.15, lodash@^4.0.1, lodash@^4.14.14, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -10204,6 +11452,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowlight@~1.9.1: + version "1.9.2" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.2.tgz#0b9127e3cec2c3021b7795dd81005c709a42fdd1" + integrity sha512-Ek18ElVCf/wF/jEm1b92gTnigh94CtBNWiZ2ad+vTgW7cTmQxUY3I98BjHK68gZAJEWmybGBZgx9qv3QxLQB/Q== + dependencies: + fault "^1.0.2" + highlight.js "~9.12.0" + lru-cache@4.1.x, lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -10321,6 +11577,11 @@ map-obj@^2.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= +map-or-similar@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" + integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -10328,6 +11589,19 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-to-jsx@^6.9.1, markdown-to-jsx@^6.9.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.10.3.tgz#7f0946684acd321125ff2de7fd258a9b9c7c40b7" + integrity sha512-PSoUyLnW/xoW6RsxZrquSSz5eGEOTwa15H5eqp3enmrp8esmgDJmhzd6zmQ9tgAA9TxJzx1Hmf3incYU/IamoQ== + dependencies: + prop-types "^15.6.2" + unquote "^1.1.0" + +material-colors@^1.2.1: + version "1.2.6" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" + integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== + math-random@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" @@ -10392,7 +11666,14 @@ memoizee@^0.4.14: next-tick "1" timers-ext "^0.1.5" -memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: +memoizerific@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" + integrity sha1-fIekZGREwy11Q4VwkF8tvRsagFo= + dependencies: + map-or-similar "^1.5.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -10454,9 +11735,9 @@ merge-stream@^2.0.0: integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" - integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== merge@^1.2.1: version "1.2.1" @@ -10581,6 +11862,13 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + mini-create-react-context@^0.3.0: version "0.3.2" resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" @@ -10649,18 +11937,18 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.5: - version "2.5.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.1.tgz#cf435a9bf9408796ca3a3525a8b851464279c9b8" - integrity sha512-dmpSnLJtNQioZFI5HfQ55Ad0DzzsMAb+HfokwRTNXwEQjepbTkl5mtIlSVxGIkOkxlpX7wIn5ET/oAd9fZ/Y/Q== +minipass@^2.2.1, minipass@^2.3.5, minipass@^2.6.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.6.4.tgz#c15b8e86d1ecee001652564a2c240c0b6e58e817" + integrity sha512-D/+wBy2YykFsCcWvaIslCKKus5tqGQZ8MhEzNx4mujLNgHhXWaaUOZkok6/kztAlTt0QkYLEyIShrybNmzoeTA== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + version "1.2.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.2.tgz#6f0ccc82fa53e1bf2ff145f220d2da9fa6e3a166" + integrity sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ== dependencies: minipass "^2.2.1" @@ -10983,11 +12271,19 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@2.6.0, node-fetch@^2.1.1, node-fetch@^2.3.0: +node-fetch@2.6.0, node-fetch@^2.1.1, node-fetch@^2.3.0, node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-forge@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a" @@ -11060,9 +12356,9 @@ node-pre-gyp@^0.12.0: tar "^4" node-releases@^1.1.25, node-releases@^1.1.29: - version "1.1.30" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.30.tgz#35eebf129c63baeb6d8ddeda3c35b05abfd37f7f" - integrity sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw== + version "1.1.32" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.32.tgz#485b35c1bf9b4d8baa105d782f8ca731e518276e" + integrity sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A== dependencies: semver "^5.3.0" @@ -11180,9 +12476,9 @@ npm-pick-manifest@^2.2.3: semver "^5.4.1" npm-registry-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#5ef75845b605855c7964472542c25da172af8677" - integrity sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.1.tgz#4ec0964dce6f29d253801a47cd381a7d6ad13a5e" + integrity sha512-1ZQ+yjnxc698R5h9Yje9CASapzAZr7aYDkJDdERg9xg2hOEY0vRJwskOaJAXq8N/eLavzvW4g564YAfq6zMn/A== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -11190,6 +12486,7 @@ npm-registry-fetch@^4.0.0: lru-cache "^5.1.1" make-fetch-happen "^5.0.0" npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" npm-run-all@^4.1.5: version "4.1.5" @@ -11213,7 +12510,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: +npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -11321,7 +12618,7 @@ object.entries@^1.1.0: function-bind "^1.1.1" has "^1.0.3" -object.fromentries@^2.0.0: +object.fromentries@^2.0.0, "object.fromentries@^2.0.0 || ^1.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== @@ -11407,7 +12704,7 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@6.4.0: +open@6.4.0, open@^6.1.0, open@^6.3.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== @@ -11731,7 +13028,7 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@2.1.x: +param-case@2.1.x, param-case@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= @@ -11757,6 +13054,18 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-entities@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" @@ -12026,6 +13335,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-up@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -12038,6 +13354,25 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +pnp-webpack-plugin@1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.4.3.tgz#0a100b63f4a1d09cee6ee55a87393b69f03ab5c7" + integrity sha512-ExrNwuFH3DudHwWY2uRMqyiCOBEDdhQYHIAsqW/CM6hIZlSgXC/ma/p08FoNOUhVyh9hl1NGnMpR94T5i3SHaQ== + dependencies: + ts-pnp "^1.1.2" + +polished@^3.3.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.4.1.tgz#1eb5597ec1792206365635811d465751f5cbf71c" + integrity sha512-GflTnlP5rrpDoigjczEkS6Ye7NDA4sFvAnlr5hSDrEvjiVj97Xzev3hZlLi3UB27fpxyTS9rWU64VzVLWkG+mg== + dependencies: + "@babel/runtime" "^7.4.5" + +popper.js@^1.14.4, popper.js@^1.14.7: + version "1.15.0" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" + integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== + portfinder@^1.0.21, portfinder@^1.0.9: version "1.0.24" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.24.tgz#11efbc6865f12f37624b6531ead1d809ed965cfa" @@ -12109,6 +13444,13 @@ postcss-discard-overridden@^4.0.1: dependencies: postcss "^7.0.0" +postcss-flexbugs-fixes@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" + integrity sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA== + dependencies: + postcss "^7.0.0" + postcss-import@12.0.1: version "12.0.1" resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-12.0.1.tgz#cf8c7ab0b5ccab5649024536e565f841928b7153" @@ -12127,7 +13469,7 @@ postcss-load-config@^2.0.0: cosmiconfig "^5.0.0" import-cwd "^2.0.0" -postcss-loader@3.0.0: +postcss-loader@3.0.0, postcss-loader@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== @@ -12213,6 +13555,13 @@ postcss-modules-extract-imports@^1.2.0: dependencies: postcss "^6.0.1" +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" @@ -12221,6 +13570,16 @@ postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.2.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" + postcss-modules-scope@1.1.0, postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" @@ -12229,6 +13588,14 @@ postcss-modules-scope@1.1.0, postcss-modules-scope@^1.1.0: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" +postcss-modules-scope@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" + integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + postcss-modules-values@1.3.0, postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" @@ -12237,6 +13604,14 @@ postcss-modules-values@1.3.0, postcss-modules-values@^1.3.0: icss-replace-symbols "^1.1.0" postcss "^6.0.1" +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + postcss-modules@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.4.1.tgz#8aa35bd3461db67e27377a7ce770d77b654a84ef" @@ -12376,6 +13751,15 @@ postcss-selector-parser@^5.0.0-rc.4: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + postcss-svgo@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" @@ -12425,7 +13809,7 @@ postcss@6.0.1: source-map "^0.5.6" supports-color "^3.2.3" -postcss@7.0.17, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17, postcss@^7.0.2: +postcss@7.0.17: version "7.0.17" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== @@ -12443,7 +13827,7 @@ postcss@^6.0.1, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.14, postcss@^7.0.5: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6: version "7.0.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233" integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g== @@ -12490,7 +13874,7 @@ prettier@1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== -pretty-error@^2.0.2: +pretty-error@^2.0.2, pretty-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= @@ -12508,6 +13892,18 @@ pretty-format@^24.3.0, pretty-format@^24.8.0, pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + +prismjs@^1.8.4, prismjs@~1.17.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" + integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== + optionalDependencies: + clipboard "^2.0.0" + private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -12541,6 +13937,24 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise.allsettled@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.1.tgz#afe4bfcc13b26e2263a97a7fbbb19b8ca6eb619c" + integrity sha512-3ST7RS7TY3TYLOIe+OACZFvcWVe1osbgz2x07nTb446pa3t4GUZWidMDzQ4zf9jC2l6mRa1/3X81icFYbi+D/g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + function-bind "^1.1.1" + +promise.prototype.finally@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.1.tgz#cb279d3a5020ca6403b3d92357f8e22d50ed92aa" + integrity sha512-gnt8tThx0heJoI3Ms8a/JdkYBVhYP/wv+T7yQimR+kdOEJL21xTFbiJhMRqnSPcr54UVvMbsscDk2w+ivyaLPw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + function-bind "^1.1.1" + promise.series@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/promise.series/-/promise.series-0.2.0.tgz#2cc7ebe959fc3a6619c04ab4dbdc9e452d864bbd" @@ -12584,7 +13998,7 @@ prop-types-exact@1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@15.7.2, prop-types@^15.5.4, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -12593,6 +14007,13 @@ prop-types@15.7.2, prop-types@^15.5.4, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +property-information@^5.0.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.2.2.tgz#20555eafd2296278a682e5a51d5123e7878ecc30" + integrity sha512-N2moasZmjn2mjVGIWpaqz5qnz6QyeQSGgGvMtl81gA9cPTWa6wpesRSe/quNnOjUHpvSH1oZx0pdz0EEckLFnA== + dependencies: + xtend "^4.0.1" + protoduck@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" @@ -12690,6 +14111,11 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.6.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.8.0.tgz#87b763f0d37ca54200334cd57bb2ef8f68a1d081" + integrity sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w== + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -12732,11 +14158,23 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + ramda@0.24.1: version "0.24.1" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= +ramda@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" + integrity sha1-oAGr7bP/YQd9T/HVd9RN536NCjU= + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -12784,6 +14222,14 @@ raw-loader@3.1.0: loader-utils "^1.1.0" schema-utils "^2.0.1" +raw-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-2.0.0.tgz#e2813d9e1e3f80d1bbade5ad082e809679e20c26" + integrity sha512-kZnO5MoIyrojfrPWqrhFNLZemIAX8edMOCp++yC5RKxzFB3m92DqKNhKlU6+FvpOhWtvyh3jOaD7J6/9tpdIKg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -12794,6 +14240,56 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-clientside-effect@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.2.tgz#6212fb0e07b204e714581dd51992603d1accc837" + integrity sha512-nRmoyxeok5PBO6ytPvSjKp9xwXg9xagoTK1mMjwnQxqM9Hd7MNPl+LS1bOSOe+CV2+4fnEquc7H/S8QD3q697A== + dependencies: + "@babel/runtime" "^7.0.0" + +react-color@^2.17.0: + version "2.17.3" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.17.3.tgz#b8556d744f95193468c7061d2aa19180118d4a48" + integrity sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ== + dependencies: + "@icons/material" "^0.2.4" + lodash "^4.17.11" + material-colors "^1.2.1" + prop-types "^15.5.10" + reactcss "^1.2.0" + tinycolor2 "^1.4.1" + +react-dev-utils@^9.0.0: + version "9.0.3" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.0.3.tgz#7607455587abb84599451460eb37cef0b684131a" + integrity sha512-OyInhcwsvycQ3Zr2pQN+HV4gtRXrky5mJXIy4HnqrWa+mI624xfYfqGuC9dYbxp4Qq3YZzP8GSGQjv0AgNU15w== + dependencies: + "@babel/code-frame" "7.5.5" + address "1.1.0" + browserslist "4.6.6" + chalk "2.4.2" + cross-spawn "6.0.5" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.6.1" + find-up "3.0.0" + fork-ts-checker-webpack-plugin "1.5.0" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "6.5.0" + is-root "2.1.0" + loader-utils "1.2.3" + open "^6.3.0" + pkg-up "2.0.0" + react-error-overlay "^6.0.1" + recursive-readdir "2.2.2" + shell-quote "1.6.1" + sockjs-client "1.3.0" + strip-ansi "5.2.0" + text-table "0.2.0" + react-dom@16.10.2: version "16.10.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6" @@ -12804,11 +14300,83 @@ react-dom@16.10.2: prop-types "^15.6.2" scheduler "^0.16.2" +react-dom@^16.8.3: + version "16.9.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" + integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.15.0" + +react-draggable@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-3.3.2.tgz#966ef1d90f2387af3c2d8bd3516f601ea42ca359" + integrity sha512-oaz8a6enjbPtx5qb0oDWxtDNuybOylvto1QLydsXgKmwT7e3GXC2eMVDwEMIUYJIFqVG72XpOv673UuuAq6LhA== + dependencies: + classnames "^2.2.5" + prop-types "^15.6.0" + react-error-overlay@5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-5.1.6.tgz#0cd73407c5d141f9638ae1e0c63e7b2bf7e9929d" integrity sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q== +react-error-overlay@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.1.tgz#b8d3cf9bb991c02883225c48044cb3ee20413e0f" + integrity sha512-V9yoTr6MeZXPPd4nV/05eCBvGH9cGzc52FN8fs0O0TVQ3HYYf1n7EgZVtHbldRq5xU9zEzoXIITjYNIfxDDdUw== + +react-fast-compare@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-focus-lock@^1.18.3: + version "1.19.1" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-1.19.1.tgz#2f3429793edaefe2d077121f973ce5a3c7a0651a" + integrity sha512-TPpfiack1/nF4uttySfpxPk4rGZTLXlaZl7ncZg/ELAk24Iq2B1UUaUioID8H8dneUXqznT83JTNDHDj+kwryw== + dependencies: + "@babel/runtime" "^7.0.0" + focus-lock "^0.6.3" + prop-types "^15.6.2" + react-clientside-effect "^1.2.0" + +react-helmet-async@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.3.tgz#68a176dd266c2caf63762879c573a866b89a2098" + integrity sha512-hthnzAPasSX0ZU0adR1YW51xtMhwQuMwxtyjb/OeS2Gu2bzqFnCtt2h93nENE0+97NPeUS0+YHOriEMX8j/W0w== + dependencies: + "@babel/runtime" "7.3.4" + invariant "2.2.4" + prop-types "15.7.2" + react-fast-compare "2.0.4" + shallowequal "1.1.0" + +react-hotkeys@2.0.0-pre4: + version "2.0.0-pre4" + resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0-pre4.tgz#a1c248a51bdba4282c36bf3204f80d58abc73333" + integrity sha512-oa+UncSWyOwMK3GExt+oELXaR7T3ItgcMolsupQFdKvwkEhVAluJd5rYczsRSQpQlVkdNoHG46De2NUeuS+88Q== + dependencies: + prop-types "^15.6.1" + +react-input-autosize@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8" + integrity sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA== + dependencies: + prop-types "^15.5.8" + +react-inspector@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-3.0.2.tgz#c530a06101f562475537e47df428e1d7aff16ed8" + integrity sha512-PSR8xDoGFN8R3LKmq1NT+hBBwhxjd9Qwz8yKY+5NXY/CHpxXHm01CVabxzI7zFwFav/M3JoC/Z0Ro2kSX6Ef2Q== + dependencies: + babel-runtime "^6.26.0" + is-dom "^1.0.9" + prop-types "^15.6.1" + react-is@16.8.6: version "16.8.6" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" @@ -12819,6 +14387,31 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-popper-tooltip@^2.8.3: + version "2.8.3" + resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.8.3.tgz#1c63e7473a96362bd93be6c94fa404470a265197" + integrity sha512-g5tfxmuj8ClNVwH4zswYJcD3GKoc5RMeRawd/WZnbyZGEDecsRKaVL+Kj7L3BG7w5qb6/MHcLTG8yE4CidwezQ== + dependencies: + "@babel/runtime" "^7.4.5" + react-popper "^1.3.3" + +react-popper@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.4.tgz#f0cd3b0d30378e1f663b0d79bcc8614221652ced" + integrity sha512-9AcQB29V+WrBKk6X7p0eojd1f25/oJajVdMZkywIoAV6Ag7hzE1Mhyeup2Q1QnvFRtGQFQvtqfhlEoDAPfKAVA== + dependencies: + "@babel/runtime" "^7.1.2" + create-react-context "^0.3.0" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + react-router-dom@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18" @@ -12848,6 +14441,61 @@ react-router@5.1.2: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" +react-select@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.0.4.tgz#16bde37c24fd4f6444914d4681e78f15ffbc86d3" + integrity sha512-fbVISKa/lSUlLsltuatfUiKcWCNvdLXxFFyrzVQCBUsjxJZH/m7UMPdw/ywmRixAmwXAP++MdbNNZypOsiDEfA== + dependencies: + "@babel/runtime" "^7.4.4" + "@emotion/cache" "^10.0.9" + "@emotion/core" "^10.0.9" + "@emotion/css" "^10.0.9" + classnames "^2.2.5" + memoize-one "^5.0.0" + prop-types "^15.6.0" + raf "^3.4.0" + react-input-autosize "^2.2.1" + react-transition-group "^2.2.1" + +react-sizeme@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.7.tgz#231339ce8821ac2c26424c791e0027f89dae3e90" + integrity sha512-xCjPoBP5jmeW58TxIkcviMZqabZis7tTvDFWf0/Wa5XCgVWQTIe74NQBes2N1Kmp64GRLkpm60BaP0kk+v8aCQ== + dependencies: + element-resize-detector "^1.1.15" + invariant "^2.2.4" + shallowequal "^1.1.0" + throttle-debounce "^2.1.0" + +react-syntax-highlighter@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-8.1.0.tgz#59103ff17a828a27ed7c8f035ae2558f09b6b78c" + integrity sha512-G2bkZxmF3VOa4atEdXIDSfwwCqjw6ZQX5znfTaHcErA1WqHIS0o6DaSCDKFPVaOMXQEB9Hf1UySYQvuJmV8CXg== + dependencies: + babel-runtime "^6.18.0" + highlight.js "~9.12.0" + lowlight "~1.9.1" + prismjs "^1.8.4" + refractor "^2.4.1" + +react-textarea-autosize@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.0.tgz#3132cb77e65d94417558d37c0bfe415a5afd3445" + integrity sha512-c2FlR/fP0qbxmlrW96SdrbgP/v0XZMTupqB90zybvmDVDutytUgPl7beU35klwcTeMepUIQEpQUn3P3bdshGPg== + dependencies: + "@babel/runtime" "^7.1.2" + prop-types "^15.6.0" + +react-transition-group@^2.2.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" + integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== + dependencies: + dom-helpers "^3.4.0" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" + react@16.10.2: version "16.10.2" resolved "https://registry.yarnpkg.com/react/-/react-16.10.2.tgz#a5ede5cdd5c536f745173c8da47bda64797a4cf0" @@ -12857,6 +14505,22 @@ react@16.10.2: object-assign "^4.1.1" prop-types "^15.6.2" +react@^16.8.3: + version "16.9.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" + integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +reactcss@^1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" + integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== + dependencies: + lodash "^4.0.1" + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -13034,6 +14698,13 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -13060,6 +14731,15 @@ reflect.ownkeys@^0.2.0: resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= +refractor@^2.4.1: + version "2.10.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.0.tgz#4cc7efc0028a87924a9b31d82d129dec831a287b" + integrity sha512-maW2ClIkm9IYruuFYGTqKzj+m31heq92wlheW4h7bOstP+gf8bocmMec+j7ljLcaB1CAID85LMB3moye31jH1g== + dependencies: + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.17.0" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -13082,6 +14762,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.12.0, regenerator-runtime@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -13149,9 +14834,9 @@ regexpu-core@^2.0.0: regjsparser "^0.1.4" regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" @@ -13214,7 +14899,7 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" -relateurl@0.2.x: +relateurl@0.2.x, relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -13364,6 +15049,11 @@ reserved-words@^0.1.2: resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -13401,10 +15091,10 @@ resolve-global@^1.0.0: dependencies: global-dirs "^0.1.1" -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve-url@^0.2.1: version "0.2.1" @@ -13622,14 +15312,21 @@ rollup-plugin-typescript2@0.24.3: rollup-pluginutils "2.8.1" tslib "1.10.0" -rollup-pluginutils@2.8.1, rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1: +rollup-pluginutils@2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== dependencies: estree-walker "^0.6.1" -rollup@1.20.3, rollup@^1.12.1: +rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.8.1: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@1.20.3: version "1.20.3" resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.20.3.tgz#6243f6c118ca05f56b2d9433112400cd834a1eb8" integrity sha512-/OMCkY0c6E8tleeVm4vQVDz24CkVgvueK3r8zTYu2AQNpjrcaPwO9hE+pWj5LTFrvvkaxt4MYIp2zha4y0lRvg== @@ -13638,6 +15335,15 @@ rollup@1.20.3, rollup@^1.12.1: "@types/node" "^12.7.2" acorn "^7.0.0" +rollup@^1.12.1: + version "1.21.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.21.4.tgz#00a41a30f90095db890301b226cbe2918e4cf54d" + integrity sha512-Pl512XVCmVzgcBz5h/3Li4oTaoDcmpuFZ+kdhS/wLreALz//WuDAMfomD3QEYl84NkDu6Z6wV9twlcREb4qQsw== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "^12.7.5" + acorn "^7.0.0" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -13688,12 +15394,17 @@ rxjs@^6.0.0, rxjs@^6.1.0, rxjs@^6.4.0: dependencies: tslib "^1.9.0" +safe-buffer@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -13755,9 +15466,9 @@ sass@1.22.9: chokidar ">=2.0.0 <4.0.0" sass@^1.17.3: - version "1.22.10" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.10.tgz#b9f01440352ba0be5d99fa64a2040b035cc6e5ff" - integrity sha512-DUpS1tVMGCH6gr/N9cXCoemrjoNdOLhAHfQ37fJw2A5ZM4gSI9ej/8Xi95Xwus03RqZ2zdSnKZGULL7oS+jfMA== + version "1.22.12" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.12.tgz#5cbdd38720ffd1857da695331faee9f634bcb5d7" + integrity sha512-u5Rxn+dKTPCW5/11kMNxtmqKsxCjcpnqj9CaJoru1NqeJ0DOa9rOM00e0HqmseTAatGkKoLY+jaNecMYevu1gg== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -13815,6 +15526,11 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + selfsigned@^1.10.4, selfsigned@^1.9.1: version "1.10.6" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.6.tgz#7b3cd37ed9c2034261a173af1a1aae27d8169b67" @@ -13897,6 +15613,17 @@ serialize-javascript@^1.7.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serve-favicon@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" + integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= + dependencies: + etag "~1.8.1" + fresh "0.5.2" + ms "2.1.1" + parseurl "~1.3.2" + safe-buffer "5.1.1" + serve-index@^1.7.2, serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -13935,7 +15662,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -13975,6 +15702,16 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallow-equal@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.0.tgz#fd828d2029ff4e19569db7e19e535e94e2d1f5cc" + integrity sha512-Z21pVxR4cXsfwpMKMhCEIO1PCi5sp7KEp+CmOpBQ+E8GpHwKOw2sEzk7sgblM3d/j4z4gakoWEoPcjK0VJQogA== + +shallowequal@1.1.0, shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -13987,6 +15724,16 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shell-quote@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" @@ -14036,6 +15783,26 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +simplebar-react@^1.0.0-alpha.6: + version "1.2.1" + resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.1.tgz#4ce09f213ca2f998672cdc86c42cc789d3b99428" + integrity sha512-TOw1q5JhsXJCAYzfsdis5rwSZXemthNxTXKBo+E4brIS3FaMGE3AuA5YgFIu2xeTy/jRKekiQJwJCUx/RH7i7A== + dependencies: + prop-types "^15.6.1" + simplebar "^4.2.1" + +simplebar@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.1.tgz#355af388d80218755ef6e12337d483d38df46af1" + integrity sha512-5BktrSuFwg2hA7ObLkfAGV2C1qKGZoyy9v1vVOQVddG89NU4BQ4TbkaJR23hgeEisnYVLGRH9f099YPBujuo7Q== + dependencies: + can-use-dom "^0.1.0" + core-js "^3.0.1" + lodash.debounce "^4.0.8" + lodash.memoize "^4.1.2" + lodash.throttle "^4.1.1" + resize-observer-polyfill "^1.5.1" + sisteransi@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" @@ -14284,6 +16051,11 @@ sourcemap-codec@^1.4.4: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== +space-separated-tokens@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" + integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -14421,6 +16193,11 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +store2@^2.7.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.9.0.tgz#9987e3cf491b8163fd6197c42bab7d71c58c179b" + integrity sha512-JmK+95jLX2zAP75DVAJ1HAziQ6f+f495h4P9ez2qbmxazN6fE7doWlitqx9hj2YohH3kOi6RVksJe1UH0sJfPw== + stream-browserify@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" @@ -14527,6 +16304,17 @@ string-width@^4.0.0, string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^5.2.0" +string.prototype.matchall@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-3.0.1.tgz#5a9e0b64bcbeb336aa4814820237c2006985646d" + integrity sha512-NSiU0ILQr9PQ1SZmM1X327U5LsM+KfDTassJfqN1al1+0iNpKzmQ4BfXOJwRnTEqv8nKJ67mFpqRoPaGWwvy5A== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has-symbols "^1.0.0" + regexp.prototype.flags "^1.2.0" + string.prototype.padend@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" @@ -14536,6 +16324,15 @@ string.prototype.padend@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" +string.prototype.padstart@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz#5bcfad39f4649bb2d031292e19bcf0b510d4b242" + integrity sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + string.prototype.trimleft@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" @@ -14649,6 +16446,14 @@ style-loader@1.0.0: loader-utils "^1.2.3" schema-utils "^2.0.1" +style-loader@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + styled-components@4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.3.2.tgz#4ca81918c812d3006f60ac5fdec7d6b64a9509cc" @@ -14796,6 +16601,13 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +symbol.prototype.description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.0.tgz#6e355660eb1e44ca8ad53a68fdb72ef131ca4b12" + integrity sha512-I9mrbZ5M96s7QeJDv95toF1svkUjeBybe8ydhY7foPaBmr0SPJMFupArmMkDrOKTTj0sJVr+nvQNxWLziQ7nDQ== + dependencies: + has-symbols "^1.0.0" + table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -14824,6 +16636,19 @@ tar@^4, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" +telejson@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-2.2.2.tgz#d61d721d21849a6e4070d547aab302a9bd22c720" + integrity sha512-YyNwnKY0ilabOwYgC/J754En1xOe5PBIUIw+C9e0+5HjVVcnQE5/gdu2yET2pmSbp5bxIDqYNjvndj2PUkIiYA== + dependencies: + global "^4.3.2" + is-function "^1.0.1" + is-regex "^1.0.4" + is-symbol "^1.0.2" + isobject "^3.0.1" + lodash "^4.17.11" + memoizerific "^1.11.3" + tempfile@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" @@ -14844,7 +16669,7 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.1.0.tgz#3aec444c07a7cf936e157c1dc224b590c3c7eef2" integrity sha512-I42EWhJ+2aeNQawGx1VtpO0DFI9YcfuvAMNIdKyf/6sRbHJ4P+ZQ/zIT87tE+ln1ymAGcCJds4dolfSAS0AcNg== -terser-webpack-plugin@1.4.1, terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@1.4.1, terser-webpack-plugin@^1.2.4, terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== @@ -14915,7 +16740,7 @@ text-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== -text-table@^0.2.0: +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -14925,6 +16750,11 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +throttle-debounce@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" + integrity sha512-AOvyNahXQuU7NN+VVvOOX+uW6FPaWdAOdRP5HfwYxAfCzXTFKRMoIMk+n+po318+ktcChx+F1Dd91G3YHeMKyg== + throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" @@ -14985,6 +16815,11 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + tiny-invariant@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" @@ -14995,6 +16830,11 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tinycolor2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" + integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= + tmp-promise@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.0.5.tgz#3208d7fa44758f86a2a4c4060f3c33fea30e8038" @@ -15079,6 +16919,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -15143,14 +16988,15 @@ trim-right@^1.0.1: integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= ts-jest@^24.0.0: - version "24.0.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" - integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== + version "24.1.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" + integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== dependencies: bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" json5 "2.x" + lodash.memoize "4.x" make-error "1.x" mkdirp "0.x" resolve "1.x" @@ -15183,9 +17029,9 @@ ts-morph@^3.0.0: typescript "^3.0.1" ts-node@^8.0.2: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" - integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + version "8.4.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" + integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== dependencies: arg "^4.1.0" diff "^4.0.1" @@ -15193,6 +17039,11 @@ ts-node@^8.0.2: source-map-support "^0.5.6" yn "^3.0.0" +ts-pnp@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.4.tgz#ae27126960ebaefb874c6d7fa4729729ab200d90" + integrity sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw== + tsconfig-paths-webpack-plugin@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.2.0.tgz#6e70bd42915ad0efb64d3385163f0c1270f3e04d" @@ -15203,12 +17054,11 @@ tsconfig-paths-webpack-plugin@^3.2.0: tsconfig-paths "^3.4.0" tsconfig-paths@^3.4.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz#4e34202d5b41958f269cf56b01ed95b853d59f72" - integrity sha512-zZEYFo4sjORK8W58ENkRn9s+HmQFkkwydDG7My5s/fnfr2YYCaiyXe/HBUcIgU8epEKOXwiahOO+KZYjiXlWyQ== + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== dependencies: "@types/json5" "^0.0.29" - deepmerge "^2.0.1" json5 "^1.0.1" minimist "^1.2.0" strip-bom "^3.0.0" @@ -15318,6 +17168,11 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.0.3.tgz#16f5d39f27a2d28d86e48f8981859e9d3296c179" integrity sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg== +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -15338,6 +17193,11 @@ typescript@^3.0.1: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da" integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw== +ua-parser-js@^0.7.18: + version "0.7.20" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" + integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== + uglify-js@3.4.x: version "3.4.10" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" @@ -15346,7 +17206,7 @@ uglify-js@3.4.x: commander "~2.19.0" source-map "~0.6.1" -uglify-js@^3.1.4: +uglify-js@^3.1.4, uglify-js@^3.5.1: version "3.6.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== @@ -15364,7 +17224,7 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= -unfetch@4.1.0: +unfetch@4.1.0, unfetch@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== @@ -15459,7 +17319,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@~1.1.1: +unquote@^1.1.0, unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= @@ -15533,6 +17393,15 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-loader@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.1.0.tgz#bcc1ecabbd197e913eca23f5e0378e24b4412961" + integrity sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.0.0" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -15586,7 +17455,7 @@ useragent@2.3.0: lru-cache "4.1.x" tmp "0.0.x" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -15665,10 +17534,10 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" - integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw== +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== vary@^1, vary@~1.1.2: version "1.1.2" @@ -15727,6 +17596,20 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w= + dependencies: + loose-envify "^1.0.0" + +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack@2.0.0-beta.5: version "2.0.0-beta.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0-beta.5.tgz#c005db39570d81d9d34334870abc0f548901b880" @@ -15889,7 +17772,7 @@ webpack-dev-server@3.8.0: ws "^6.2.1" yargs "12.0.5" -webpack-hot-middleware@2.25.0: +webpack-hot-middleware@2.25.0, webpack-hot-middleware@^2.25.0: version "2.25.0" resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== @@ -16007,6 +17890,35 @@ webpack@4.39.2: watchpack "^1.6.0" webpack-sources "^1.4.1" +webpack@^4.33.0, webpack@^4.38.0: + version "4.40.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.40.2.tgz#d21433d250f900bf0facbabe8f50d585b2dc30a7" + integrity sha512-5nIvteTDCUws2DVvP9Qe+JPla7kWPPIDFZv55To7IycHWZ+Z5qBdaBYPyuXWdhggTufZkQwfIK+5rKQTVovm2A== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + websocket-driver@>=0.5.1: version "0.7.3" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" @@ -16028,6 +17940,11 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-fetch@>=0.10.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" + integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== + whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -16242,7 +18159,7 @@ xregexp@4.0.0: resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==