diff --git a/docs/angular/api-angular/schematics/storybook-configuration.md b/docs/angular/api-angular/schematics/storybook-configuration.md new file mode 100644 index 0000000000..6a16670f01 --- /dev/null +++ b/docs/angular/api-angular/schematics/storybook-configuration.md @@ -0,0 +1,49 @@ +# storybook-configuration + +Create stories/specs for all components declared in a library + +## Usage + +```bash +ng generate storybook-configuration ... +``` + +By default, Nx will search for `storybook-configuration` in the default collection provisioned in `angular.json`. + +You can specify the collection explicitly as follows: + +```bash +ng g @nrwl/angular:storybook-configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +ng g storybook-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-react/schematics/storybook-configuration.md b/docs/angular/api-react/schematics/storybook-configuration.md new file mode 100644 index 0000000000..0e82954584 --- /dev/null +++ b/docs/angular/api-react/schematics/storybook-configuration.md @@ -0,0 +1,37 @@ +# storybook-configuration + +Set up storybook for a react library + +## Usage + +```bash +ng generate storybook-configuration ... +``` + +By default, Nx will search for `storybook-configuration` in the default collection provisioned in `angular.json`. + +You can specify the collection explicitly as follows: + +```bash +ng g @nrwl/react:storybook-configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +ng g storybook-configuration ... --dry-run +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/angular/api-storybook/schematics/configuration.md b/docs/angular/api-storybook/schematics/configuration.md index 01e0ba6305..9e7703d919 100644 --- a/docs/angular/api-storybook/schematics/configuration.md +++ b/docs/angular/api-storybook/schematics/configuration.md @@ -30,20 +30,16 @@ 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 + +### uiFramework + +Type: `string` + +Possible values: `@storybook/angular`, `@storybook/react`, `@storybook/web` + +Storybook UI Framework to use diff --git a/docs/react/api-angular/schematics/storybook-configuration.md b/docs/react/api-angular/schematics/storybook-configuration.md new file mode 100644 index 0000000000..35d7f11281 --- /dev/null +++ b/docs/react/api-angular/schematics/storybook-configuration.md @@ -0,0 +1,49 @@ +# storybook-configuration + +Create stories/specs for all components declared in a library + +## Usage + +```bash +nx generate storybook-configuration ... +``` + +By default, Nx will search for `storybook-configuration` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/angular:storybook-configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g storybook-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-react/schematics/storybook-configuration.md b/docs/react/api-react/schematics/storybook-configuration.md new file mode 100644 index 0000000000..803159c710 --- /dev/null +++ b/docs/react/api-react/schematics/storybook-configuration.md @@ -0,0 +1,37 @@ +# storybook-configuration + +Set up storybook for a react library + +## Usage + +```bash +nx generate storybook-configuration ... +``` + +By default, Nx will search for `storybook-configuration` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/react:storybook-configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g storybook-configuration ... --dry-run +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/react/api-storybook/schematics/configuration.md b/docs/react/api-storybook/schematics/configuration.md index d69c596a9e..f61ff21041 100644 --- a/docs/react/api-storybook/schematics/configuration.md +++ b/docs/react/api-storybook/schematics/configuration.md @@ -30,20 +30,16 @@ 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 + +### uiFramework + +Type: `string` + +Possible values: `@storybook/angular`, `@storybook/react`, `@storybook/web` + +Storybook UI Framework to use diff --git a/docs/web/api-angular/schematics/storybook-configuration.md b/docs/web/api-angular/schematics/storybook-configuration.md new file mode 100644 index 0000000000..35d7f11281 --- /dev/null +++ b/docs/web/api-angular/schematics/storybook-configuration.md @@ -0,0 +1,49 @@ +# storybook-configuration + +Create stories/specs for all components declared in a library + +## Usage + +```bash +nx generate storybook-configuration ... +``` + +By default, Nx will search for `storybook-configuration` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/angular:storybook-configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g storybook-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-react/schematics/storybook-configuration.md b/docs/web/api-react/schematics/storybook-configuration.md new file mode 100644 index 0000000000..803159c710 --- /dev/null +++ b/docs/web/api-react/schematics/storybook-configuration.md @@ -0,0 +1,37 @@ +# storybook-configuration + +Set up storybook for a react library + +## Usage + +```bash +nx generate storybook-configuration ... +``` + +By default, Nx will search for `storybook-configuration` in the default collection provisioned in `workspace.json`. + +You can specify the collection explicitly as follows: + +```bash +nx g @nrwl/react:storybook-configuration ... +``` + +Show what will be generated without writing to disk: + +```bash +nx g storybook-configuration ... --dry-run +``` + +## Options + +### configureCypress + +Type: `boolean` + +Run the cypress-configure schematic + +### name + +Type: `string` + +Library name diff --git a/docs/web/api-storybook/schematics/configuration.md b/docs/web/api-storybook/schematics/configuration.md index d69c596a9e..f61ff21041 100644 --- a/docs/web/api-storybook/schematics/configuration.md +++ b/docs/web/api-storybook/schematics/configuration.md @@ -30,20 +30,16 @@ 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 + +### uiFramework + +Type: `string` + +Possible values: `@storybook/angular`, `@storybook/react`, `@storybook/web` + +Storybook UI Framework to use diff --git a/e2e/storybook.test.ts b/e2e/storybook.test.ts index 9964c79f1d..df60fdfd15 100644 --- a/e2e/storybook.test.ts +++ b/e2e/storybook.test.ts @@ -21,17 +21,20 @@ forEachCli(() => { const mylib = uniq('test-ui-lib'); createTestUILib(mylib); - const mylib2 = uniq('test-ui-lib2'); - createTestUILib(mylib2); + const mylib2 = uniq('test-ui-lib-react'); + runCLI(`generate @nrwl/react:lib ${mylib2} --no-interactive`); + runCLI( + `generate @nrwl/react:component TestComponent --project=${mylib2} --no-interactive` + ); runCLI( - `generate @nrwl/storybook:configuration ${mylib} --configureCypress --generateStories --generateCypressSpecs --no-interactive` + `generate @nrwl/angular: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` + `generate @nrwl/react:storybook-configuration ${mylib2} --configureCypress --no-interactive` ); expect( diff --git a/package.json b/package.json index d34fdf144e..dfed50caec 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@testing-library/react": "9.3.0", "@storybook/core": "^5.2.5", "@storybook/angular": "^5.2.5", + "@storybook/react": "^5.2.5", "@storybook/addon-knobs": "^5.2.5", "@types/express": "4.17.0", "@types/fast-levenshtein": "^0.0.1", diff --git a/packages/angular/collection.json b/packages/angular/collection.json index 12fb995ddb..6d893e6ced 100644 --- a/packages/angular/collection.json +++ b/packages/angular/collection.json @@ -55,6 +55,13 @@ "description": "Add an upgrade module" }, + "storybook-configuration": { + "factory": "./src/schematics/storybook-configuration/configuration", + "schema": "./src/schematics/storybook-configuration/schema.json", + "description": "Create stories/specs for all components declared in a library", + "hidden": false + }, + "stories": { "factory": "./src/schematics/stories/stories", "schema": "./src/schematics/stories/schema.json", diff --git a/packages/angular/src/schematics/stories/stories.ts b/packages/angular/src/schematics/stories/stories.ts index 1c33eb31c8..0b2406b671 100644 --- a/packages/angular/src/schematics/stories/stories.ts +++ b/packages/angular/src/schematics/stories/stories.ts @@ -32,7 +32,6 @@ export function createAllStories( return (tree: Tree, context: SchematicContext) => { context.logger.debug('adding .storybook folder to lib'); - debugger; const libPath = getProjectConfig(tree, projectName).sourceRoot + '/lib'; return chain( tree diff --git a/packages/angular/src/schematics/storybook-configuration/configuration.spec.ts b/packages/angular/src/schematics/storybook-configuration/configuration.spec.ts new file mode 100644 index 0000000000..95b4101f59 --- /dev/null +++ b/packages/angular/src/schematics/storybook-configuration/configuration.spec.ts @@ -0,0 +1,51 @@ +import { Tree } from '@angular-devkit/schematics'; +import { runSchematic } from '../../utils/testing'; +import { StorybookConfigureSchema } from './schema'; +import { createTestUILib } from '../stories/stories.spec'; + +describe('schematic:configuration', () => { + let appTree: Tree; + + beforeEach(async () => { + appTree = await createTestUILib('test-ui-lib'); + }); + + it('should configure everything at once', async () => { + const tree = await runSchematic( + 'storybook-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(); + }); +}); diff --git a/packages/angular/src/schematics/storybook-configuration/configuration.ts b/packages/angular/src/schematics/storybook-configuration/configuration.ts new file mode 100644 index 0000000000..de6c7ce458 --- /dev/null +++ b/packages/angular/src/schematics/storybook-configuration/configuration.ts @@ -0,0 +1,29 @@ +import { + chain, + externalSchematic, + Rule, + schematic +} from '@angular-devkit/schematics'; +import { StorybookStoriesSchema } from '../stories/stories'; +import { StorybookConfigureSchema } from './schema'; + +export default function(schema: StorybookConfigureSchema): Rule { + return chain([ + externalSchematic('@nrwl/storybook', 'configuration', { + name: schema.name, + uiFramework: '@storybook/angular', + configureCypress: schema.configureCypress + }), + generateStories(schema) + ]); +} + +function generateStories(schema: StorybookConfigureSchema): Rule { + return (tree, context) => { + return schematic('stories', { + name: schema.name, + generateCypressSpecs: + schema.configureCypress && schema.generateCypressSpecs + }); + }; +} diff --git a/packages/angular/src/schematics/storybook-configuration/schema.d.ts b/packages/angular/src/schematics/storybook-configuration/schema.d.ts new file mode 100644 index 0000000000..b5d205ffe8 --- /dev/null +++ b/packages/angular/src/schematics/storybook-configuration/schema.d.ts @@ -0,0 +1,6 @@ +export interface StorybookConfigureSchema { + name: string; + configureCypress: boolean; + generateStories: boolean; + generateCypressSpecs: boolean; +} diff --git a/packages/angular/src/schematics/storybook-configuration/schema.json b/packages/angular/src/schematics/storybook-configuration/schema.json new file mode 100644 index 0000000000..b94e579421 --- /dev/null +++ b/packages/angular/src/schematics/storybook-configuration/schema.json @@ -0,0 +1,31 @@ +{ + "$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", + "x-prompt": "Configure a cypress e2e app to run against the storybook instance?" + }, + "generateStories": { + "type": "boolean", + "description": "Automatically generate *.stories.ts files for components declared in this library", + "x-prompt": "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", + "x-prompt": "Automatically generate *.spec.ts files in the cypress e2e app generated by the cypress-configure schematic?" + } + }, + "required": ["name"] +} diff --git a/packages/react/collection.json b/packages/react/collection.json index 077e332968..500d2de21d 100644 --- a/packages/react/collection.json +++ b/packages/react/collection.json @@ -37,6 +37,13 @@ "schema": "./src/schematics/redux/schema.json", "description": "Create a redux slice for a project", "aliases": ["slice"] + }, + + "storybook-configuration": { + "factory": "./src/schematics/storybook-configuration/configuration", + "schema": "./src/schematics/storybook-configuration/schema.json", + "description": "Set up storybook for a react library", + "hidden": false } } } diff --git a/packages/react/src/schematics/storybook-configuration/configuration.spec.ts b/packages/react/src/schematics/storybook-configuration/configuration.spec.ts new file mode 100644 index 0000000000..374ca328e0 --- /dev/null +++ b/packages/react/src/schematics/storybook-configuration/configuration.spec.ts @@ -0,0 +1,36 @@ +import { Tree, schematic, externalSchematic } from '@angular-devkit/schematics'; +import { runSchematic, callRule } from '../../utils/testing'; +import { StorybookConfigureSchema } from './schema'; +import { createEmptyWorkspace } from '@nrwl/workspace/testing'; + +describe('react:storybook-configuration', () => { + it('should configure everything at once', async () => { + const appTree = await createTestUILib('test-ui-lib'); + const tree = await runSchematic( + 'storybook-configuration', + { + name: 'test-ui-lib', + configureCypress: 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(); + }); +}); + +export async function createTestUILib(libName: string): Promise { + let appTree = Tree.empty(); + appTree = createEmptyWorkspace(appTree); + appTree = await callRule( + externalSchematic('@nrwl/react', 'library', { + name: libName + }), + appTree + ); + return appTree; +} diff --git a/packages/react/src/schematics/storybook-configuration/configuration.ts b/packages/react/src/schematics/storybook-configuration/configuration.ts new file mode 100644 index 0000000000..2f1c8716c0 --- /dev/null +++ b/packages/react/src/schematics/storybook-configuration/configuration.ts @@ -0,0 +1,12 @@ +import { chain, externalSchematic, Rule } from '@angular-devkit/schematics'; +import { StorybookConfigureSchema } from './schema'; + +export default function(schema: StorybookConfigureSchema): Rule { + return chain([ + externalSchematic('@nrwl/storybook', 'configuration', { + name: schema.name, + uiFramework: '@storybook/react', + configureCypress: schema.configureCypress + }) + ]); +} diff --git a/packages/react/src/schematics/storybook-configuration/schema.d.ts b/packages/react/src/schematics/storybook-configuration/schema.d.ts new file mode 100644 index 0000000000..a8ab4dadf0 --- /dev/null +++ b/packages/react/src/schematics/storybook-configuration/schema.d.ts @@ -0,0 +1,4 @@ +export interface StorybookConfigureSchema { + name: string; + configureCypress: boolean; +} diff --git a/packages/react/src/schematics/storybook-configuration/schema.json b/packages/react/src/schematics/storybook-configuration/schema.json new file mode 100644 index 0000000000..1c6244d3d5 --- /dev/null +++ b/packages/react/src/schematics/storybook-configuration/schema.json @@ -0,0 +1,21 @@ +{ + "$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", + "x-prompt": "Configure a cypress e2e app to run against the storybook instance?" + } + }, + "required": ["name"] +} diff --git a/packages/react/src/utils/testing.ts b/packages/react/src/utils/testing.ts index 04eceb869a..2a2df13527 100644 --- a/packages/react/src/utils/testing.ts +++ b/packages/react/src/utils/testing.ts @@ -9,10 +9,25 @@ const testRunner = new SchematicTestRunner( 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(); } diff --git a/packages/storybook/src/schematics/configuration/configuration.spec.ts b/packages/storybook/src/schematics/configuration/configuration.spec.ts index 68c55d90f9..96cd7b1c24 100644 --- a/packages/storybook/src/schematics/configuration/configuration.spec.ts +++ b/packages/storybook/src/schematics/configuration/configuration.spec.ts @@ -56,73 +56,4 @@ describe('schematic:configuration', () => { ); 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 index 9c913798b1..b077f20578 100644 --- a/packages/storybook/src/schematics/configuration/configuration.ts +++ b/packages/storybook/src/schematics/configuration/configuration.ts @@ -24,20 +24,13 @@ export default function(schema: StorybookConfigureSchema): Rule { return chain([ schematic('ng-add', {}), createRootStorybookDir(), - createLibStorybookDir(schema.name), + createLibStorybookDir(schema.name, schema.uiFramework), configureTsConfig(schema.name), - addStorybookTask(schema.name), + addStorybookTask(schema.name, schema.uiFramework), schema.configureCypress ? schematic('cypress-project', { name: schema.name }) - : () => {}, - schema.generateStories - ? externalSchematic('@nrwl/angular', 'stories', { - name: schema.name, - generateCypressSpecs: - schema.configureCypress && schema.generateCypressSpecs - }) : () => {} ]); } @@ -53,7 +46,7 @@ function createRootStorybookDir(): Rule { }; } -function createLibStorybookDir(projectName: string): Rule { +function createLibStorybookDir(projectName: string, uiFramework: string): Rule { return (tree: Tree, context: SchematicContext) => { context.logger.debug('adding .storybook folder to lib'); const projectConfig = getProjectConfig(tree, projectName); @@ -62,6 +55,7 @@ function createLibStorybookDir(projectName: string): Rule { applyWithSkipExisting(url('./lib-files'), [ template({ tmpl: '', + uiFramework, offsetFromRoot: offsetFromRoot(projectConfig.root) }), move(projectConfig.root) @@ -94,18 +88,9 @@ function configureTsConfig(projectName: string): Rule { }; } -function addStorybookTask(projectName: string): Rule { +function addStorybookTask(projectName: string, uiFramework: 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: { 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__ index 53acdcc034..307ffeb781 100644 --- a/packages/storybook/src/schematics/configuration/lib-files/.storybook/config.js__tmpl__ +++ b/packages/storybook/src/schematics/configuration/lib-files/.storybook/config.js__tmpl__ @@ -1,3 +1,3 @@ -import { configure } from '@storybook/angular'; +import { configure } from '<%= uiFramework %>'; configure(require.context('../src/lib', true, /\.stories\.ts$/), module); 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 index 37facf778e..a90baaa82b 100644 --- a/packages/storybook/src/schematics/configuration/root-files/.storybook/webpack.config.js +++ b/packages/storybook/src/schematics/configuration/root-files/.storybook/webpack.config.js @@ -24,12 +24,17 @@ module.exports = async ({ config, mode }) => { }); config.module.rules = r; + config.resolve.extensions.push('.tsx'); let scssLoader = config.module.rules.find(i => !!'a.scss'.match(i.test)); - scssLoader.use = ['to-string-loader', ...scssLoader.use]; + if (scssLoader && scssLoader.use) { + scssLoader.use = ['to-string-loader', ...scssLoader.use]; + } let htmlLoader = config.module.rules.find(i => !!'a.html'.match(i.test)); - htmlLoader.loader = 'html-loader'; + if (htmlLoader) { + 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 index b5d205ffe8..1fb3e7ea19 100644 --- a/packages/storybook/src/schematics/configuration/schema.d.ts +++ b/packages/storybook/src/schematics/configuration/schema.d.ts @@ -1,6 +1,5 @@ export interface StorybookConfigureSchema { name: string; + uiFramework: 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 index 39ae7ee77a..048c886216 100644 --- a/packages/storybook/src/schematics/configuration/schema.json +++ b/packages/storybook/src/schematics/configuration/schema.json @@ -11,17 +11,16 @@ "index": 0 } }, + "uiFramework": { + "type": "string", + "description": "Storybook UI Framework to use", + "enum": ["@storybook/angular", "@storybook/react", "@storybook/web"], + "x-prompt": "What UI framework plugin should storybook use?" + }, "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" + "description": "Run the cypress-configure schematic", + "x-prompt": "Configure a cypress e2e app to run against the storybook instance?" } }, "required": ["name"] diff --git a/packages/storybook/src/schematics/ng-add/ng-add.ts b/packages/storybook/src/schematics/ng-add/ng-add.ts index 2399dd2def..a13c4394cb 100644 --- a/packages/storybook/src/schematics/ng-add/ng-add.ts +++ b/packages/storybook/src/schematics/ng-add/ng-add.ts @@ -13,8 +13,7 @@ import { import { babelCoreVersion, babelLoaderVersion, - storybookAddonKnobsVersion, - storybookAngularVersion + storybookVersion } from '../../utils/versions'; import { Schema } from './schema'; import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; @@ -27,8 +26,9 @@ function checkDependenciesInstalled(): Rule { context.addTask(new NodePackageInstallTask()); dependencyList.push( { name: '@nrwl/storybook', version: '*' }, - { name: '@storybook/angular', version: storybookAngularVersion }, - { name: '@storybook/addon-knobs', version: storybookAddonKnobsVersion }, + { name: '@storybook/angular', version: storybookVersion }, + { name: '@storybook/react', version: storybookVersion }, + { name: '@storybook/addon-knobs', version: storybookVersion }, { name: 'babel-loader', version: babelLoaderVersion }, { name: '@babel/core', version: babelCoreVersion }, { name: 'to-string-loader', version: '*' }, diff --git a/packages/storybook/src/utils/versions.ts b/packages/storybook/src/utils/versions.ts index f8a5aa1679..0c77adeb1f 100644 --- a/packages/storybook/src/utils/versions.ts +++ b/packages/storybook/src/utils/versions.ts @@ -1,4 +1,3 @@ -export const storybookAngularVersion = '5.2.5'; -export const storybookAddonKnobsVersion = '5.2.5'; +export const storybookVersion = '5.2.5'; export const babelCoreVersion = '7.5.4'; export const babelLoaderVersion = '8.0.6'; diff --git a/yarn.lock b/yarn.lock index 9090ecdd88..f61d0488e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -312,7 +312,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.1", "@babel/core@^7.1.0": +"@babel/core@7.6.0", "@babel/core@^7.0.1", "@babel/core@^7.1.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== @@ -332,6 +332,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.0.0", "@babel/core@^7.4.5": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" + integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.4" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.4" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.3" + "@babel/types" "^7.6.3" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.4.0", "@babel/generator@^7.4.4", "@babel/generator@^7.5.5", "@babel/generator@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" @@ -343,6 +363,16 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== + dependencies: + "@babel/types" "^7.6.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -527,6 +557,15 @@ "@babel/traverse" "^7.6.0" "@babel/types" "^7.6.0" +"@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + "@babel/highlight@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" @@ -541,6 +580,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== +"@babel/parser@^7.6.3", "@babel/parser@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -575,6 +619,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-decorators" "^7.2.0" +"@babel/plugin-proposal-decorators@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.6.0.tgz#6659d2572a17d70abd68123e89a12a43d90aa30c" + integrity sha512-ZSyYw9trQI50sES6YxREXKu+4b7MAg6Qx2cvyDDYjP2Hpzd3FleOUwC9cqn1+za8d0A2ZU8SHujxFao956efUg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.6.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.2.0" + "@babel/plugin-proposal-dynamic-import@^7.5.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" @@ -599,7 +652,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@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": +"@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== @@ -645,6 +698,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" @@ -732,7 +792,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.4.4", "@babel/plugin-transform-destructuring@^7.5.0", "@babel/plugin-transform-destructuring@^7.6.0": +"@babel/plugin-transform-destructuring@7.6.0", "@babel/plugin-transform-destructuring@^7.4.4", "@babel/plugin-transform-destructuring@^7.5.0", "@babel/plugin-transform-destructuring@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== @@ -763,6 +823,22 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-flow-strip-types@7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7" + integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.6.3.tgz#8110f153e7360cfd5996eee68706cfad92d85256" + integrity sha512-l0ETkyEofkqFJ9LS6HChNIKtVJw2ylKbhYMlJ5C6df+ldxxaLIyXY4yOdDQQspfFpV8/vDiaWoJlvflstlYNxg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-transform-for-of@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" @@ -875,6 +951,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-react-constant-elements@^7.0.0": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.6.3.tgz#9fc9ea060b983c7c035acbe481cbe1fb1245bfff" + integrity sha512-1/YogSSU7Tby9rq2VCmhuRg+6pxsHy2rI7w/oo8RKoBt6uBUFG+mk6x13kK+FY1/ggN92HAfg7ADd1v1+NCOKg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@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" @@ -883,7 +967,7 @@ "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-react-display-name@^7.0.0": +"@babel/plugin-transform-react-display-name@7.2.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" integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== @@ -939,6 +1023,16 @@ resolve "^1.8.1" semver "^5.5.1" +"@babel/plugin-transform-runtime@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.6.0.tgz#85a3cce402b28586138e368fce20ab3019b9713e" + integrity sha512-Da8tMf7uClzwUm/pnJ1S93m/aRXmoYNDD7TkHua8xBDdaAs54uZpTWvEt6NGwmoVMb9mZbntfTqmG2oSzN/7Vg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + resolve "^1.8.1" + semver "^5.5.1" + "@babel/plugin-transform-shorthand-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" @@ -985,6 +1079,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" +"@babel/plugin-transform-typescript@^7.6.0": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.3.tgz#dddb50cf3b8b2ef70b22e5326e9a91f05a1db13b" + integrity sha512-aiWINBrPMSC3xTXRNM/dfmyYuPNKY/aexYqBgh0HBI5Y+WO5oRAqW/oROYeYHrF4Zw12r9rK4fMk/ZlAmqx/FQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.6.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.2.0" + "@babel/plugin-transform-unicode-regex@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" @@ -1104,7 +1207,7 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.4.5": +"@babel/preset-env@7.6.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== @@ -1160,6 +1263,14 @@ js-levenshtein "^1.1.3" semver "^5.5.0" +"@babel/preset-flow@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" + integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/preset-react@7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" @@ -1171,6 +1282,17 @@ "@babel/plugin-transform-react-jsx-self" "^7.0.0" "@babel/plugin-transform-react-jsx-source" "^7.0.0" +"@babel/preset-react@^7.0.0": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.6.3.tgz#d5242c828322520205ae4eda5d4f4f618964e2f6" + integrity sha512-07yQhmkZmRAfwREYIQgW0HEwMY9GBJVuPY4Q12UC72AbfaawuupVWa8zQs2tlL+yun45Nv/1KreII/0PLfEsgA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/preset-typescript@7.3.3": version "7.3.3" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" @@ -1179,6 +1301,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.3.2" +"@babel/preset-typescript@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz#25768cb8830280baf47c45ab1a519a9977498c98" + integrity sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.6.0" + "@babel/runtime-corejs2@7.4.5": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz#3d892f0560df21bafb384dd7727e33853e95d3c9" @@ -1201,7 +1331,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0": +"@babel/runtime@7.6.0", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@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== @@ -1246,6 +1376,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" + integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.3" + "@babel/types" "^7.6.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0": version "7.6.1" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" @@ -1255,6 +1400,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -2056,6 +2210,34 @@ pretty-hrtime "^1.0.3" regenerator-runtime "^0.12.1" +"@storybook/react@^5.2.5": + version "5.2.5" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.2.5.tgz#f0082d75b14a10642986c7934fcbc8ff855b07fe" + integrity sha512-yPOL0jBEfYo3YkRJkXnIzAQ3L9lTju27mg+0bW+y3lpJAM23ffAxrRyOGV7bzj99EA7dak2lw8Hj4yVHTplBdg== + dependencies: + "@babel/plugin-transform-react-constant-elements" "^7.2.0" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-react" "^7.0.0" + "@storybook/addons" "5.2.5" + "@storybook/core" "5.2.5" + "@storybook/node-logger" "5.2.5" + "@svgr/webpack" "^4.0.3" + "@types/webpack-env" "^1.13.7" + babel-plugin-add-react-displayname "^0.0.5" + babel-plugin-named-asset-import "^0.3.1" + babel-plugin-react-docgen "^3.0.0" + babel-preset-react-app "^9.0.0" + common-tags "^1.8.0" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + mini-css-extract-plugin "^0.7.0" + prop-types "^15.7.2" + react-dev-utils "^9.0.0" + regenerator-runtime "^0.12.1" + semver "^6.0.0" + webpack "^4.33.0" + "@storybook/router@5.2.5": version "5.2.5" resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.2.5.tgz#a005332bc6aa1e7849503187ad50c41b3f3bef92" @@ -2126,6 +2308,109 @@ telejson "^3.0.2" util-deprecate "^1.0.2" +"@svgr/babel-plugin-add-jsx-attribute@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" + integrity sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig== + +"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc" + integrity sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7" + integrity sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165" + integrity sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w== + +"@svgr/babel-plugin-svg-dynamic-title@^4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz#2cdedd747e5b1b29ed4c241e46256aac8110dd93" + integrity sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w== + +"@svgr/babel-plugin-svg-em-dimensions@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391" + integrity sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w== + +"@svgr/babel-plugin-transform-react-native-svg@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717" + integrity sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw== + +"@svgr/babel-plugin-transform-svg-component@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697" + integrity sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw== + +"@svgr/babel-preset@^4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.3.3.tgz#a75d8c2f202ac0e5774e6bfc165d028b39a1316c" + integrity sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0" + "@svgr/babel-plugin-svg-dynamic-title" "^4.3.3" + "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0" + "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0" + "@svgr/babel-plugin-transform-svg-component" "^4.2.0" + +"@svgr/core@^4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.3.3.tgz#b37b89d5b757dc66e8c74156d00c368338d24293" + integrity sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w== + dependencies: + "@svgr/plugin-jsx" "^4.3.3" + camelcase "^5.3.1" + cosmiconfig "^5.2.1" + +"@svgr/hast-util-to-babel-ast@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz#1d5a082f7b929ef8f1f578950238f630e14532b8" + integrity sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg== + dependencies: + "@babel/types" "^7.4.4" + +"@svgr/plugin-jsx@^4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz#e2ba913dbdfbe85252a34db101abc7ebd50992fa" + integrity sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w== + dependencies: + "@babel/core" "^7.4.5" + "@svgr/babel-preset" "^4.3.3" + "@svgr/hast-util-to-babel-ast" "^4.3.2" + svg-parser "^2.0.0" + +"@svgr/plugin-svgo@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz#daac0a3d872e3f55935c6588dd370336865e9e32" + integrity sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w== + dependencies: + cosmiconfig "^5.2.1" + merge-deep "^3.0.2" + svgo "^1.2.2" + +"@svgr/webpack@^4.0.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-4.3.3.tgz#13cc2423bf3dff2d494f16b17eb7eacb86895017" + integrity sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg== + dependencies: + "@babel/core" "^7.4.5" + "@babel/plugin-transform-react-constant-elements" "^7.0.0" + "@babel/preset-env" "^7.4.5" + "@babel/preset-react" "^7.0.0" + "@svgr/core" "^4.3.3" + "@svgr/plugin-jsx" "^4.3.3" + "@svgr/plugin-svgo" "^4.3.1" + loader-utils "^1.2.3" + "@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" @@ -2500,6 +2785,11 @@ dependencies: source-map "^0.6.1" +"@types/webpack-env@^1.13.7": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.1.tgz#0d8a53f308f017c53a5ddc3d07f4d6fa76b790d7" + integrity sha512-0Ki9jAAhKDSuLDXOIMADg54Hu60SuBTEsWaJGGy5cV+SSUQ63J2a+RrYYGrErzz39fXzTibhKrAQJAb8M7PNcA== + "@types/webpack-sources@*", "@types/webpack-sources@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" @@ -3287,6 +3577,16 @@ ast-types-flow@0.0.7, ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= +ast-types@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" + integrity sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA== + +ast-types@0.12.4: + version "0.12.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.4.tgz#71ce6383800f24efc9a1a3308f3a6e420a0974d1" + integrity sha512-ky/YVYCbtVAS8TdMIaTiPFHwEpRB5z1hctepJplTr3UW5q8TDrpIMCILyk8pmLxGtn2KCtC/lSn7zOsaI7nzDw== + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -3326,7 +3626,7 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.1.5, async@^2.5.0, async@^2.6.2: +async@^2.1.4, async@^2.1.5, async@^2.5.0, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -3645,7 +3945,7 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-dynamic-import-node@^2.3.0: +babel-plugin-dynamic-import-node@2.3.0, babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== @@ -3786,6 +4086,20 @@ babel-plugin-minify-type-constructors@^0.4.3: dependencies: babel-helper-is-void-0 "^0.4.3" +babel-plugin-named-asset-import@^0.3.1: + version "0.3.4" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.4.tgz#4a8fc30e9a3e2b1f5ed36883386ab2d84e1089bd" + integrity sha512-S6d+tEzc5Af1tKIMbsf2QirCcPdQ+mKUCY2H1nJj1DyA1ShwpsoxEOAwbWsG5gcXNV/olpvQd9vrUWRx4bnhpw== + +babel-plugin-react-docgen@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-3.2.0.tgz#c072364d61d1f6bb19a6ca81734fc270870e8b96" + integrity sha512-MZ3fhnJ+/tUDhWFGgWsajuLct/dD1xoprmStqrBgtt9flFLPrKIOKOfqwjXjsn6/THs5QrG5rkcDFE3TMMZDjQ== + dependencies: + lodash "^4.17.15" + react-docgen "^4.1.1" + recast "^0.14.7" + "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" @@ -4189,6 +4503,28 @@ babel-preset-jest@^24.9.0: babel-plugin-transform-undefined-to-void "^6.9.4" lodash "^4.17.11" +babel-preset-react-app@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-9.0.2.tgz#247d37e883d6d6f4b4691e5f23711bb2dd80567d" + integrity sha512-aXD+CTH8Chn8sNJr4tO/trWKqe5sSE4hdO76j9fhVezJSzmpWYWUSc5JoPmdSxADwef5kQFNGKXd433vvkd2VQ== + dependencies: + "@babel/core" "7.6.0" + "@babel/plugin-proposal-class-properties" "7.5.5" + "@babel/plugin-proposal-decorators" "7.6.0" + "@babel/plugin-proposal-object-rest-spread" "7.5.5" + "@babel/plugin-syntax-dynamic-import" "7.2.0" + "@babel/plugin-transform-destructuring" "7.6.0" + "@babel/plugin-transform-flow-strip-types" "7.4.4" + "@babel/plugin-transform-react-display-name" "7.2.0" + "@babel/plugin-transform-runtime" "7.6.0" + "@babel/preset-env" "7.6.0" + "@babel/preset-react" "7.0.0" + "@babel/preset-typescript" "7.6.0" + "@babel/runtime" "7.6.0" + babel-plugin-dynamic-import-node "2.3.0" + babel-plugin-macros "2.6.1" + babel-plugin-transform-react-remove-prop-types "0.4.24" + 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" @@ -5187,6 +5523,17 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +clone-deep@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" + integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY= + dependencies: + for-own "^0.1.3" + is-plain-object "^2.0.1" + kind-of "^3.0.2" + lazy-cache "^1.0.3" + shallow-clone "^0.1.2" + clone-deep@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8" @@ -7489,7 +7836,7 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -8179,7 +8526,7 @@ for-in@^1.0.1, for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^0.1.4: +for-own@^0.1.3, for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= @@ -11097,6 +11444,11 @@ 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-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + 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" @@ -11802,6 +12154,15 @@ merge-anything@^2.2.4: dependencies: is-what "^3.3.1" +merge-deep@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" + integrity sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA== + dependencies: + arr-union "^3.1.0" + clone-deep "^0.2.4" + kind-of "^3.0.2" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -11975,6 +12336,16 @@ mini-css-extract-plugin@0.8.0: schema-utils "^1.0.0" webpack-sources "^1.1.0" +mini-css-extract-plugin@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" + integrity sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -12340,6 +12711,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-dir@^0.1.10: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= + dependencies: + minimatch "^3.0.2" + node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -13982,7 +14360,7 @@ prismjs@^1.8.4, prismjs@~1.17.0: optionalDependencies: clipboard "^2.0.0" -private@^0.1.6, private@^0.1.8: +private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -14361,6 +14739,19 @@ react-dev-utils@^9.0.0: strip-ansi "5.2.0" text-table "0.2.0" +react-docgen@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-4.1.1.tgz#8fef0212dbf14733e09edecef1de6b224d87219e" + integrity sha512-o1wdswIxbgJRI4pckskE7qumiFyqkbvCO++TylEDOo2RbMiueIOg8YzKU4X9++r0DjrbXePw/LHnh81GRBTWRw== + dependencies: + "@babel/core" "^7.0.0" + "@babel/runtime" "^7.0.0" + async "^2.1.4" + commander "^2.19.0" + doctrine "^3.0.0" + node-dir "^0.1.10" + recast "^0.17.3" + react-dom@16.10.2: version "16.10.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.2.tgz#4840bce5409176bc3a1f2bd8cb10b92db452fda6" @@ -14751,6 +15142,26 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +recast@^0.14.7: + version "0.14.7" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d" + integrity sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A== + dependencies: + ast-types "0.11.3" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.17.3: + version "0.17.6" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.6.tgz#64ae98d0d2dfb10ff92ff5fb9ffb7371823b69fa" + integrity sha512-yoQRMRrK1lszNtbkGyM4kN45AwylV5hMiuEveUBlxytUViWevjvX6w+tzJt1LH4cfUhWt4NZvy3ThIhu6+m5wQ== + dependencies: + ast-types "0.12.4" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -16646,7 +17057,12 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -svgo@^1.0.0: +svg-parser@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.2.tgz#d134cc396fa2681dc64f518330784e98bd801ec8" + integrity sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg== + +svgo@^1.0.0, svgo@^1.2.2: version "1.3.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==