Merge remote-tracking branch 'origin/master' into webpack-4

# Conflicts:
#	app/polymer/package.json
#	app/react/package.json
#	app/vue/package.json
#	lib/core/package.json
#	lib/core/src/server/config/defaults/webpack.config.js
#	yarn.lock
This commit is contained in:
Hypnosphi 2018-03-23 12:10:42 +03:00
commit 9be830c69b
52 changed files with 1015 additions and 700 deletions

View File

@ -1,4 +1,5 @@
### Issue details
If you are reporting a bug or requesting support, start here:
### Bug or support request summary
_Please provide issue details here - What did you expect to happen? What happened instead?_
@ -24,3 +25,23 @@ _(A screencast can be useful for visual bugs, but it is not a substitute for a t
```js
// code here
```
End bug report support request - delete the rest below
If you are creating a issue to track work to be completed, start here:
### Work summary
_Please provide a description of the work to be completed here - Include some context as to why something needs to be done and link any related tickets._
### Where to start
_Please list the file(s) a contributor needs to figure out where to start work and include any docs or tutorials that may be applicable._
### Acceptance criteria
_Please include a checklist of the requirements necessary to close this ticket. The work should be narrowly scoped and limited to a few hours worth by an experienced developer at the most._
### Who to contact
_Add yourself and/or people who are familiar with the code changes and requirements. These people should be able to review the completed code._
End work issue - please tag this issue with the correct status and type labels

View File

@ -100,7 +100,7 @@ See [Addon / Framework Support Table](ADDONS_SUPPORT.md)
## Live Examples
### 3.4.alpha
### 4.0.alpha
> Note, this is an Alpha version. Some of the features still might not be released
- [React Official](https://storybooks-official.netlify.com)
@ -108,6 +108,12 @@ See [Addon / Framework Support Table](ADDONS_SUPPORT.md)
- [Angular](https://storybooks-angular.netlify.com/)
- [Polymer](https://storybooks-polymer.netlify.com/)
### 3.4
- [React Official](https://release-3-4--storybooks-official.netlify.com)
- [Vue](https://release-3-4--storybooks-vue.netlify.com/)
- [Angular](https://release-3-4--storybooks-angular.netlify.com/)
- [Polymer](https://release-3-4--storybooks-polymer.netlify.com/)
### 3.3
- [React Official](https://release-3-3--storybooks-official.netlify.com)
- [Vue](https://release-3-3--storybooks-vue.netlify.com/)

View File

@ -0,0 +1,32 @@
import { Component } from '@angular/core';
import { Store, StoreModule } from '@ngrx/store';
import { storiesOf, moduleMetadata } from '@storybook/angular';
@Component({
selector: 'storybook-comp-with-store',
template: '<div>{{this.getSotreState()}}</div>',
})
class WithStoreComponent {
private store: Store<any>;
constructor(store: Store<any>) {
this.store = store;
}
getSotreState(): string {
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
}
}
storiesOf('ngrx|Store', module)
.addDecorator(
moduleMetadata({
imports: [StoreModule.forRoot({})],
declarations: [WithStoreComponent],
})
)
.add('With component', () => {
return {
component: WithStoreComponent,
};
});

View File

@ -0,0 +1,39 @@
/* global window */
/* eslint-disable global-require, import/no-dynamic-require */
import React from 'react';
@Component({
selector: 'storybook-comp-with-store',
template: '<div>{{this.getSotreState()}}</div>',
})
class WithStoreComponent {
private store: Store<any>;
constructor(store: Store<any>) {
this.store = store;
}
getSotreState(): string {
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
}
}
/*
eslint-disable some kind
of multi line ignore, though
I'm not sure it's possible.
*/
import { storiesOf } from '@storybook/react';
/* eslint-disable-line */ const x = 0;
// eslint-disable-line
storiesOf('Foo', module)
.add('bar', () => <div>baz</div>);
/*
This is actually a good comment that will help
users to understand what's going on here.
*/

View File

@ -1,5 +0,0 @@
import React from 'react';
const ObjectType = () => <span>{}</span>;
export default ObjectType;

View File

@ -1,5 +0,0 @@
import React from 'react';
const ObjectType = () => <span>{}</span>;
export default ObjectType;

View File

@ -1,7 +1,6 @@
import PropTypes from 'prop-types';
import React from 'react';
import ObjectType from './ObjectType';
import Shape from './Shape';
import OneOfType from './OneOfType';
import ArrayOf from './ArrayOf';
@ -20,7 +19,6 @@ const propTypeComponentMap = new Map([
['arrayOf', ArrayOf],
['objectOf', ObjectOf],
// Might be overkill to have below proptypes as separate components *shrug*
['object', ObjectType],
['literal', Literal],
['enum', OneOf],
['instanceOf', InstanceOf],

View File

@ -36,6 +36,7 @@ import '@storybook/addon-knobs/register'
Now, write your stories with knobs.
### With React
```js
import { storiesOf } from '@storybook/react';
import { withKnobs, text, boolean, number } from '@storybook/addon-knobs/react';
@ -63,6 +64,28 @@ stories.add('as dynamic variables', () => {
});
```
### With Angular
```js
import { storiesOf } from '@storybook/angular';
import { boolean, number, text, withKnobs } from '@storybook/addon-knobs/angular';
import { Button } from '@storybook/angular/demo';
const stories = storiesOf('Storybook Knobs', module);
// "withKnobs" decorator should be applied before the stories using knobs
stories.addDecorator(withKnobs);
// Knobs for Angular props
stories.add('with text', () => ({
component: Button,
props: {
text: text('text', 'Hello Button'), // The first param of the knob function has to be exactly the same as the component input.
},
}));
```
Categorize your knobs by assigning them a `groupId`. When a `groupId` exists, tabs will appear in the knobs storybook panel to filter between the groups. Knobs without a `groupId` are automatically categorized into the `ALL` group.
```
// Knob assigned a groupId.

View File

@ -21,7 +21,7 @@
},
"dependencies": {
"babel-runtime": "^6.26.0",
"marked": "^0.3.17",
"marked": "^0.3.18",
"prop-types": "^15.6.1",
"util-deprecate": "^1.0.2"
},

View File

@ -349,7 +349,7 @@ Run a custom test function for each story, rather than the default (a vanilla sn
### `renderer`
Pass a custom renderer (such as enzymes `mount`) to record snapshots.
Pass a custom renderer (such as enzymes `mount`) to record snapshots. Note that setting `test` overrides `renderer`.
```js
import initStoryshots from '@storybook/addon-storyshots';

View File

@ -53,7 +53,7 @@ export default function testStorySnapshots(options = {}) {
serializer: options.serializer,
};
const testMethod = options.test || snapshotWithOptions({ options: snapshotOptions });
const testMethod = options.test || snapshotWithOptions(snapshotOptions);
methods.forEach(method => {
if (typeof testMethod[method] === 'function') {

View File

@ -1,144 +1,212 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots Another Button with some emoji 1`] = `
<button
className="css-1yjiefr"
<Button
onClick={[Function]}
>
<span
aria-label="so cool"
role="img"
<Component
className="css-1yjiefr"
onClick={[Function]}
>
😀 😎 👍 💯
</span>
</button>
<button
className="css-1yjiefr"
onClick={[Function]}
>
<span
aria-label="so cool"
role="img"
>
😀 😎 👍 💯
</span>
</button>
</Component>
</Button>
`;
exports[`Storyshots Another Button with text 1`] = `
<button
className="css-1yjiefr"
<Button
onClick={[Function]}
>
Hello Button
</button>
<Component
className="css-1yjiefr"
onClick={[Function]}
>
<button
className="css-1yjiefr"
onClick={[Function]}
>
Hello Button
</button>
</Component>
</Button>
`;
exports[`Storyshots Button with some emoji 1`] = `
<button
className="css-1yjiefr"
<Button
onClick={[Function]}
>
<span
aria-label="so cool"
role="img"
<Component
className="css-1yjiefr"
onClick={[Function]}
>
😀 😎 👍 💯
</span>
</button>
<button
className="css-1yjiefr"
onClick={[Function]}
>
<span
aria-label="so cool"
role="img"
>
😀 😎 👍 💯
</span>
</button>
</Component>
</Button>
`;
exports[`Storyshots Button with text 1`] = `
<button
className="css-1yjiefr"
<Button
onClick={[Function]}
>
Hello Button
</button>
<Component
className="css-1yjiefr"
onClick={[Function]}
>
<button
className="css-1yjiefr"
onClick={[Function]}
>
Hello Button
</button>
</Component>
</Button>
`;
exports[`Storyshots Welcome to Storybook 1`] = `
<article
className="css-1fqbdip"
<Welcome
showApp={[Function]}
showKind={null}
showStory={null}
>
<h1
className="css-nil"
>
Welcome to storybook
</h1>
<p>
This is a UI component dev environment for your app.
</p>
<p>
We've added some basic stories inside the
<code
className="css-mteq83"
<glamorous(article)>
<article
className="css-1fqbdip"
>
src/stories
</code>
directory.
<br />
A story is a single state of one or more UI components. You can have as many stories as you want.
<br />
(Basically a story is like a visual test case.)
</p>
<p>
See these sample
<button
className="css-1opliz7"
onClick={[Function]}
>
stories
</button>
for a component called
<code
className="css-mteq83"
>
Button
</code>
.
</p>
<p>
Just like that, you can add your own components as stories.
<br />
You can also edit those components and see changes right away.
<br />
(Try editing the
<code
className="css-mteq83"
>
Button
</code>
stories located at
<code
className="css-mteq83"
>
src/stories/index.js
</code>
.)
</p>
<p>
Usually we create stories with smaller UI components in the app.
<br />
Have a look at the
<a
className="css-ca0824"
href="https://storybook.js.org/basics/writing-stories"
rel="noopener noreferrer"
target="_blank"
>
Writing Stories
</a>
section in our documentation.
</p>
<p
className="css-bwdon3"
>
<b>
NOTE:
</b>
<br />
Have a look at the
<code
className="css-mteq83"
>
.storybook/webpack.config.js
</code>
to add webpack loaders and plugins you are using in this project.
</p>
</article>
<glamorous(h1)>
<h1
className="css-nil"
>
Welcome to storybook
</h1>
</glamorous(h1)>
<p>
This is a UI component dev environment for your app.
</p>
<p>
We've added some basic stories inside the
<glamorous(code)>
<code
className="css-mteq83"
>
src/stories
</code>
</glamorous(code)>
directory.
<br />
A story is a single state of one or more UI components. You can have as many stories as you want.
<br />
(Basically a story is like a visual test case.)
</p>
<p>
See these sample
<glamorous(glamorous(glamorous(a)))
onClick={[Function]}
>
<button
className="css-1opliz7"
onClick={[Function]}
>
stories
</button>
</glamorous(glamorous(glamorous(a)))>
for a component called
<glamorous(code)>
<code
className="css-mteq83"
>
Button
</code>
</glamorous(code)>
.
</p>
<p>
Just like that, you can add your own components as stories.
<br />
You can also edit those components and see changes right away.
<br />
(Try editing the
<glamorous(code)>
<code
className="css-mteq83"
>
Button
</code>
</glamorous(code)>
stories located at
<glamorous(code)>
<code
className="css-mteq83"
>
src/stories/index.js
</code>
</glamorous(code)>
.)
</p>
<p>
Usually we create stories with smaller UI components in the app.
<br />
Have a look at the
<glamorous(a)
href="https://storybook.js.org/basics/writing-stories"
rel="noopener noreferrer"
target="_blank"
>
<a
className="css-ca0824"
href="https://storybook.js.org/basics/writing-stories"
rel="noopener noreferrer"
target="_blank"
>
Writing Stories
</a>
</glamorous(a)>
section in our documentation.
</p>
<glamorous(p)>
<p
className="css-bwdon3"
>
<b>
NOTE:
</b>
<br />
Have a look at the
<glamorous(code)>
<code
className="css-mteq83"
>
.storybook/webpack.config.js
</code>
</glamorous(code)>
to add webpack loaders and plugins you are using in this project.
</p>
</glamorous(p)>
</article>
</glamorous(article)>
</Welcome>
`;

View File

@ -21,10 +21,6 @@
},
"dependencies": {
"@storybook/components": "3.4.0-rc.3",
"acorn": "^5.5.3",
"acorn-es7": "^0.1.0",
"acorn-jsx": "^4.1.1",
"acorn-stage3": "^0.6.0",
"babel-runtime": "^6.26.0",
"estraverse": "^4.2.0",
"loader-utils": "^1.1.0",

View File

@ -34,6 +34,56 @@ storiesOf('Custom|ng-content', module).addDecorator(withStorySource(__STORY__, _
"
`;
exports[`inject-decorator positive - ts calculates "adds" map 1`] = `
Object {
"ngrx|Store@With component": Object {
"endLoc": Object {
"col": 3,
"line": 32,
},
"startLoc": Object {
"col": 7,
"line": 28,
},
},
}
`;
exports[`inject-decorator positive - ts injects stories decorator after the all "storiesOf" functions 1`] = `
"import { Component } from '@angular/core';
import { Store, StoreModule } from '@ngrx/store';
import { storiesOf, moduleMetadata } from '@storybook/angular';
@Component({
selector: 'storybook-comp-with-store',
template: '<div>{{this.getSotreState()}}</div>',
})
class WithStoreComponent {
private store: Store<any>;
constructor(store: Store<any>) {
this.store = store;
}
getSotreState(): string {
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
}
}
storiesOf('ngrx|Store', module).addDecorator(withStorySource(__STORY__, __ADDS_MAP__))
.addDecorator(
moduleMetadata({
imports: [StoreModule.forRoot({})],
declarations: [WithStoreComponent],
})
)
.add('With component', () => {
return {
component: WithStoreComponent,
};
});"
`;
exports[`inject-decorator positive calculates "adds" map 1`] = `
Object {
"Addons|Info.Decorator@Use Info as story decorator": Object {
@ -336,6 +386,38 @@ storiesOf('Addons|Info.GitHub issues', module).addDecorator(withStorySource(__ST
"
`;
exports[`inject-decorator stories with ugly comments in ts should delete ugly comments from the generated story source 1`] = `
"import React from 'react';
@Component({
selector: 'storybook-comp-with-store',
template: '<div>{{this.getSotreState()}}</div>',
})
class WithStoreComponent {
private store: Store<any>;
constructor(store: Store<any>) {
this.store = store;
}
getSotreState(): string {
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
}
}
import { storiesOf } from '@storybook/react';
const x = 0;
storiesOf('Foo', module).add('bar', () => <div>baz</div>);
/*
This is actually a good comment that will help
users to understand what's going on here.
*/
"
`;
exports[`inject-decorator stories with ugly comments should delete ugly comments from the generated story source 1`] = `
"import React from 'react';

View File

@ -1,24 +1,7 @@
import prettier from 'prettier';
import { handleADD, handleSTORYOF } from './parse-helpers';
const estraverse = require('estraverse');
const acorn = require('acorn');
require('acorn-stage3/inject')(acorn);
require('acorn-jsx/inject')(acorn);
require('acorn-es7')(acorn);
const acornConfig = {
ecmaVersion: '9',
sourceType: 'module',
ranges: true,
locations: true,
plugins: {
jsx: true,
stage3: true,
es7: true,
},
};
import { patchNode } from './parse-helpers';
import { splitSTORYOF, findAddsMap } from './traverse-helpers';
import getParser from './parsers';
function isUglyComment(comment, uglyCommentsRegex) {
return uglyCommentsRegex.some(regex => regex.test(comment));
@ -30,6 +13,7 @@ function generateSourceWithoutUglyComments(source, { comments, uglyCommentsRegex
comments
.filter(comment => isUglyComment(comment.value.trim(), uglyCommentsRegex))
.map(patchNode)
.forEach(comment => {
parts.pop();
@ -43,55 +27,41 @@ function generateSourceWithoutUglyComments(source, { comments, uglyCommentsRegex
return parts.join('');
}
function prettifyCode(source, { prettierConfig }) {
return prettier.format(source, prettierConfig);
function prettifyCode(source, { prettierConfig, parser }) {
let config = prettierConfig;
if (!config.parser && parser && parser !== 'javascript') {
config = {
...prettierConfig,
parser,
};
}
return prettier.format(source, config);
}
export function generateSourceWithDecorators(source, decorator) {
const comments = [];
export function generateSourceWithDecorators(source, decorator, parserType) {
const parser = getParser(parserType);
const ast = parser.parse(source);
const config = {
...acornConfig,
onComment: comments,
};
const { comments = [] } = ast;
const ast = acorn.parse(source, config);
let lastIndex = 0;
const parts = [source];
estraverse.traverse(ast, {
fallback: 'iteration',
enter: node => {
if (node.type === 'CallExpression') {
lastIndex = handleSTORYOF(node, parts, source, lastIndex);
}
},
});
const parts = splitSTORYOF(ast, source);
const newSource = parts.join(decorator);
return {
changed: lastIndex > 0,
changed: parts.length > 1,
source: newSource,
comments,
};
}
export function generateAddsMap(source) {
const ast = acorn.parse(source, acornConfig);
const adds = {};
export function generateAddsMap(source, parserType) {
const parser = getParser(parserType);
const ast = parser.parse(source);
estraverse.traverse(ast, {
fallback: 'iteration',
enter: (node, parent) => {
if (node.type === 'MemberExpression') {
handleADD(node, parent, adds);
}
},
});
return adds;
return findAddsMap(ast);
}
export function generateStorySource({ source, ...options }) {

View File

@ -16,7 +16,11 @@ function extendOptions(source, comments, options) {
}
function inject(source, decorator, options = {}) {
const { changed, source: newSource, comments } = generateSourceWithDecorators(source, decorator);
const { changed, source: newSource, comments } = generateSourceWithDecorators(
source,
decorator,
options.parser
);
if (!changed) {
return {
@ -27,7 +31,7 @@ function inject(source, decorator, options = {}) {
}
const storySource = generateStorySource(extendOptions(source, comments, options));
const addsMap = generateAddsMap(storySource);
const addsMap = generateAddsMap(storySource, options.parser);
return {
source: newSource,

View File

@ -23,7 +23,24 @@ describe('inject-decorator', () => {
describe('positive - angular', () => {
const source = fs.readFileSync('./__mocks__/inject-decorator.angular-stories.txt', 'utf-8');
const result = injectDecorator(source, ADD_DECORATOR_STATEMENT);
const result = injectDecorator(source, ADD_DECORATOR_STATEMENT, { parser: 'typescript' });
it('returns "changed" flag', () => {
expect(result.changed).toBeTruthy();
});
it('injects stories decorator after the all "storiesOf" functions', () => {
expect(result.source).toMatchSnapshot();
});
it('calculates "adds" map', () => {
expect(result.addsMap).toMatchSnapshot();
});
});
describe('positive - ts', () => {
const source = fs.readFileSync('./__mocks__/inject-decorator.ts.txt', 'utf-8');
const result = injectDecorator(source, ADD_DECORATOR_STATEMENT, { parser: 'typescript' });
it('returns "changed" flag', () => {
expect(result.changed).toBeTruthy();
@ -50,6 +67,18 @@ describe('inject-decorator', () => {
});
});
describe('stories with ugly comments in ts', () => {
const source = fs.readFileSync(
'./__mocks__/inject-decorator.ts.ugly-comments-stories.txt',
'utf-8'
);
const result = injectDecorator(source, ADD_DECORATOR_STATEMENT, { parser: 'typescript' });
it('should delete ugly comments from the generated story source', () => {
expect(result.storySource).toMatchSnapshot();
});
});
it('will not change the source when there are no "storiesOf" functions', () => {
const source = fs.readFileSync('./__mocks__/inject-decorator.no-stories.txt', 'utf-8');

View File

@ -15,7 +15,7 @@ function getKindFromStoryOfNode(object) {
const kindArgument = object.arguments[0];
if (kindArgument.type === 'Literal') {
if (kindArgument.type === 'Literal' || kindArgument.type === 'StringLiteral') {
return kindArgument.value;
}
@ -41,6 +41,24 @@ function findRelatedKind(object) {
return findRelatedKind(object.callee.object);
}
export function patchNode(node) {
if (node.range && node.range.length === 2 && node.start === undefined && node.end === undefined) {
const [start, end] = node.range;
// eslint-disable-next-line no-param-reassign
node.start = start;
// eslint-disable-next-line no-param-reassign
node.end = end;
}
if (!node.range && node.start !== undefined && node.end !== undefined) {
// eslint-disable-next-line no-param-reassign
node.range = [node.start, node.end];
}
return node;
}
export function handleADD(node, parent, adds) {
if (!node.property || !node.property.name || node.property.name.indexOf('add') !== 0) {
return;
@ -55,8 +73,8 @@ export function handleADD(node, parent, adds) {
const storyName = addArgs[0];
const lastArg = addArgs[addArgs.length - 1];
if (storyName.type !== 'Literal') {
// if story name is not literal, it much harder to extract it
if (storyName.type !== 'Literal' && storyName.type !== 'StringLiteral') {
// if story name is not literal, it's much harder to extract it
return;
}

View File

@ -0,0 +1,15 @@
function getParser(type) {
if (type === 'javascript' || !type) {
// eslint-disable-next-line global-require
return require('./parser-js').default;
}
if (type === 'typescript') {
// eslint-disable-next-line global-require
return require('./parser-ts').default;
}
throw new Error(`Parser of type "${type}" is not supported`);
}
export default getParser;

View File

@ -0,0 +1,9 @@
import parseJs from 'prettier/parser-babylon';
function parse(source) {
return parseJs(source);
}
export default {
parse,
};

View File

@ -0,0 +1,9 @@
import parseTs from 'prettier/parser-typescript';
function parse(source) {
return parseTs(source);
}
export default {
parse,
};

View File

@ -0,0 +1,38 @@
import { handleADD, handleSTORYOF, patchNode } from './parse-helpers';
const estraverse = require('estraverse');
export function splitSTORYOF(ast, source) {
let lastIndex = 0;
const parts = [source];
estraverse.traverse(ast, {
fallback: 'iteration',
enter: node => {
patchNode(node);
if (node.type === 'CallExpression') {
lastIndex = handleSTORYOF(node, parts, source, lastIndex);
}
},
});
return parts;
}
export function findAddsMap(ast) {
const adds = {};
estraverse.traverse(ast, {
fallback: 'iteration',
enter: (node, parent) => {
patchNode(node);
if (node.type === 'MemberExpression') {
handleADD(node, parent, adds);
}
},
});
return adds;
}

View File

@ -49,7 +49,6 @@
"react": "^16.0.0",
"react-dev-utils": "zanettin/react-dev-utils",
"react-dom": "^16.0.0",
"redux": "^3.6.0",
"sass-loader": "^6.0.7",
"ts-loader": "^4.1.0",
"util-deprecate": "^1.0.2",

View File

@ -1,30 +1,9 @@
import { window, navigator } from 'global';
import { createStore } from 'redux';
import addons from '@storybook/addons';
import createChannel from '@storybook/channel-postmessage';
import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events';
import {
StoryStore,
ClientApi,
ConfigApi,
Actions,
reducer,
syncUrlWithStore,
} from '@storybook/core/client';
import { start } from '@storybook/core/client';
import render from './render';
// check whether we're running on node/browser
const isBrowser =
navigator &&
navigator.userAgent &&
navigator.userAgent !== 'storyshots' &&
!(navigator.userAgent.indexOf('Node.js') > -1) &&
!(navigator.userAgent.indexOf('jsdom') > -1);
const { clientApi, configApi, forceReRender } = start(render);
const storyStore = new StoryStore();
const reduxStore = createStore(reducer);
const context = { storyStore, reduxStore };
const clientApi = new ClientApi(context);
export const {
storiesOf,
setAddon,
@ -34,39 +13,5 @@ export const {
getStorybook,
} = clientApi;
let channel;
if (isBrowser) {
// create preview channel
channel = createChannel({ page: 'preview' });
channel.on('setCurrentStory', data => {
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
});
addons.setChannel(channel);
Object.assign(context, { channel });
syncUrlWithStore(reduxStore);
// Handle keyboard shortcuts
window.onkeydown = handleKeyboardShortcuts(channel);
}
// Provide access to external scripts if `window` is defined.
// NOTE this is different to isBrowser, primarily for the JSDOM use case
if (typeof window !== 'undefined') {
window.__STORYBOOK_CLIENT_API__ = clientApi;
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
}
const configApi = new ConfigApi({ ...context, clearDecorators });
export const { configure } = configApi;
// initialize the UI
const renderUI = () => {
if (isBrowser) {
render(context);
}
};
reduxStore.subscribe(renderUI);
export const forceReRender = () => render(context, true);
export { forceReRender };

View File

@ -28,7 +28,7 @@
"@storybook/core": "3.4.0-rc.3",
"@storybook/node-logger": "3.4.0-rc.3",
"@storybook/ui": "3.4.0-rc.3",
"@webcomponents/webcomponentsjs": "^1.1.0",
"@webcomponents/webcomponentsjs": "^1.1.1",
"airbnb-js-shims": "^1.4.1",
"babel-loader": "^7.1.4",
"babel-plugin-macros": "^2.2.0",
@ -51,7 +51,6 @@
"react": "^16.0.0",
"react-dev-utils": "zanettin/react-dev-utils",
"react-dom": "^16.0.0",
"redux": "^3.7.2",
"util-deprecate": "^1.0.2",
"webpack": "^4.1.1",
"webpack-hot-middleware": "^2.21.2"

View File

@ -1,32 +1,9 @@
import { createStore } from 'redux';
import addons from '@storybook/addons';
import { navigator, window } from 'global';
import createChannel from '@storybook/channel-postmessage';
import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events';
import {
StoryStore,
ClientApi,
ConfigApi,
Actions,
reducer,
syncUrlWithStore,
} from '@storybook/core/client';
import { start } from '@storybook/core/client';
import render from './render';
// check whether we're running on node/browser
const isBrowser =
navigator &&
navigator.userAgent &&
navigator.userAgent !== 'storyshots' &&
!(navigator.userAgent.indexOf('Node.js') > -1) &&
!(navigator.userAgent.indexOf('jsdom') > -1);
const { clientApi, configApi, forceReRender } = start(render);
const storyStore = new StoryStore();
const reduxStore = createStore(reducer);
const context = { storyStore, reduxStore };
const clientApi = new ClientApi(context);
export const {
storiesOf,
setAddon,
@ -36,39 +13,5 @@ export const {
getStorybook,
} = clientApi;
let channel;
if (isBrowser) {
// setup preview channel
channel = createChannel({ page: 'preview' });
channel.on('setCurrentStory', data => {
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
});
addons.setChannel(channel);
Object.assign(context, { channel });
syncUrlWithStore(reduxStore);
// Handle keyboard shortcuts
window.onkeydown = handleKeyboardShortcuts(channel);
}
// Provide access to external scripts if `window` is defined.
// NOTE this is different to isBrowser, primarily for the JSDOM use case
if (typeof window !== 'undefined') {
window.__STORYBOOK_CLIENT_API__ = clientApi;
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
}
const configApi = new ConfigApi({ clearDecorators, ...context });
export const { configure } = configApi;
// initialize the UI
const renderUI = () => {
if (isBrowser) {
render(context);
}
};
reduxStore.subscribe(renderUI);
export const forceReRender = () => render(context, true);
export { forceReRender };

View File

@ -57,7 +57,6 @@
"markdown-loader": "^2.0.2",
"prop-types": "^15.6.1",
"react-dev-utils": "zanettin/react-dev-utils",
"redux": "^3.7.2",
"util-deprecate": "^1.0.2",
"webpack": "^4.1.1",
"webpack-hot-middleware": "^2.21.2"

View File

@ -1,32 +1,9 @@
import { createStore } from 'redux';
import addons from '@storybook/addons';
import { navigator, window } from 'global';
import createChannel from '@storybook/channel-postmessage';
import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events';
import {
StoryStore,
ClientApi,
ConfigApi,
Actions,
reducer,
syncUrlWithStore,
} from '@storybook/core/client';
import { start } from '@storybook/core/client';
import render from './render';
// check whether we're running on node/browser
const isBrowser =
navigator &&
navigator.userAgent &&
navigator.userAgent !== 'storyshots' &&
!(navigator.userAgent.indexOf('Node.js') > -1) &&
!(navigator.userAgent.indexOf('jsdom') > -1);
const { clientApi, configApi, forceReRender } = start(render);
const storyStore = new StoryStore();
const reduxStore = createStore(reducer);
const context = { storyStore, reduxStore };
const clientApi = new ClientApi(context);
export const {
storiesOf,
setAddon,
@ -36,39 +13,5 @@ export const {
getStorybook,
} = clientApi;
let channel;
if (isBrowser) {
// setup preview channel
channel = createChannel({ page: 'preview' });
channel.on('setCurrentStory', data => {
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
});
addons.setChannel(channel);
Object.assign(context, { channel });
syncUrlWithStore(reduxStore);
// Handle keyboard shortcuts
window.onkeydown = handleKeyboardShortcuts(channel);
}
// Provide access to external scripts if `window` is defined.
// NOTE this is different to isBrowser, primarily for the JSDOM use case
if (typeof window !== 'undefined') {
window.__STORYBOOK_CLIENT_API__ = clientApi;
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
}
const configApi = new ConfigApi({ clearDecorators, ...context });
export const { configure } = configApi;
// initialize the UI
const renderUI = () => {
if (isBrowser) {
render(context);
}
};
reduxStore.subscribe(renderUI);
export const forceReRender = () => render(context, true);
export { forceReRender };

View File

@ -49,7 +49,6 @@
"react": "^16.2.0",
"react-dev-utils": "zanettin/react-dev-utils",
"react-dom": "^16.2.0",
"redux": "^3.7.2",
"util-deprecate": "^1.0.2",
"webpack": "^4.1.1",
"webpack-hot-middleware": "^2.21.2"

View File

@ -1,30 +1,7 @@
import { createStore } from 'redux';
import addons from '@storybook/addons';
import createChannel from '@storybook/channel-postmessage';
import { navigator, window } from 'global';
import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events';
import {
StoryStore,
ClientApi,
ConfigApi,
Actions,
reducer,
syncUrlWithStore,
} from '@storybook/core/client';
import { start } from '@storybook/core/client';
import render from './render';
// check whether we're running on node/browser
const isBrowser =
navigator &&
navigator.userAgent &&
navigator.userAgent !== 'storyshots' &&
!(navigator.userAgent.indexOf('Node.js') > -1) &&
!(navigator.userAgent.indexOf('jsdom') > -1);
const storyStore = new StoryStore();
const reduxStore = createStore(reducer);
const createWrapperComponent = Target => ({
functional: true,
render(h, c) {
@ -42,8 +19,9 @@ const decorateStory = (getStory, decorators) =>
},
getStory
);
const context = { storyStore, reduxStore, decorateStory };
const clientApi = new ClientApi(context);
const { clientApi, configApi, forceReRender } = start(render, { decorateStory });
export const {
storiesOf,
setAddon,
@ -53,39 +31,5 @@ export const {
getStorybook,
} = clientApi;
let channel;
if (isBrowser) {
// create preview channel
channel = createChannel({ page: 'preview' });
channel.on('setCurrentStory', data => {
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
});
addons.setChannel(channel);
Object.assign(context, { channel });
syncUrlWithStore(reduxStore);
// Handle keyboard shortcuts
window.onkeydown = handleKeyboardShortcuts(channel);
}
// Provide access to external scripts if `window` is defined.
// NOTE this is different to isBrowser, primarily for the JSDOM use case
if (typeof window !== 'undefined') {
window.__STORYBOOK_CLIENT_API__ = clientApi;
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
}
const configApi = new ConfigApi({ ...context, clearDecorators });
export const { configure } = configApi;
// initialize the UI
const renderUI = () => {
if (isBrowser) {
render(context);
}
};
reduxStore.subscribe(renderUI);
export const forceReRender = () => render(context, true);
export { forceReRender };

View File

@ -10,9 +10,16 @@ const config = {
use: ['json-loader', 'yaml-loader'],
},
{
test: /\.(jpg|png|gif|eot|svg|ttf|woff|woff2)$/,
test: /\.(jpg|png|gif|eot|ttf|woff|woff2)$/,
use: ['file-loader'],
},
{
test: /\.svg$/,
loader: 'svg-url-loader',
options: {
noquotes: true,
},
},
],
},
};

View File

@ -24,7 +24,7 @@
"@storybook/react": "^3.3.15",
"babel-loader": "^6.4.1",
"bootstrap": "^3.3.7",
"gatsby": "^1.9.238",
"gatsby": "^1.9.239",
"gatsby-link": "^1.6.39",
"gatsby-plugin-sharp": "^1.6.41",
"gatsby-remark-autolink-headers": "^1.4.13",
@ -37,7 +37,7 @@
"global": "^4.3.2",
"highlight.js": "^9.12.0",
"lodash": "^4.17.5",
"marked": "^0.3.17",
"marked": "^0.3.18",
"prop-types": "^15.6.1",
"react": "^15.6.1",
"react-document-title": "^2.0.3",

View File

@ -3,8 +3,7 @@ id: 'live-examples'
title: 'Live Examples'
---
### 3.4.alpha
### 4.0.alpha
> Note, this is an Alpha version. Some of the features still might not be released
- [React Official](https://storybooks-official.netlify.com)
@ -12,6 +11,12 @@ title: 'Live Examples'
- [Angular](https://storybooks-angular.netlify.com/)
- [Polymer](https://storybooks-polymer.netlify.com/)
### 3.4
- [React Official](https://release-3-4--storybooks-official.netlify.com)
- [Vue](https://release-3-4--storybooks-vue.netlify.com/)
- [Angular](https://release-3-4--storybooks-angular.netlify.com/)
- [Polymer](https://release-3-4--storybooks-polymer.netlify.com/)
### 3.3
- [React Official](https://release-3-3--storybooks-official.netlify.com)
- [Vue](https://release-3-3--storybooks-vue.netlify.com/)

View File

@ -19,6 +19,13 @@ lonelyplanet:
source: https://github.com/lonelyplanet/backpack-ui
demo: https://lonelyplanet.github.io/backpack-ui/
site: https://www.lonelyplanet.com/
uber:
thumbnail: uber.png
title: Uber React-Vis
description: A composable charting library.
source: https://github.com/uber/react-vis
demo: https://uber.github.io/react-vis/website/dist/storybook/index.html
site: https://uber.github.io/react-vis/
atlassian:
thumbnail: atlassian.png
title: Atlassian AtlasKit

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -4455,9 +4455,9 @@ gatsby-1-config-extract-plugin@^1.0.2:
babel-runtime "^6.26.0"
extract-text-webpack-plugin "^1.0.1"
gatsby-cli@^1.1.46:
version "1.1.46"
resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.46.tgz#ebbca830805c63f6ef5be0a0c4d308dd597ad10b"
gatsby-cli@^1.1.47:
version "1.1.47"
resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-1.1.47.tgz#75474ca674ea7f4e018825f3ad4ec070c915a7cd"
dependencies:
babel-code-frame "^6.26.0"
babel-runtime "^6.26.0"
@ -4620,9 +4620,9 @@ gatsby-transformer-remark@^1.7.37:
unist-util-select "^1.5.0"
unist-util-visit "^1.1.1"
gatsby@^1.9.238:
version "1.9.238"
resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.238.tgz#b97354208e60140c2d7f2a369494b20e8138f540"
gatsby@^1.9.239:
version "1.9.239"
resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-1.9.239.tgz#ce5f111ac066da7354c01bc132a78f2466ece4ab"
dependencies:
async "^2.1.2"
babel-code-frame "^6.22.0"
@ -4664,7 +4664,7 @@ gatsby@^1.9.238:
fs-extra "^4.0.1"
gatsby-1-config-css-modules "^1.0.10"
gatsby-1-config-extract-plugin "^1.0.2"
gatsby-cli "^1.1.46"
gatsby-cli "^1.1.47"
gatsby-link "^1.6.39"
gatsby-module-loader "^1.0.11"
gatsby-react-router-scroll "^1.0.14"
@ -6847,9 +6847,9 @@ markdown-table@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c"
marked@^0.3.17:
version "0.3.17"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b"
marked@^0.3.18:
version "0.3.18"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.18.tgz#3ef058cd926101849b92a7a7c15db18c7fc76b2f"
marked@^0.3.6:
version "0.3.9"

View File

@ -3,7 +3,14 @@ const path = require('path');
module.exports = baseConfig => {
baseConfig.module.rules.push({
test: [/\.stories\.tsx?$/, /index\.ts$/],
loaders: [require.resolve('@storybook/addon-storysource/loader')],
loaders: [
{
loader: require.resolve('@storybook/addon-storysource/loader'),
options: {
parser: 'typescript',
},
},
],
include: [path.resolve(__dirname, '../src')],
enforce: 'pre',
});

View File

@ -37,7 +37,7 @@
"@storybook/addons": "3.4.0-rc.3",
"@storybook/angular": "3.4.0-rc.3",
"@types/jasmine": "~2.8.6",
"@types/node": "~9.4.7",
"@types/node": "~9.6.0",
"global": "^4.3.2",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",

View File

@ -1,6 +1,22 @@
import { StoreModule } from '@ngrx/store';
import { Store, StoreModule } from '@ngrx/store';
import { storiesOf, moduleMetadata } from '@storybook/angular';
import { WithStoreComponent } from './ngrx/WithStoreComponent';
import { Component } from '@angular/core';
@Component({
selector: 'storybook-comp-with-store',
template: '<div>{{this.getSotreState()}}</div>',
})
class WithStoreComponent {
private store: Store<any>;
constructor(store: Store<any>) {
this.store = store;
}
getSotreState() {
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
}
}
storiesOf('ngrx|Store', module)
.addDecorator(

View File

@ -1,18 +0,0 @@
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
@Component({
selector: 'storybook-comp-with-store',
template: '<div>{{this.getSotreState()}}</div>',
})
export class WithStoreComponent {
private store: Store<any>;
constructor(store: Store<any>) {
this.store = store;
}
getSotreState() {
return this.store === undefined ? 'Store is NOT injected' : 'Store is injected';
}
}

View File

@ -8,7 +8,7 @@
"storybook": "start-storybook -p 9001 -c .storybook"
},
"dependencies": {
"@polymer/polymer": "^2.5.0",
"@polymer/polymer": "^2.6.0",
"@storybook/addon-actions": "3.4.0-rc.3",
"@storybook/addon-knobs": "3.4.0-rc.3",
"@storybook/addon-links": "3.4.0-rc.3",
@ -17,7 +17,7 @@
"@storybook/addon-storysource": "3.4.0-rc.3",
"@storybook/addon-viewport": "3.4.0-rc.3",
"@storybook/polymer": "3.4.0-rc.3",
"@webcomponents/webcomponentsjs": "^1.1.0",
"@webcomponents/webcomponentsjs": "^1.1.1",
"global": "^4.3.2",
"polymer-webpack-loader": "^2.0.2",
"webpack": "^4.1.1"

View File

@ -27,9 +27,10 @@
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.6.0",
"babel-preset-vue": "^2.0.1",
"babel-preset-vue": "^2.0.2",
"cross-env": "^5.1.4",
"file-loader": "^1.1.11",
"svg-url-loader": "^2.3.2",
"vue-loader": "^14.2.1",
"webpack": "^4.1.1",
"webpack-dev-server": "^3.1.1"

View File

@ -24,12 +24,19 @@ module.exports = {
exclude: /node_modules/,
},
{
test: /\.(png|jpg|gif|svg)$/,
test: /\.(png|jpg|gif)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]',
},
},
{
test: /\.svg$/,
loader: 'svg-url-loader',
options: {
noquotes: true,
},
},
],
},
resolve: {

View File

@ -53,7 +53,7 @@
"@storybook/addon-actions": "^3.4.0-rc.3",
"@storybook/addon-links": "^3.4.0-rc.3",
"@storybook/addons": "^3.4.0-rc.3",
"babel-preset-vue": "^2.0.1"
"babel-preset-vue": "^2.0.2"
},
"engines": {
"node": ">= 4.0.0",

View File

@ -38,6 +38,6 @@
"@storybook/addon-actions": "^3.4.0-rc.3",
"@storybook/addon-links": "^3.4.0-rc.3",
"@storybook/addons": "^3.4.0-rc.3",
"babel-preset-vue": "^2.0.1"
"babel-preset-vue": "^2.0.2"
}
}

View File

@ -22,7 +22,7 @@
"@storybook/client-logger": "3.4.0-rc.3",
"@storybook/node-logger": "3.4.0-rc.3",
"@storybook/ui": "3.4.0-rc.3",
"autoprefixer": "^8.0.0",
"autoprefixer": "^8.2.0",
"babel-runtime": "^6.26.0",
"chalk": "^2.3.2",
"commander": "^2.15.1",
@ -39,9 +39,11 @@
"qs": "^6.5.1",
"react": "^16.0.0",
"react-dom": "^16.0.0",
"redux": "^3.7.2",
"serve-favicon": "^2.4.5",
"shelljs": "^0.8.1",
"style-loader": "^0.20.3",
"svg-url-loader": "^2.3.2",
"url-loader": "^1.0.1",
"webpack": "^4.1.1",
"webpack-dev-middleware": "^3.0.1",

View File

@ -1,3 +1,4 @@
import start from './start';
import * as Actions from './actions';
import ClientApi from './client_api';
import ConfigApi from './config_api';
@ -5,4 +6,4 @@ import StoryStore from './story_store';
import reducer from './reducer';
import syncUrlWithStore from './syncUrlWithStore';
export default { Actions, ClientApi, ConfigApi, StoryStore, reducer, syncUrlWithStore };
export default { start, Actions, ClientApi, ConfigApi, StoryStore, reducer, syncUrlWithStore };

View File

@ -0,0 +1,65 @@
import { createStore } from 'redux';
import addons from '@storybook/addons';
import { navigator, window } from 'global';
import createChannel from '@storybook/channel-postmessage';
import { handleKeyboardShortcuts } from '@storybook/ui/dist/libs/key_events';
import StoryStore from './story_store';
import ClientApi from './client_api';
import ConfigApi from './config_api';
import reducer from './reducer';
import * as Actions from './actions';
import syncUrlWithStore from './syncUrlWithStore';
export default function start(render, { decorateStory } = {}) {
// check whether we're running on node/browser
const isBrowser =
navigator &&
navigator.userAgent &&
navigator.userAgent !== 'storyshots' &&
!(navigator.userAgent.indexOf('Node.js') > -1) &&
!(navigator.userAgent.indexOf('jsdom') > -1);
const storyStore = new StoryStore();
const reduxStore = createStore(reducer);
const context = { storyStore, reduxStore, decorateStory };
const clientApi = new ClientApi(context);
let channel;
if (isBrowser) {
// setup preview channel
channel = createChannel({ page: 'preview' });
channel.on('setCurrentStory', data => {
reduxStore.dispatch(Actions.selectStory(data.kind, data.story));
});
addons.setChannel(channel);
Object.assign(context, { channel });
syncUrlWithStore(reduxStore);
// Handle keyboard shortcuts
window.onkeydown = handleKeyboardShortcuts(channel);
}
// Provide access to external scripts if `window` is defined.
// NOTE this is different to isBrowser, primarily for the JSDOM use case
if (typeof window !== 'undefined') {
window.__STORYBOOK_CLIENT_API__ = clientApi;
window.__STORYBOOK_ADDONS_CHANNEL__ = channel; // may not be defined
}
const { clearDecorators } = clientApi;
const configApi = new ConfigApi({ clearDecorators, ...context });
// initialize the UI
const renderUI = () => {
if (isBrowser) {
render(context);
}
};
reduxStore.subscribe(renderUI);
return { context, clientApi, configApi, forceReRender: () => render(context, true) };
}

View File

@ -32,12 +32,16 @@ export function createDefaultWebpackConfig(storybookBaseConfig) {
],
},
{
test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2)(\?.*)?$/,
test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2)(\?.*)?$/,
loader: require.resolve('file-loader'),
query: {
name: 'static/media/[name].[hash:8].[ext]',
},
},
{
test: /\.svg$/,
loader: require.resolve('svg-url-loader'),
},
{
test: /\.(mp4|webm|wav|mp3|m4a|aac|oga)(\?.*)?$/,
loader: require.resolve('url-loader'),

View File

@ -24,7 +24,7 @@
"events": "^2.0.0",
"fuse.js": "^3.2.0",
"global": "^4.3.2",
"keycode": "^2.1.9",
"keycode": "^2.2.0",
"lodash.debounce": "^4.0.8",
"lodash.pick": "^4.4.0",
"lodash.sortby": "^4.7.0",

View File

@ -56,10 +56,10 @@
"commander": "^2.15.1",
"concurrently": "^3.5.1",
"cross-env": "^5.1.4",
"danger": "^3.3.0",
"danger": "^3.3.2",
"enzyme": "^3.3.0",
"enzyme-adapter-react-16": "^1.1.1",
"eslint": "^4.19.0",
"eslint": "^4.19.1",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-import": "^2.9.0",
@ -72,14 +72,14 @@
"glob": "^7.1.2",
"husky": "^0.14.3",
"inquirer": "^5.1.0",
"jest": "^22.4.2",
"jest-cli": "^22.4.2",
"jest-config": "^22.4.2",
"jest-diff": "^22.4.0",
"jest-environment-jsdom": "^22.4.1",
"jest": "^22.4.3",
"jest-cli": "^22.4.3",
"jest-config": "^22.4.3",
"jest-diff": "^22.4.3",
"jest-environment-jsdom": "^22.4.3",
"jest-enzyme": "^4.2.0",
"jest-image-snapshot": "^2.4.0",
"jest-jasmine2": "^22.4.2",
"jest-jasmine2": "^22.4.3",
"jest-preset-angular": "^5.2.1",
"jest-vue-preprocessor": "^1.4.0",
"lerna": "2.5.1",

497
yarn.lock
View File

@ -257,9 +257,9 @@
lodash "^4.17.4"
url-template "^2.0.8"
"@polymer/polymer@^2.5.0":
version "2.5.0"
resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-2.5.0.tgz#261439f5ab691c230d0c5dfb518b9247064ac13d"
"@polymer/polymer@^2.6.0":
version "2.6.0"
resolved "https://registry.yarnpkg.com/@polymer/polymer/-/polymer-2.6.0.tgz#98601124122a045e74f4b41f55975006ef327dbc"
"@schematics/angular@0.3.2":
version "0.3.2"
@ -343,9 +343,9 @@
version "6.0.96"
resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.96.tgz#7bf0bf40d6ce51e93762cc47d010c8cc5ebb2179"
"@types/node@~9.4.7":
version "9.4.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275"
"@types/node@~9.6.0":
version "9.6.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7"
"@types/parse5@^2.2.32":
version "2.2.34"
@ -373,9 +373,9 @@
version "0.0.30"
resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1"
"@webcomponents/webcomponentsjs@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz#1392799c266fca142622a720176f688beb74d181"
"@webcomponents/webcomponentsjs@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.1.tgz#50caffdf8a901e5357532b7d85e776637a56446a"
JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@~1.3.1:
version "1.3.2"
@ -417,18 +417,6 @@ accepts@~1.3.5:
mime-types "~2.1.18"
negotiator "0.6.1"
acorn-bigint@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/acorn-bigint/-/acorn-bigint-0.2.0.tgz#0f45a5290537799a3b07085689a186881cb53784"
dependencies:
acorn "^5.2.1"
acorn-class-fields@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.1.2.tgz#20782f304af42257feff5bd4a5c335291473bf58"
dependencies:
acorn "^5.3.0"
acorn-dynamic-import@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
@ -441,12 +429,6 @@ acorn-dynamic-import@^3.0.0:
dependencies:
acorn "^5.0.0"
acorn-es7@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/acorn-es7/-/acorn-es7-0.1.0.tgz#4a6de4522faacb4c31209e1b73b5f301ed2bb30a"
dependencies:
acorn "^2.6.4"
acorn-globals@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
@ -459,30 +441,12 @@ acorn-globals@^4.0.0:
dependencies:
acorn "^5.0.0"
acorn-import-meta@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/acorn-import-meta/-/acorn-import-meta-0.2.1.tgz#ac91e06e00facece7e96ff76a0fe9ec7b1cb5b5c"
dependencies:
acorn "^5.4.1"
acorn-json-superset@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/acorn-json-superset/-/acorn-json-superset-0.1.0.tgz#b5b911a1777ea63a48fcfc64353e787305e8a945"
dependencies:
acorn "^5.4.1"
acorn-jsx@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
dependencies:
acorn "^3.0.4"
acorn-jsx@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e"
dependencies:
acorn "^5.0.3"
acorn-node@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b"
@ -490,42 +454,6 @@ acorn-node@^1.2.0:
acorn "^5.4.1"
xtend "^4.0.1"
acorn-numeric-separator@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.1.1.tgz#aa455a1d95ae887231de97e0681abbe28b065e8d"
dependencies:
acorn "^5.2.1"
acorn-optional-catch-binding@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/acorn-optional-catch-binding/-/acorn-optional-catch-binding-0.1.0.tgz#d9a1874dbffce1eb3495836e5e75b2ad9c300868"
dependencies:
acorn "^5.2.1"
acorn-private-methods@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/acorn-private-methods/-/acorn-private-methods-0.1.1.tgz#32c13cf24d05bf1c9be04914b41491c59d75a195"
dependencies:
acorn "^5.4.0"
acorn-stage3@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/acorn-stage3/-/acorn-stage3-0.6.0.tgz#d2814cec8e2f8bcb0407ba657fbe0cfb118f9bc2"
dependencies:
acorn "^5.5.0"
acorn-bigint "^0.2.0"
acorn-class-fields "^0.1.1"
acorn-dynamic-import "^3.0.0"
acorn-import-meta "^0.2.1"
acorn-json-superset "^0.1.0"
acorn-numeric-separator "^0.1.1"
acorn-optional-catch-binding "^0.1.0"
acorn-private-methods "^0.1.1"
acorn@^2.6.4:
version "2.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
@ -538,7 +466,7 @@ acorn@^5.0.0, acorn@^5.1.2, acorn@^5.2.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
acorn@^5.0.3, acorn@^5.3.0, acorn@^5.4.0, acorn@^5.4.1:
acorn@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102"
@ -546,10 +474,6 @@ acorn@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298"
acorn@^5.5.3:
version "5.5.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9"
add-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"
@ -1077,15 +1001,15 @@ autoprefixer@^7.2.3:
postcss "^6.0.16"
postcss-value-parser "^3.2.3"
autoprefixer@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.0.0.tgz#c19e480f061013127c373df0b01cf46919943f74"
autoprefixer@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.2.0.tgz#1e49b611b31a5259b86b7a6b2b1b8faf091abe2a"
dependencies:
browserslist "^3.0.0"
caniuse-lite "^1.0.30000808"
browserslist "^3.2.0"
caniuse-lite "^1.0.30000817"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
postcss "^6.0.17"
postcss "^6.0.20"
postcss-value-parser "^3.2.3"
aws-sign2@~0.6.0:
@ -1368,12 +1292,12 @@ babel-jest@20.0.3, babel-jest@^20.0.3:
babel-plugin-istanbul "^4.0.0"
babel-preset-jest "^20.0.3"
babel-jest@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd"
babel-jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a"
dependencies:
babel-plugin-istanbul "^4.1.5"
babel-preset-jest "^22.4.1"
babel-preset-jest "^22.4.3"
babel-loader@7.1.2:
version "7.1.2"
@ -1439,6 +1363,10 @@ babel-plugin-jest-hoist@^22.4.1:
version "22.4.1"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63"
babel-plugin-jest-hoist@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a"
babel-plugin-jsx-event-modifiers@^2.0.2:
version "2.0.5"
resolved "https://registry.yarnpkg.com/babel-plugin-jsx-event-modifiers/-/babel-plugin-jsx-event-modifiers-2.0.5.tgz#93e6ebb5d7553bb08f9fedbf7a0bee3af09a0472"
@ -2116,13 +2044,20 @@ babel-preset-jest@^20.0.3:
dependencies:
babel-plugin-jest-hoist "^20.0.3"
babel-preset-jest@^22.4.0, babel-preset-jest@^22.4.1:
babel-preset-jest@^22.4.0:
version "22.4.1"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a"
dependencies:
babel-plugin-jest-hoist "^22.4.1"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156"
dependencies:
babel-plugin-jest-hoist "^22.4.3"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-minify@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz#7db64afa75f16f6e06c0aa5f25195f6f36784d77"
@ -2251,9 +2186,9 @@ babel-preset-stage-3@^6.24.1:
babel-plugin-transform-exponentiation-operator "^6.24.1"
babel-plugin-transform-object-rest-spread "^6.22.0"
babel-preset-vue@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/babel-preset-vue/-/babel-preset-vue-2.0.1.tgz#031f845944819f64f5ac4b20467b6cbe4b97ac68"
babel-preset-vue@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/babel-preset-vue/-/babel-preset-vue-2.0.2.tgz#cfadf1bd736125397481b5f8525ced0049a0c71f"
dependencies:
babel-helper-vue-jsx-merge-props "^2.0.2"
babel-plugin-jsx-event-modifiers "^2.0.2"
@ -2763,7 +2698,7 @@ browserify@^14.5.0:
vm-browserify "~0.0.1"
xtend "^4.0.0"
browserslist@3.1.1, browserslist@^3.0.0:
browserslist@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.1.1.tgz#d380fc048bc3a33e60fb87dc135110ebaaa6320a"
dependencies:
@ -2784,6 +2719,13 @@ browserslist@^2.1.2, browserslist@^2.11.1, browserslist@^2.5.1:
caniuse-lite "^1.0.30000789"
electron-to-chromium "^1.3.30"
browserslist@^3.2.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.1.tgz#4960a45fbfe39b2be36fe5ba07cce9ea32c8221c"
dependencies:
caniuse-lite "^1.0.30000819"
electron-to-chromium "^1.3.40"
bser@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
@ -3035,14 +2977,14 @@ caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000789, caniuse-lite@^1.0.300007
version "1.0.30000791"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000791.tgz#8e35745efd483a3e23bb7d350990326d2319fc16"
caniuse-lite@^1.0.30000808:
version "1.0.30000810"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9"
caniuse-lite@^1.0.30000809:
version "1.0.30000815"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz#3a4258e6850362185adb11b0d754a48402d35bf6"
caniuse-lite@^1.0.30000817, caniuse-lite@^1.0.30000819:
version "1.0.30000819"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000819.tgz#aabee5fd15a080febab6ae5d30c9ea15f4c6d4e2"
capture-stack-trace@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
@ -4439,9 +4381,9 @@ damerau-levenshtein@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
danger@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/danger/-/danger-3.3.0.tgz#5bcd9e530d9ec14f7e02fbd37a3800cc8554831f"
danger@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/danger/-/danger-3.3.2.tgz#f4eaaaa8a37ee8c3327ce89757edd6487a335296"
dependencies:
"@octokit/rest" "^14.0.4"
babel-polyfill "^6.23.0"
@ -4990,9 +4932,9 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
dependencies:
electron-releases "^2.1.0"
electron-to-chromium@^1.3.33:
version "1.3.34"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed"
electron-to-chromium@^1.3.33, electron-to-chromium@^1.3.40:
version "1.3.40"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf"
elegant-spinner@^1.0.1:
version "1.0.1"
@ -5543,9 +5485,9 @@ eslint@4.10.0:
table "^4.0.1"
text-table "~0.2.0"
eslint@^4.19.0:
version "4.19.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.0.tgz#9e900efb5506812ac374557034ef6f5c3642fc4c"
eslint@^4.19.1:
version "4.19.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@ -5807,6 +5749,17 @@ expect@^22.4.0:
jest-message-util "^22.4.0"
jest-regex-util "^22.1.0"
expect@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674"
dependencies:
ansi-styles "^3.2.0"
jest-diff "^22.4.3"
jest-get-type "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
express-session@~1.11.3:
version "1.11.3"
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af"
@ -6101,6 +6054,13 @@ file-entry-cache@^2.0.0:
flat-cache "^1.2.1"
object-assign "^4.0.1"
file-loader@1.1.11, file-loader@^1.1.11:
version "1.1.11"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
dependencies:
loader-utils "^1.0.2"
schema-utils "^0.4.5"
file-loader@1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa"
@ -6108,13 +6068,6 @@ file-loader@1.1.5:
loader-utils "^1.0.2"
schema-utils "^0.3.0"
file-loader@^1.1.11:
version "1.1.11"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8"
dependencies:
loader-utils "^1.0.2"
schema-utils "^0.4.5"
file-loader@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8"
@ -8381,9 +8334,9 @@ jest-changed-files@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8"
jest-changed-files@^22.2.0:
version "22.2.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e"
jest-changed-files@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2"
dependencies:
throat "^4.0.0"
@ -8422,9 +8375,9 @@ jest-cli@^20.0.4:
worker-farm "^1.3.1"
yargs "^7.0.2"
jest-cli@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06"
jest-cli@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
@ -8437,20 +8390,20 @@ jest-cli@^22.4.2:
istanbul-lib-coverage "^1.1.1"
istanbul-lib-instrument "^1.8.0"
istanbul-lib-source-maps "^1.2.1"
jest-changed-files "^22.2.0"
jest-config "^22.4.2"
jest-environment-jsdom "^22.4.1"
jest-get-type "^22.1.0"
jest-haste-map "^22.4.2"
jest-message-util "^22.4.0"
jest-regex-util "^22.1.0"
jest-resolve-dependencies "^22.1.0"
jest-runner "^22.4.2"
jest-runtime "^22.4.2"
jest-snapshot "^22.4.0"
jest-util "^22.4.1"
jest-validate "^22.4.2"
jest-worker "^22.2.2"
jest-changed-files "^22.4.3"
jest-config "^22.4.3"
jest-environment-jsdom "^22.4.3"
jest-get-type "^22.4.3"
jest-haste-map "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve-dependencies "^22.4.3"
jest-runner "^22.4.3"
jest-runtime "^22.4.3"
jest-snapshot "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
jest-worker "^22.4.3"
micromatch "^2.3.11"
node-notifier "^5.2.1"
realpath-native "^1.0.0"
@ -8492,6 +8445,22 @@ jest-config@^22.4.0, jest-config@^22.4.2:
jest-validate "^22.4.2"
pretty-format "^22.4.0"
jest-config@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403"
dependencies:
chalk "^2.0.1"
glob "^7.1.1"
jest-environment-jsdom "^22.4.3"
jest-environment-node "^22.4.3"
jest-get-type "^22.4.3"
jest-jasmine2 "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
pretty-format "^22.4.3"
jest-diff@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617"
@ -8519,6 +8488,15 @@ jest-diff@^22.4.0:
jest-get-type "^22.1.0"
pretty-format "^22.4.0"
jest-diff@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-docblock@22.0.3:
version "22.0.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.3.tgz#c33aa22682b9fc68a5373f5f82994428a2ded601"
@ -8539,9 +8517,9 @@ jest-docblock@^22.0.3:
dependencies:
detect-newline "^2.1.0"
jest-docblock@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8"
jest-docblock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19"
dependencies:
detect-newline "^2.1.0"
@ -8561,6 +8539,14 @@ jest-environment-jsdom@^22.4.1:
jest-util "^22.4.1"
jsdom "^11.5.1"
jest-environment-jsdom@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
jsdom "^11.5.1"
jest-environment-node@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403"
@ -8575,6 +8561,13 @@ jest-environment-node@^22.4.1:
jest-mock "^22.2.0"
jest-util "^22.4.1"
jest-environment-node@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
jest-enzyme@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/jest-enzyme/-/jest-enzyme-4.2.0.tgz#d284506b6d87e072bf6d2786584970bb42ea5969"
@ -8590,6 +8583,10 @@ jest-get-type@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9"
jest-get-type@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
jest-haste-map@22.0.3:
version "22.0.3"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.3.tgz#c9ecb5c871c5465d4bde4139e527fa0dc784aa2d"
@ -8612,15 +8609,15 @@ jest-haste-map@^20.0.4:
sane "~1.6.0"
worker-farm "^1.3.1"
jest-haste-map@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4"
jest-haste-map@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
jest-docblock "^22.4.0"
jest-serializer "^22.4.0"
jest-worker "^22.2.2"
jest-docblock "^22.4.3"
jest-serializer "^22.4.3"
jest-worker "^22.4.3"
micromatch "^2.3.11"
sane "^2.0.0"
@ -8666,11 +8663,27 @@ jest-jasmine2@^22.4.2:
jest-util "^22.4.1"
source-map-support "^0.5.0"
jest-leak-detector@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.0.tgz#64da77f05b001c96d2062226e079f89989c4aa2f"
jest-jasmine2@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965"
dependencies:
pretty-format "^22.4.0"
chalk "^2.0.1"
co "^4.6.0"
expect "^22.4.3"
graceful-fs "^4.1.11"
is-generator-fn "^1.0.0"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-snapshot "^22.4.3"
jest-util "^22.4.3"
source-map-support "^0.5.0"
jest-leak-detector@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35"
dependencies:
pretty-format "^22.4.3"
jest-matcher-utils@^20.0.3:
version "20.0.3"
@ -8695,6 +8708,14 @@ jest-matcher-utils@^22.4.0:
jest-get-type "^22.1.0"
pretty-format "^22.4.0"
jest-matcher-utils@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-matchers@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60"
@ -8722,6 +8743,16 @@ jest-message-util@^22.4.0:
slash "^1.0.0"
stack-utils "^1.0.1"
jest-message-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7"
dependencies:
"@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
micromatch "^2.3.11"
slash "^1.0.0"
stack-utils "^1.0.1"
jest-mock@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59"
@ -8730,6 +8761,10 @@ jest-mock@^22.2.0:
version "22.2.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7"
jest-mock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7"
jest-preset-angular@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/jest-preset-angular/-/jest-preset-angular-5.2.1.tgz#b93611145bf2ef373c1ffe80d8870af0e91f7b64"
@ -8746,17 +8781,21 @@ jest-regex-util@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53"
jest-regex-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af"
jest-resolve-dependencies@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a"
dependencies:
jest-regex-util "^20.0.3"
jest-resolve-dependencies@^22.1.0:
version "22.1.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31"
jest-resolve-dependencies@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e"
dependencies:
jest-regex-util "^22.1.0"
jest-regex-util "^22.4.3"
jest-resolve@^20.0.4:
version "20.0.4"
@ -8773,20 +8812,27 @@ jest-resolve@^22.4.2:
browser-resolve "^1.11.2"
chalk "^2.0.1"
jest-runner@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87"
jest-resolve@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea"
dependencies:
browser-resolve "^1.11.2"
chalk "^2.0.1"
jest-runner@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3"
dependencies:
exit "^0.1.2"
jest-config "^22.4.2"
jest-docblock "^22.4.0"
jest-haste-map "^22.4.2"
jest-jasmine2 "^22.4.2"
jest-leak-detector "^22.4.0"
jest-message-util "^22.4.0"
jest-runtime "^22.4.2"
jest-util "^22.4.1"
jest-worker "^22.2.2"
jest-config "^22.4.3"
jest-docblock "^22.4.3"
jest-haste-map "^22.4.3"
jest-jasmine2 "^22.4.3"
jest-leak-detector "^22.4.3"
jest-message-util "^22.4.3"
jest-runtime "^22.4.3"
jest-util "^22.4.3"
jest-worker "^22.4.3"
throat "^4.0.0"
jest-runtime@^20.0.4:
@ -8809,23 +8855,23 @@ jest-runtime@^20.0.4:
strip-bom "3.0.0"
yargs "^7.0.2"
jest-runtime@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3"
jest-runtime@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0"
dependencies:
babel-core "^6.0.0"
babel-jest "^22.4.1"
babel-jest "^22.4.3"
babel-plugin-istanbul "^4.1.5"
chalk "^2.0.1"
convert-source-map "^1.4.0"
exit "^0.1.2"
graceful-fs "^4.1.11"
jest-config "^22.4.2"
jest-haste-map "^22.4.2"
jest-regex-util "^22.1.0"
jest-resolve "^22.4.2"
jest-util "^22.4.1"
jest-validate "^22.4.2"
jest-config "^22.4.3"
jest-haste-map "^22.4.3"
jest-regex-util "^22.4.3"
jest-resolve "^22.4.3"
jest-util "^22.4.3"
jest-validate "^22.4.3"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
realpath-native "^1.0.0"
@ -8834,9 +8880,9 @@ jest-runtime@^22.4.2:
write-file-atomic "^2.1.0"
yargs "^10.0.3"
jest-serializer@^22.4.0:
version "22.4.0"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.0.tgz#b5d145b98c4b0d2c20ab686609adbb81fe23b566"
jest-serializer@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436"
jest-snapshot@>=20.0.3:
version "22.0.6"
@ -8871,6 +8917,17 @@ jest-snapshot@^22.4.0:
natural-compare "^1.4.0"
pretty-format "^22.4.0"
jest-snapshot@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2"
dependencies:
chalk "^2.0.1"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
pretty-format "^22.4.3"
jest-specific-snapshot@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jest-specific-snapshot/-/jest-specific-snapshot-0.5.0.tgz#92201b5f51fbe56cc744bdfab08f379867c1bb18"
@ -8901,6 +8958,18 @@ jest-util@^22.4.1:
mkdirp "^0.5.1"
source-map "^0.6.0"
jest-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
jest-message-util "^22.4.3"
mkdirp "^0.5.1"
source-map "^0.6.0"
jest-validate@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab"
@ -8920,6 +8989,16 @@ jest-validate@^22.4.0, jest-validate@^22.4.2:
leven "^2.1.0"
pretty-format "^22.4.0"
jest-validate@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30"
dependencies:
chalk "^2.0.1"
jest-config "^22.4.3"
jest-get-type "^22.4.3"
leven "^2.1.0"
pretty-format "^22.4.3"
jest-vue-preprocessor@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/jest-vue-preprocessor/-/jest-vue-preprocessor-1.4.0.tgz#804e4208c6d667efa6f2910f62c1cdcb231bcb59"
@ -8941,9 +9020,9 @@ jest-worker@^22.0.3:
dependencies:
merge-stream "^1.0.1"
jest-worker@^22.2.2:
version "22.2.2"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390"
jest-worker@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b"
dependencies:
merge-stream "^1.0.1"
@ -8957,12 +9036,12 @@ jest@20.0.4, jest@^20.0.4:
dependencies:
jest-cli "^20.0.4"
jest@^22.4.2:
version "22.4.2"
resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20"
jest@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16"
dependencies:
import-local "^1.0.0"
jest-cli "^22.4.2"
jest-cli "^22.4.3"
js-base64@^2.1.8, js-base64@^2.1.9:
version "2.4.0"
@ -9272,9 +9351,9 @@ karma@~2.0.0:
tmp "0.0.33"
useragent "^2.1.12"
keycode@^2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa"
keycode@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04"
killable@^1.0.0:
version "1.0.0"
@ -10154,9 +10233,9 @@ markdown-table@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c"
marked@^0.3.17:
version "0.3.17"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b"
marked@^0.3.18:
version "0.3.18"
resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.18.tgz#3ef058cd926101849b92a7a7c15db18c7fc76b2f"
marked@^0.3.9:
version "0.3.12"
@ -12316,13 +12395,13 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13, postcss@^6.0.16, postcss@^6.0.8
source-map "^0.6.1"
supports-color "^5.1.0"
postcss@^6.0.17:
version "6.0.19"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555"
postcss@^6.0.20:
version "6.0.21"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d"
dependencies:
chalk "^2.3.1"
chalk "^2.3.2"
source-map "^0.6.1"
supports-color "^5.2.0"
supports-color "^5.3.0"
prelude-ls@~1.1.2:
version "1.1.2"
@ -12376,6 +12455,13 @@ pretty-format@^22.4.0:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
pretty-format@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
pretty-format@^4.2.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d"
@ -13426,7 +13512,7 @@ reduce-function-call@^1.0.1:
dependencies:
balanced-match "^0.4.2"
redux@^3.6.0, redux@^3.7.2:
redux@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
dependencies:
@ -15311,6 +15397,13 @@ svg-tags@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
svg-url-loader@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-2.3.2.tgz#dd86b26c19fe3b914f04ea10ef39594eade04464"
dependencies:
file-loader "1.1.11"
loader-utils "1.1.0"
svgo@^0.7.0:
version "0.7.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"