diff --git a/.babelrc b/.babelrc deleted file mode 100644 index f8e2d6f2d8..0000000000 --- a/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["env", "stage-2", "react"], - "plugins": ["transform-decorators-legacy"] -} diff --git a/.codeclimate.yml b/.codeclimate.yml index 868014a777..0f6ff31bb8 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,6 +1,3 @@ -engines: - eslint: - enabled: true ratings: paths: - "**.js" diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 7c3ffb7502..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,11 +0,0 @@ -__site__ -__site_prerender__ -site -scripts -node_modules -coverage -docs -dist -lib -webpack.config.js -wallaby.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index e5302e1edb..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,27 +0,0 @@ -extends: - - eslint-config-airbnb - - eslint-config-prettier - -parser: babel-eslint -parserOptions: - ecmaFeatures: - experimentalDecorators: true -env: - browser: true - node: true - -rules: - # Disabled due to conflicts with monorepo structure - # See: https://github.com/benmosher/eslint-plugin-import/issues/458 - import/no-extraneous-dependencies: off - import/no-unresolved: off - import/extensions: off - - # These rules are covered by prettier - react/jsx-indent: off - react/jsx-indent-props: off - - # These rules are super annoying in this project - react/jsx-filename-extension: off - class-methods-use-this: off - no-confusing-arrow: off diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 3b0ac0f7fb..0eb8291603 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,6 +1,5 @@ { "recommendations": [ - "dbaeumer.vscode-eslint", "eg2.tslint", "esbenp.prettier-vscode" ] diff --git a/.vscode/settings.json b/.vscode/settings.json index 26e819de2d..621b25baa1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,12 +1,8 @@ { - "files.associations": { - ".eslintrc": "yaml" - }, "search.exclude": { "**/node_modules": true, "**/bower_components": true }, - "eslint.packageManager": "yarn", "editor.tabSize": 2, "[typescript]": { "editor.formatOnSave": true diff --git a/package.json b/package.json index 79cde0d478..9e3a24c852 100644 --- a/package.json +++ b/package.json @@ -38,11 +38,8 @@ "unit_test": "jest", "jest:watch": "jest --watch", "jest:cov": "jest --coverage", - "lint:es": "eslint .", - "lint:ts": + "lint": "tslint \"packages/**/*.{ts,tsx}\" -e \"**/{lib,node_modules}/**\"", - "lint:tsc": "tsc", - "lint": "run-s lint:*", "test_modules": "lerna run test --stream", "publish_docs": "./scripts/publishDocumentation.sh", "test": "run-s lint test_modules jest:cov", @@ -54,18 +51,6 @@ }, "devDependencies": { "@types/jest": "^22.2.3", - "babel-eslint": "^8.2.3", - "babel-jest": "^22.4.3", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-preset-env": "^1.6.0", - "babel-preset-react": "^6.24.1", - "babel-preset-stage-2": "^6.24.1", - "eslint": "^4.19.1", - "eslint-config-airbnb": "^16.1.0", - "eslint-config-prettier": "^2.9.0", - "eslint-plugin-import": "^2.11.0", - "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-react": "^7.7.0", "husky": "^0.14.3", "jest": "^23.0.0-beta.3r", "jest-environment-jsdom": "^22.4.3", @@ -88,8 +73,7 @@ "/packages/**/__tests__/**/?(*.)(spec|test).(t|j)s(x|)" ], "transform": { - "^.+\\.(ts|tsx)$": "ts-jest", - "^.+\\.(js|jsx)$": "babel-jest" + "^.+\\.(ts|tsx)$": "ts-jest" }, "moduleNameMapper": { "^react-dnd$": "/packages/react-dnd/src", @@ -101,7 +85,8 @@ } }, "lint-staged": { - "*.js": ["eslint --fix", "prettier --write", "git add"] + "*.{js,jsx}": ["prettier --write", "git add"], + "*.{ts,tsx}": ["tslint --fix", "prettier --write", "git add"] }, "prettier": { "semi": false, @@ -110,6 +95,12 @@ "useTabs": true }, "workspaces": { - "packages": ["packages/*"] + "packages": ["packages/*"], + "nohoist": [ + "**/@types/*", + "**/hoist-non-react-statics", + "**/autobind-decorator", + "**/redux" + ] } } diff --git a/packages/dnd-core/.eslintrc b/packages/dnd-core/.eslintrc deleted file mode 100644 index 3cb76664b4..0000000000 --- a/packages/dnd-core/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -rules: - no-plusplus: off - consistent-return: off - no-mixed-operators: off - no-else-return: off diff --git a/packages/dnd-core/.npmignore b/packages/dnd-core/.npmignore index 9ca3ff3edd..8ac3c0828e 100644 --- a/packages/dnd-core/.npmignore +++ b/packages/dnd-core/.npmignore @@ -1,6 +1,4 @@ test -.babelrc -.eslintrc .travis.yml coverage test-results.xml diff --git a/packages/dnd-core/package.json b/packages/dnd-core/package.json index 549989b638..242360186d 100644 --- a/packages/dnd-core/package.json +++ b/packages/dnd-core/package.json @@ -16,10 +16,9 @@ }, "dependencies": { "@types/invariant": "^2.2.29", - "@types/lodash": "^4.14.107", - "asap": "^2.0.6", - "invariant": "^2.0.0", - "lodash": "^4.2.0", + "@types/lodash": "^4.14.109", + "invariant": "^2.2.4", + "lodash": "^4.17.10", "redux": "^4.0.0" }, "devDependencies": { diff --git a/packages/dnd-core/src/DragDropManagerImpl.ts b/packages/dnd-core/src/DragDropManagerImpl.ts index b7c646f014..69e1893df9 100644 --- a/packages/dnd-core/src/DragDropManagerImpl.ts +++ b/packages/dnd-core/src/DragDropManagerImpl.ts @@ -72,7 +72,7 @@ export default class DragDropManagerImpl const action: ActionCreator = (actions as any)[ key ] as ActionCreator - ;(boundActions as any)[key] = bindActionCreator(action) // eslint-disable-line no-param-reassign + ;(boundActions as any)[key] = bindActionCreator(action) return boundActions }, {} as DragDropActions, diff --git a/packages/dnd-core/src/HandlerRegistryImpl.ts b/packages/dnd-core/src/HandlerRegistryImpl.ts index 88b2012a67..5579313110 100644 --- a/packages/dnd-core/src/HandlerRegistryImpl.ts +++ b/packages/dnd-core/src/HandlerRegistryImpl.ts @@ -1,7 +1,6 @@ import { Store } from 'redux' import invariant from 'invariant' import isArray from 'lodash/isArray' -const asap = require('asap') import { addSource, addTarget, @@ -48,10 +47,23 @@ function parseRoleFromHandlerId(handlerId: string) { } } +function mapContainsValue(map: Map, searchValue: T) { + const entries = map.entries() + let isDone = false + do { + const { done, value: [key, value] } = entries.next() + if (value === searchValue) { + return true + } + isDone = done + } while (!isDone) + return false +} + export default class HandlerRegistryImpl implements HandlerRegistry { - private types: { [id: string]: SourceType | TargetType } = {} - private dragSources: { [id: string]: DragSource } = {} - private dropTargets: { [id: string]: DropTarget } = {} + private types: Map = new Map() + private dragSources: Map = new Map() + private dropTargets: Map = new Map() private pinnedSourceId: string | null = null private pinnedSource: any = null @@ -77,37 +89,31 @@ export default class HandlerRegistryImpl implements HandlerRegistry { public containsHandler(handler: DragSource | DropTarget) { return ( - Object.keys(this.dragSources).some( - key => this.dragSources[key] === handler, - ) || - Object.keys(this.dropTargets).some( - key => this.dropTargets[key] === handler, - ) + mapContainsValue(this.dragSources, handler) || + mapContainsValue(this.dropTargets, handler) ) } public getSource(sourceId: string, includePinned = false): DragSource { invariant(this.isSourceId(sourceId), 'Expected a valid source ID.') - const isPinned = includePinned && sourceId === this.pinnedSourceId - - const source = isPinned ? this.pinnedSource : this.dragSources[sourceId] + const source = isPinned ? this.pinnedSource : this.dragSources.get(sourceId) return source } public getTarget(targetId: string): DropTarget { invariant(this.isTargetId(targetId), 'Expected a valid target ID.') - return this.dropTargets[targetId] as DropTarget + return this.dropTargets.get(targetId) as DropTarget } public getSourceType(sourceId: string) { invariant(this.isSourceId(sourceId), 'Expected a valid source ID.') - return this.types[sourceId] as Identifier + return this.types.get(sourceId) as Identifier } public getTargetType(targetId: string): Identifier | Identifier[] { invariant(this.isTargetId(targetId), 'Expected a valid target ID.') - return this.types[targetId] as Identifier | Identifier[] + return this.types.get(targetId) as Identifier | Identifier[] } public isSourceId(handlerId: string) { @@ -123,21 +129,17 @@ export default class HandlerRegistryImpl implements HandlerRegistry { public removeSource(sourceId: string) { invariant(this.getSource(sourceId), 'Expected an existing source.') this.store.dispatch(removeSource(sourceId)) - - asap(() => { - delete this.dragSources[sourceId] - delete this.types[sourceId] + setImmediate(() => { + this.dragSources.delete(sourceId) + this.types.delete(sourceId) }) } public removeTarget(targetId: string) { invariant(this.getTarget(targetId), 'Expected an existing target.') this.store.dispatch(removeTarget(targetId)) - - asap(() => { - delete this.dropTargets[targetId] - delete this.types[targetId] - }) + this.dropTargets.delete(targetId) + this.types.delete(targetId) } public pinSource(sourceId: string) { @@ -161,11 +163,11 @@ export default class HandlerRegistryImpl implements HandlerRegistry { handler: DragSource | DropTarget, ): string { const id = getNextHandlerId(role) - this.types[id] = type + this.types.set(id, type) if (role === HandlerRole.SOURCE) { - this.dragSources[id] = handler as DragSource + this.dragSources.set(id, handler as DragSource) } else if (role === HandlerRole.TARGET) { - this.dropTargets[id] = handler as DropTarget + this.dropTargets.set(id, handler as DropTarget) } return id } diff --git a/packages/dnd-core/src/__tests__/.eslintrc b/packages/dnd-core/src/__tests__/.eslintrc deleted file mode 100644 index 2f8de9aea2..0000000000 --- a/packages/dnd-core/src/__tests__/.eslintrc +++ /dev/null @@ -1,2 +0,0 @@ -env: - jest: true diff --git a/packages/dnd-core/src/__tests__/DragDropMonitor.spec.ts b/packages/dnd-core/src/__tests__/DragDropMonitor.spec.ts index 507896118e..ea9deda7b6 100644 --- a/packages/dnd-core/src/__tests__/DragDropMonitor.spec.ts +++ b/packages/dnd-core/src/__tests__/DragDropMonitor.spec.ts @@ -28,7 +28,11 @@ describe.only('DragDropMonitor', () => { describe('state change subscription', () => { it('throws on bad listener', () => { - expect(() => monitor.subscribeToStateChange(() => { /* empty */ })).not.toThrow() + expect(() => + monitor.subscribeToStateChange(() => { + /* empty */ + }), + ).not.toThrow() expect(() => (monitor as any).subscribeToStateChange()).toThrow() expect(() => (monitor as any).subscribeToStateChange(42)).toThrow() @@ -38,16 +42,40 @@ describe.only('DragDropMonitor', () => { it('throws on bad handlerIds', () => { expect(() => - monitor.subscribeToStateChange(() => {/* empty */}, { handlerIds: [] }), + monitor.subscribeToStateChange( + () => { + /* empty */ + }, + { handlerIds: [] }, + ), ).not.toThrow() expect(() => - monitor.subscribeToStateChange(() => {/* empty */}, { handlerIds: ['hi'] }), + monitor.subscribeToStateChange( + () => { + /* empty */ + }, + { handlerIds: ['hi'] }, + ), ).not.toThrow() expect(() => - monitor.subscribeToStateChange(() => {/* empty */}, { handlerIds: {} as any}), + monitor.subscribeToStateChange( + () => { + /* empty */ + }, + { handlerIds: {} as any }, + ), ).toThrow() expect(() => - monitor.subscribeToStateChange(() => {/* empty */}, { handlerIds: (() => {/* empty */}) as any }), + monitor.subscribeToStateChange( + () => { + /* empty */ + }, + { + handlerIds: (() => { + /* empty */ + }) as any, + }, + ), ).toThrow() }) @@ -545,7 +573,11 @@ describe.only('DragDropMonitor', () => { describe('offset change subscription', () => { it('throws on bad listener', () => { - expect(() => monitor.subscribeToOffsetChange(() => {/* empty */})).not.toThrow() + expect(() => + monitor.subscribeToOffsetChange(() => { + /* empty */ + }), + ).not.toThrow() expect(() => (monitor as any).subscribeToOffsetChange()).toThrow() expect(() => (monitor as any).subscribeToOffsetChange(42)).toThrow() expect(() => (monitor as any).subscribeToOffsetChange('hi')).toThrow() diff --git a/packages/documentation/examples/.eslintrc b/packages/documentation/examples/.eslintrc deleted file mode 100644 index e39dd14904..0000000000 --- a/packages/documentation/examples/.eslintrc +++ /dev/null @@ -1,15 +0,0 @@ -rules: - import/extensions: off - import/no-extraneous-dependencies: off - import/no-unresolved: off - no-param-reassign: off - react/forbid-prop-types: off - react/no-array-index-key: off - react/no-find-dom-node: off - react/no-multi-comp: off - react/no-unused-prop-types: off - react/prefer-stateless-function: off - react/require-default-props: off - react/sort-comp: off -env: - jest: true diff --git a/packages/documentation/examples/01 Dustbin/Copy or Move/Box.tsx b/packages/documentation/examples/01 Dustbin/Copy or Move/Box.tsx index 12b909a266..ac67160822 100644 --- a/packages/documentation/examples/01 Dustbin/Copy or Move/Box.tsx +++ b/packages/documentation/examples/01 Dustbin/Copy or Move/Box.tsx @@ -44,7 +44,7 @@ const boxSource = { dropResult.name }` } - alert(alertMessage) // eslint-disable-line no-alert + alert(alertMessage) } }, } diff --git a/packages/documentation/examples/01 Dustbin/Single Target/Box.tsx b/packages/documentation/examples/01 Dustbin/Single Target/Box.tsx index f56bf5146c..5eab97b123 100644 --- a/packages/documentation/examples/01 Dustbin/Single Target/Box.tsx +++ b/packages/documentation/examples/01 Dustbin/Single Target/Box.tsx @@ -36,7 +36,7 @@ const boxSource = { const dropResult = monitor.getDropResult() if (dropResult) { - alert(`You dropped ${item.name} into ${dropResult.name}!`) // eslint-disable-line no-alert + alert(`You dropped ${item.name} into ${dropResult.name}!`) } }, } diff --git a/packages/documentation/examples/04 Sortable/Stress Test/index.tsx b/packages/documentation/examples/04 Sortable/Stress Test/index.tsx index bfb588f5ad..517a43dcea 100644 --- a/packages/documentation/examples/04 Sortable/Stress Test/index.tsx +++ b/packages/documentation/examples/04 Sortable/Stress Test/index.tsx @@ -17,7 +17,7 @@ export default class SortableStressTest extends React.Component< public componentDidMount() { // Won't fire on server. - this.setState({ shouldRender: true }) // eslint-disable-line react/no-did-mount-set-state + this.setState({ shouldRender: true }) } public render() { diff --git a/packages/documentation/package.json b/packages/documentation/package.json index 51eae9d809..f74c5d2ea1 100644 --- a/packages/documentation/package.json +++ b/packages/documentation/package.json @@ -3,9 +3,13 @@ "version": "3.0.2", "private": true, "scripts": { - "clean": "rimraf __site__ __site_prerender__", - "start": "./scripts/startSiteDevServer.sh", - "build_site": "./scripts/buildStaticSite.sh" + "clean": "rimraf __site__ __site_prerender__", + "serve": "webpack-dev-server --config site/webpack-client.config.js --hot --content-base __site__", + "start": "run-s clean prerender build:index_page serve", + "prerender": "./node_modules/.bin/webpack --config site/webpack-prerender.config.js", + "build": "tsc", + "build:index_page": "ts-node ./scripts/buildSiteIndexPages.ts", + "build_site": "./scripts/buildStaticSite.sh" }, "devDependencies": { "autoprefixer": "^7.1.2", @@ -13,25 +17,19 @@ "babel-register": "^6.24.1", "circular-dependency-plugin": "^5.0.2", "css-loader": "^0.28.11", - "faker": "^3.1.0", "file-loader": "^1.1.11", "html-loader": "^0.5.5", - "immutability-helper": "^2.4.0", "karma-sourcemap-loader": "^0.3.7", "less": "^2.7.2", "less-loader": "^4.1.0", "marked": "^0.3.6", "null-loader": "^0.1.1", "postcss": "^6.0.6", - "prop-types": "^15.6.0", - "react": "^16.4.0", - "react-dnd-test-backend": "^3.0.2", - "react-dom": "^16.4.0", - "react-frame-component": "^3.0.0", "react-hot-loader": "^4.1.2", "rimraf": "^2.6.2", "style-loader": "^0.21.0", "ts-loader": "^4.2.0", + "ts-node": "^6.0.5", "url-loader": "^1.0.1", "webpack": "^4.6.0", "webpack-cli": "^2.1.2", @@ -40,7 +38,19 @@ "dependencies": { "@types/faker": "^4.1.2", "@types/immutability-helper": "^2.6.3", + "@types/lodash": "^4.14.109", + "@types/node": "^10.3.0", + "@types/prop-types": "^15.5.3", "@types/react": "^16.3.14", + "@types/react-dom": "^16.0.5", + "faker": "^3.1.0", + "immutability-helper": "^2.4.0", + "lodash": "^4.17.10", + "prop-types": "^15.6.1", + "react": "^16.4.0", + "react-dnd-test-backend": "^3.0.2", + "react-dom": "^16.4.0", + "react-frame-component": "^3.0.0", "shallowequal": "^1.0.2" } } diff --git a/packages/documentation/scripts/buildSiteIndexPages.sh b/packages/documentation/scripts/buildSiteIndexPages.sh deleted file mode 100755 index 26607ef6bd..0000000000 --- a/packages/documentation/scripts/buildSiteIndexPages.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env node -require('babel-register'); - -// -*- mode: js -*- -"use strict"; - -var fs = require('fs'); -var path = require('path'); -var glob = require('glob'); -var Constants = require('../site/Constants'); -var renderPath = require('../__site_prerender__/renderPath').default; -var flatten = require('lodash/flatten'); - -var sitePath = path.join(__dirname, '../__site__'); -if (!fs.existsSync(sitePath)) { - fs.mkdirSync(sitePath); -} - -var files = { - 'main.js': 'main.js' -}; - -if (process.env.NODE_ENV === 'production') { - Object.keys(files).forEach(function(fileName) { - var searchPath = path.join( - __dirname, - '../__site__/' + fileName.replace('.', '-*.') - ); - var hashedFilename = glob.sync(searchPath)[0]; - if (!hashedFilename) { - throw new Error( - 'Hashed file of "' + fileName + '" ' + - 'not found when searching with "' + searchPath + '"' - ); - } - - files[fileName] = path.basename(hashedFilename); - }); -} - -var locations = flatten([ - Constants.APIPages.map(function (group) { - return group.pages; - }), - Constants.ExamplePages.map(function (group) { - return group.pages; - }), - Constants.Pages -]).reduce(function(paths, pages) { - return paths.concat( - Object.keys(pages).map(function(key) { - return pages[key].location; - }) - ); -}, []); - -locations.forEach(function(fileName) { - var props = { - location: fileName, - devMode: process.env.NODE_ENV !== 'production', - files: files - }; - - renderPath(fileName, props, function(content) { - fs.writeFileSync( - path.join(sitePath, fileName), - content - ); - }); -}); diff --git a/packages/documentation/scripts/buildSiteIndexPages.ts b/packages/documentation/scripts/buildSiteIndexPages.ts new file mode 100755 index 0000000000..12da4c77ea --- /dev/null +++ b/packages/documentation/scripts/buildSiteIndexPages.ts @@ -0,0 +1,58 @@ +import fs from 'fs' +import path from 'path' +import * as Constants from '../site/Constants' +import flatten from 'lodash/flatten' + +const glob = require('glob') +const renderPath = require('../__site_prerender__/renderPath').default + +const sitePath = path.join(__dirname, '../__site__') +if (!fs.existsSync(sitePath)) { + fs.mkdirSync(sitePath) +} + +const files: { [key: string]: string } = { + 'main.js': 'main.js', +} + +if (process.env.NODE_ENV === 'production') { + Object.keys(files).forEach(fileName => { + const searchPath = path.join( + __dirname, + '../__site__/' + fileName.replace('.', '-*.'), + ) + const hashedFilename = glob.sync(searchPath)[0] + if (!hashedFilename) { + throw new Error( + 'Hashed file of "' + + fileName + + '" ' + + 'not found when searching with "' + + searchPath + + '"', + ) + } + + files[fileName] = path.basename(hashedFilename) + }) +} + +const locations = flatten([ + Constants.APIPages.map((group: any) => group.pages), + Constants.ExamplePages.map((group: any) => group.pages), + Constants.Pages, +]).reduce((paths: string[], pages: { [key: string]: any }) => { + return paths.concat(Object.keys(pages).map(key => pages[key].location)) +}, []) + +locations.forEach((fileName: string) => { + const props = { + location: fileName, + devMode: process.env.NODE_ENV !== 'production', + files, + } + + renderPath(fileName, props, (content: string) => { + fs.writeFileSync(path.join(sitePath, fileName), content) + }) +}) diff --git a/packages/documentation/scripts/buildStaticSite.sh b/packages/documentation/scripts/buildStaticSite.sh index 6f489003f5..eed9520aff 100755 --- a/packages/documentation/scripts/buildStaticSite.sh +++ b/packages/documentation/scripts/buildStaticSite.sh @@ -6,4 +6,4 @@ rm -rf ./__site__ rm -rf ./__site_prerender__ NODE_ENV=production webpack --config "$PWD/site/webpack-client.config.js" NODE_ENV=production webpack --config "$PWD/site/webpack-prerender.config.js" -NODE_ENV=production ./scripts/buildSiteIndexPages.sh +NODE_ENV=production ts-node ./scripts/buildSiteIndexPages.ts diff --git a/packages/documentation/scripts/startSiteDevServer.sh b/packages/documentation/scripts/startSiteDevServer.sh deleted file mode 100755 index 93ba41076c..0000000000 --- a/packages/documentation/scripts/startSiteDevServer.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -e -PATH=$(npm bin):$PATH - -rm -rf ./__site__ -rm -rf ./__site_prerender__ -./node_modules/.bin/webpack --config "$PWD/site/webpack-prerender.config.js" -./scripts/buildSiteIndexPages.sh -./node_modules/.bin/webpack-dev-server --config "$PWD/site/webpack-client.config.js" --hot --content-base __site__ diff --git a/packages/documentation/site/Constants.js b/packages/documentation/site/Constants.ts similarity index 90% rename from packages/documentation/site/Constants.js rename to packages/documentation/site/Constants.ts index f7d7af9c87..5051d1d237 100644 --- a/packages/documentation/site/Constants.js +++ b/packages/documentation/site/Constants.ts @@ -1,11 +1,21 @@ -export const Pages = { +export interface Page { + location: string + title: string +} + +export interface PageGroup { + title: string + pages: { [key: string]: Page } +} + +export const Pages: { [key: string]: Page } = { HOME: { location: 'index.html', title: 'Home', }, } -export const APIPages = [ +export const APIPages: PageGroup[] = [ { title: 'Quick Start', pages: { @@ -101,7 +111,7 @@ export const APIPages = [ }, ] -export const ExamplePages = [ +export const ExamplePages: PageGroup[] = [ { title: 'Chessboard', pages: { @@ -203,5 +213,6 @@ export const ExamplePages = [ }, ] -export const DOCS_DEFAULT = APIPages[0].pages.OVERVIEW -export const EXAMPLES_DEFAULT = ExamplePages[0].pages.CHESSBOARD_TUTORIAL_APP +export const DOCS_DEFAULT: Page = APIPages[0].pages.OVERVIEW +export const EXAMPLES_DEFAULT: Page = ExamplePages[0].pages + .CHESSBOARD_TUTORIAL_APP as Page diff --git a/packages/documentation/site/IndexPage.js b/packages/documentation/site/IndexPage.tsx similarity index 73% rename from packages/documentation/site/IndexPage.js rename to packages/documentation/site/IndexPage.tsx index 5ac3392e80..2567b3285f 100644 --- a/packages/documentation/site/IndexPage.js +++ b/packages/documentation/site/IndexPage.tsx @@ -1,12 +1,12 @@ import './base.less' -import Constants, { APIPages, ExamplePages, Pages } from './Constants' +import { APIPages, ExamplePages, Pages } from './Constants' import HomePage from './pages/HomePage' import APIPage from './pages/APIPage' import ExamplePage from './pages/ExamplePage' -import React, { Component } from 'react' +import * as React from 'react' import ReactDOMServer from 'react-dom/server' -const APIDocs = { +const APIDocs: { [key: string]: any } = { OVERVIEW: require('../docs/00 Quick Start/Overview.md'), TUTORIAL: require('../docs/00 Quick Start/Tutorial.md'), TESTING: require('../docs/00 Quick Start/Testing.md'), @@ -26,7 +26,7 @@ const APIDocs = { TEST_BACKEND: require('../docs/04 Backends/Test.md'), } -const Examples = { +const Examples: { [key: string]: any } = { CHESSBOARD_TUTORIAL_APP: require('../examples/00 Chessboard/Tutorial App') .default, DUSTBIN_SINGLE_TARGET: require('../examples/01 Dustbin/Single Target') @@ -53,26 +53,47 @@ const Examples = { OTHER_NATIVE_FILES: require('../examples/06 Other/Native Files').default, } -export default class IndexPage extends Component { - static getDoctype() { +export interface IndexPageProps { + devMode?: boolean + files: any + location: string +} + +export interface IndexPageState { + renderPage?: boolean +} + +export default class IndexPage extends React.Component< + IndexPageProps, + IndexPageState +> { + public static getDoctype() { return '' } - static renderToString(props) { + public static renderToString(props: IndexPageProps) { return ( IndexPage.getDoctype() + ReactDOMServer.renderToString() ) } - constructor(props) { + constructor(props: IndexPageProps) { super(props) this.state = { renderPage: !this.props.devMode, } } - render() { + public componentDidMount() { + if (!this.state.renderPage) { + this.setState({ + renderPage: true, + }) + } + } + + public render() { // Dump out our current props to a global object via a script tag so // when initialising the browser environment we can bootstrap from the // same props as what each page was rendered with. @@ -101,41 +122,46 @@ export default class IndexPage extends Component { ) } - renderPage() { + private renderPage() { switch (this.props.location) { case Pages.HOME.location: return } - for (let groupIndex in APIPages) { - const group = APIPages[groupIndex] - const pageKeys = Object.keys(group.pages) - - for (let i = 0; i < pageKeys.length; i++) { - const key = pageKeys[i] - const page = group.pages[key] - - if (this.props.location === page.location) { - return + for (const groupIndex in APIPages) { + if (groupIndex !== undefined) { + const group = APIPages[groupIndex] + const pageKeys = Object.keys(group.pages) + + for (const key of pageKeys) { + if (key) { + const page = group.pages[key] + if (this.props.location === page.location) { + return + } + } } } } - for (let groupIndex in ExamplePages) { - const group = ExamplePages[groupIndex] - const pageKeys = Object.keys(group.pages) - - for (let i = 0; i < pageKeys.length; i++) { - const key = pageKeys[i] - const page = group.pages[key] - const Component = Examples[key] - - if (this.props.location === page.location) { - return ( - - - - ) + for (const groupIndex in ExamplePages) { + if (groupIndex !== undefined) { + const group = ExamplePages[groupIndex] + const pageKeys = Object.keys(group.pages) + + for (const key of pageKeys) { + if (key) { + const page = group.pages[key] + const ExamplComponent = Examples[key] + + if (this.props.location === page.location) { + return ( + + + + ) + } + } } } } @@ -144,12 +170,4 @@ export default class IndexPage extends Component { 'Page of location ' + JSON.stringify(this.props.location) + ' not found.', ) } - - componentDidMount() { - if (!this.state.renderPage) { - this.setState({ - renderPage: true, - }) - } - } } diff --git a/packages/documentation/site/client.js b/packages/documentation/site/client.js deleted file mode 100644 index 5ee7c1fb15..0000000000 --- a/packages/documentation/site/client.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react' -import { render } from 'react-dom' -import IndexPage from './IndexPage' - -render(, document) diff --git a/packages/documentation/site/client.tsx b/packages/documentation/site/client.tsx new file mode 100644 index 0000000000..b2b2b18cc3 --- /dev/null +++ b/packages/documentation/site/client.tsx @@ -0,0 +1,6 @@ +import React from 'react' +import * as ReactDOM from 'react-dom' +import IndexPage from './IndexPage' + +const initialProps: any = (window as any).INITIAL_PROPS +ReactDOM.render( as any, document as any) diff --git a/packages/documentation/site/components/CodeBlock.js b/packages/documentation/site/components/CodeBlock.tsx similarity index 52% rename from packages/documentation/site/components/CodeBlock.js rename to packages/documentation/site/components/CodeBlock.tsx index 2141b0f5f5..54a710b6b8 100644 --- a/packages/documentation/site/components/CodeBlock.js +++ b/packages/documentation/site/components/CodeBlock.tsx @@ -1,4 +1,4 @@ -import React, { Component } from 'react' +import * as React from 'react' import PropTypes from 'prop-types' import { findDOMNode } from 'react-dom' import StaticHTMLBlock from './StaticHTMLBlock' @@ -6,73 +6,102 @@ import StaticHTMLBlock from './StaticHTMLBlock' import './CodeBlock.less' let preferredSyntax = 'es7' -let observers = [] +type Observer = (value: string) => void +const observers: Observer[] = [] -function subscribe(observer) { +const SYNTAXES: Syntax[] = ['es7', 'es6', 'es5'] + +function subscribe(observer: Observer) { observers.push(observer) return () => { observers.slice(observers.indexOf(observer), 1) } } -function setPreferredSyntax(syntax) { +function setPreferredSyntax(syntax: string) { preferredSyntax = syntax observers.forEach(o => o(preferredSyntax)) } -export default class CodeBlock extends Component { - static propTypes = { +export interface CodeBlockProps { + es5: string + es6: string + es7: string +} + +export type Syntax = 'es5' | 'es6' | 'es7' + +export interface CodeBlockState { + chosen: boolean + syntax: Syntax +} + +export default class CodeBlock extends React.Component< + CodeBlockProps, + CodeBlockState +> { + public static propTypes = { es5: PropTypes.string, es6: PropTypes.string, es7: PropTypes.string, } - static defaultProps = { + public static defaultProps = { es5: '', es6: '', es7: '', } - constructor(props) { + private unsubscribe: (() => void) | undefined + + constructor(props: CodeBlockProps) { super(props) this.state = { chosen: false, syntax: - (this.props.es7.trim().length && 'es7') || - (this.props.es6.trim().length && 'es6') || - (this.props.es5.trim().length && 'es5'), + (props.es7 && props.es7.trim().length && 'es7') || + (props.es6 && props.es6.trim().length && 'es6') || + (props.es5 && props.es5.trim().length && 'es5') || + 'es5', } } - componentDidMount() { + public componentDidMount() { this.unsubscribe = subscribe(this.handlePreferredSyntaxChange.bind(this)) } - handlePreferredSyntaxChange(syntax) { - if (this.state.chosen || this.state.syntax === syntax) { - return - } - - if (this.props[syntax].trim().length) { - this.setState({ - syntax, - }) + public componentWillUnmount() { + if (this.unsubscribe) { + this.unsubscribe() } } - componentWillUnmount() { - this.unsubscribe() + public render(): React.ReactNode { + return ( +
+
    + {SYNTAXES.map(this.renderSyntaxLink, this)} +
+
+ +
+
+ ) } - handleSyntaxClick(syntax) { + private handleSyntaxClick(syntax: Syntax) { this.setState({ syntax, chosen: true, }) - const scrollTopBefore = findDOMNode(this).getBoundingClientRect().top + const thisDom = findDOMNode(this) as HTMLDivElement + if (!thisDom) { + return null + } + const scrollTopBefore = thisDom.getBoundingClientRect().top setPreferredSyntax(syntax) - const scrollTopAfter = findDOMNode(this).getBoundingClientRect().top + const scrollTopAfter = thisDom.getBoundingClientRect().top window.scroll( window.pageXOffset || window.scrollX, @@ -81,21 +110,21 @@ export default class CodeBlock extends Component { ) } - render() { - return ( -
-
    - {['es7', 'es6', 'es5'].map(this.renderSyntaxLink, this)} -
-
- -
-
- ) + private handlePreferredSyntaxChange(syntax: Syntax) { + if (this.state.chosen || this.state.syntax === syntax) { + return + } + + if (this.props[syntax].trim().length) { + this.setState({ + syntax, + }) + } } - renderSyntaxLink(syntax) { - if (!this.props[syntax] || !this.props[syntax].trim().length) { + private renderSyntaxLink(syntax: Syntax) { + const value = this.props[syntax] + if (!value || !value.trim().length) { return } diff --git a/packages/documentation/site/components/Cover.js b/packages/documentation/site/components/Cover.tsx similarity index 65% rename from packages/documentation/site/components/Cover.js rename to packages/documentation/site/components/Cover.tsx index 1dd1172a12..02dd6d6df4 100644 --- a/packages/documentation/site/components/Cover.js +++ b/packages/documentation/site/components/Cover.tsx @@ -1,8 +1,8 @@ -import React, { Component } from 'react' +import React from 'react' import './Cover.less' -export default class Cover extends Component { - render() { +export default class Cover extends React.Component { + public render() { return (
diff --git a/packages/documentation/site/components/Header.js b/packages/documentation/site/components/Header.tsx similarity index 65% rename from packages/documentation/site/components/Header.js rename to packages/documentation/site/components/Header.tsx index d8313ace96..6070912d86 100644 --- a/packages/documentation/site/components/Header.js +++ b/packages/documentation/site/components/Header.tsx @@ -1,11 +1,11 @@ -import React, { Component } from 'react' +import React from 'react' import PropTypes from 'prop-types' import NavBar from './NavBar' import Cover from './Cover' import './Header.less' -export default class Header extends Component { - render() { +export default class Header extends React.Component { + public render() { return (
diff --git a/packages/documentation/site/components/NavBar.js b/packages/documentation/site/components/NavBar.tsx similarity index 83% rename from packages/documentation/site/components/NavBar.js rename to packages/documentation/site/components/NavBar.tsx index ad23460a38..40dfde6e8e 100644 --- a/packages/documentation/site/components/NavBar.js +++ b/packages/documentation/site/components/NavBar.tsx @@ -1,13 +1,13 @@ -import React, { Component } from 'react' -import { DOCS_DEFAULT, EXAMPLES_DEFAULT } from '../Constants' +import React from 'react' import './NavBar.less' +const { DOCS_DEFAULT, EXAMPLES_DEFAULT } = require('../Constants') const GITHUB_URL = 'https://github.com/react-dnd/react-dnd' const DOCS_LOCATION = DOCS_DEFAULT.location const EXAMPLES_LOCATION = EXAMPLES_DEFAULT.location -export default class NavBar extends Component { - render() { +export default class NavBar extends React.Component { + public render() { return (
diff --git a/packages/documentation/site/components/PageBody.js b/packages/documentation/site/components/PageBody.tsx similarity index 50% rename from packages/documentation/site/components/PageBody.js rename to packages/documentation/site/components/PageBody.tsx index e213661a34..93278224da 100644 --- a/packages/documentation/site/components/PageBody.js +++ b/packages/documentation/site/components/PageBody.tsx @@ -1,14 +1,18 @@ -import React, { Component } from 'react' +import React from 'react' import PropTypes from 'prop-types' import './PageBody.less' -export default class PageBody extends Component { - static propTypes = { +export interface PageBodyProps { + hasSidebar: boolean + html?: any +} +export default class PageBody extends React.Component { + public static propTypes = { hasSidebar: PropTypes.bool, } - render() { - var { hasSidebar, html, ...props } = this.props + public render() { + const { hasSidebar, html, ...props } = this.props return (
{this.props.children}
diff --git a/packages/documentation/site/components/SideBar.js b/packages/documentation/site/components/SideBar.tsx similarity index 66% rename from packages/documentation/site/components/SideBar.js rename to packages/documentation/site/components/SideBar.tsx index c548a257a8..6b77fbfd5b 100644 --- a/packages/documentation/site/components/SideBar.js +++ b/packages/documentation/site/components/SideBar.tsx @@ -1,8 +1,14 @@ -import React, { Component } from 'react' +import React from 'react' import './SideBar.less' +import { Page, PageGroup } from '../Constants' -export default class SideBar extends Component { - render() { +export interface SideBarProps { + groups: PageGroup[] + example: Page +} + +export default class SideBar extends React.Component { + public render() { return (
@@ -12,7 +18,7 @@ export default class SideBar extends Component { ) } - renderGroup({ title, pages }, index) { + private renderGroup({ title, pages }: PageGroup, index: number) { return (

{title}

@@ -21,7 +27,7 @@ export default class SideBar extends Component { ) } - renderLink({ title, location }, key) { + private renderLink({ title, location }: Page, key: string) { const arrow = let linkClass = 'SideBar-item' diff --git a/packages/documentation/site/components/StaticHTMLBlock.js b/packages/documentation/site/components/StaticHTMLBlock.tsx similarity index 75% rename from packages/documentation/site/components/StaticHTMLBlock.js rename to packages/documentation/site/components/StaticHTMLBlock.tsx index 3e6665fdef..8e1d99bd15 100644 --- a/packages/documentation/site/components/StaticHTMLBlock.js +++ b/packages/documentation/site/components/StaticHTMLBlock.tsx @@ -1,13 +1,19 @@ -import React, { Component } from 'react' +import React from 'react' import PropTypes from 'prop-types' import CodeBlock from './CodeBlock' -export default class StaticHTMLBlock extends Component { - static propTypes = { +export interface StaticHTMLBlockProps { + html: string +} + +export default class StaticHTMLBlock extends React.Component< + StaticHTMLBlockProps +> { + public static propTypes = { html: PropTypes.string.isRequired, } - render() { + public render() { const { html } = this.props // Here goes a really hack-ish way to convert @@ -44,9 +50,9 @@ export default class StaticHTMLBlock extends Component { elements.push( , ) break diff --git a/packages/documentation/site/pages/APIPage.js b/packages/documentation/site/pages/APIPage.tsx similarity index 80% rename from packages/documentation/site/pages/APIPage.js rename to packages/documentation/site/pages/APIPage.tsx index d3a6b5bd94..2765756469 100644 --- a/packages/documentation/site/pages/APIPage.js +++ b/packages/documentation/site/pages/APIPage.tsx @@ -5,15 +5,13 @@ import SideBar from '../components/SideBar' import StaticHTMLBlock from '../components/StaticHTMLBlock' import { APIPages } from '../Constants' -export default class APIPage extends Component { - render() { +export default class APIPage extends React.Component { + public render() { return (
- - + -
diff --git a/packages/documentation/site/pages/ExamplePage.js b/packages/documentation/site/pages/ExamplePage.tsx similarity index 53% rename from packages/documentation/site/pages/ExamplePage.js rename to packages/documentation/site/pages/ExamplePage.tsx index e404dc3acb..8d7584614d 100644 --- a/packages/documentation/site/pages/ExamplePage.js +++ b/packages/documentation/site/pages/ExamplePage.tsx @@ -1,15 +1,19 @@ -import React, { Component } from 'react' +import React from 'react' import Header from '../components/Header' import PageBody from '../components/PageBody' import SideBar from '../components/SideBar' -import { ExamplePages } from '../Constants' +import { ExamplePages, Page } from '../Constants' -export default class ExamplesPage extends Component { - render() { +export interface ExamplePagesProps { + example: Page +} + +export default class ExamplesPage extends React.Component { + public render() { return (
- + {this.props.children} diff --git a/packages/documentation/site/pages/HomePage.js b/packages/documentation/site/pages/HomePage.tsx similarity index 54% rename from packages/documentation/site/pages/HomePage.js rename to packages/documentation/site/pages/HomePage.tsx index 35438fdc3c..e83bba43e0 100644 --- a/packages/documentation/site/pages/HomePage.js +++ b/packages/documentation/site/pages/HomePage.tsx @@ -1,16 +1,15 @@ -import React, { Component } from 'react' +import * as React from 'react' import Header from '../components/Header' import PageBody from '../components/PageBody' import StaticHTMLBlock from '../components/StaticHTMLBlock' -import IndexHTML from '../../docs/index.md' +const IndexHTML = require('../../docs/index.md') -export default class HomePage extends Component { - render() { +export default class HomePage extends React.Component { + public render() { return (
-
- - +
+
diff --git a/packages/documentation/site/renderPath.js b/packages/documentation/site/renderPath.ts similarity index 58% rename from packages/documentation/site/renderPath.js rename to packages/documentation/site/renderPath.ts index 860b089e17..6f9e04b131 100644 --- a/packages/documentation/site/renderPath.js +++ b/packages/documentation/site/renderPath.ts @@ -1,6 +1,6 @@ import React from 'react' import IndexPage from './IndexPage' -export default function renderPath(path, props, onRender) { +export default function renderPath(path: string, props: any, onRender: any) { onRender(IndexPage.renderToString(props)) } diff --git a/packages/documentation/site/webpack-client.config.js b/packages/documentation/site/webpack-client.config.js index deddd0ba84..05d7d62c85 100644 --- a/packages/documentation/site/webpack-client.config.js +++ b/packages/documentation/site/webpack-client.config.js @@ -8,7 +8,7 @@ const root = path.join(__dirname, '..', '..', '..') module.exports = { mode: isDev ? 'development' : 'production', devtool: isDev ? 'cheap-eval-source-map' : 'source-map', - entry: [path.join(__dirname, 'client.js')].concat( + entry: [path.join(__dirname, 'client.tsx')].concat( isDev ? [ 'webpack-dev-server/client?http://localhost:8080', @@ -39,21 +39,6 @@ module.exports = { path.join(__dirname, '../scripts/markdownLoader'), ], }, - { - test: /\.js$/, - exclude: /node_modules/, - use: isDev - ? [ - { - loader: 'babel-loader', - options: { - babelrc: true, - plugins: ['react-hot-loader/babel'], - }, - }, - ] - : ['babel-loader'], - }, { test: /\.ts(x|)$/, exclude: /node_modules/, diff --git a/packages/documentation/site/webpack-prerender.config.js b/packages/documentation/site/webpack-prerender.config.js index c070fdc990..e3a1d25f17 100644 --- a/packages/documentation/site/webpack-prerender.config.js +++ b/packages/documentation/site/webpack-prerender.config.js @@ -6,7 +6,7 @@ var isDev = process.env.NODE_ENV !== 'production' const root = path.join(__dirname, '..', '..', '..') module.exports = { - entry: path.join(__dirname, 'renderPath.js'), + entry: path.join(__dirname, 'renderPath.ts'), mode: isDev ? 'development' : 'production', output: { path: path.join(__dirname, '..', '__site_prerender__'), @@ -28,11 +28,6 @@ module.exports = { path.join(__dirname, '../scripts/markdownLoader'), ], }, - { - test: /\.js$/, - use: 'babel-loader', - exclude: /node_modules/, - }, { test: /\.ts(x|)$/, exclude: /node_modules/, diff --git a/packages/documentation/tsconfig.json b/packages/documentation/tsconfig.json index 1cee8db619..75aa2ec6f7 100644 --- a/packages/documentation/tsconfig.json +++ b/packages/documentation/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "declaration": true, - "sourceMap": true - } + "sourceMap": true, + "outDir": "lib" + }, } diff --git a/packages/react-dnd-html5-backend/.babelrc b/packages/react-dnd-html5-backend/.babelrc deleted file mode 100644 index f2e312799e..0000000000 --- a/packages/react-dnd-html5-backend/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["env", "stage-2"] -} diff --git a/packages/react-dnd-html5-backend/.eslintignore b/packages/react-dnd-html5-backend/.eslintignore deleted file mode 100644 index 8ab83d13c7..0000000000 --- a/packages/react-dnd-html5-backend/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -site -dist -lib -**/node_modules -**/webpack*.config.js diff --git a/packages/react-dnd-html5-backend/.eslintrc b/packages/react-dnd-html5-backend/.eslintrc deleted file mode 100644 index 4050580e28..0000000000 --- a/packages/react-dnd-html5-backend/.eslintrc +++ /dev/null @@ -1,2 +0,0 @@ -rules: - no-param-reassign: off diff --git a/packages/react-dnd-html5-backend/.npmignore b/packages/react-dnd-html5-backend/.npmignore index 7e3d47b665..91975b6842 100644 --- a/packages/react-dnd-html5-backend/.npmignore +++ b/packages/react-dnd-html5-backend/.npmignore @@ -1,6 +1,3 @@ test -.babelrc webpack.config.js -.eslintignore -.eslintrc .travis.yml diff --git a/packages/react-dnd-html5-backend/package.json b/packages/react-dnd-html5-backend/package.json index 9cf1f332ed..5bddb77f23 100644 --- a/packages/react-dnd-html5-backend/package.json +++ b/packages/react-dnd-html5-backend/package.json @@ -17,11 +17,18 @@ "build": "run-p bundle:* transpile", "test": "run-s clean build" }, + "dependencies": { + "@types/lodash": "^4.14.109", + "@types/react": "^16.3.16", + "@types/shallowequal": "^0.2.2", + "autobind-decorator": "^2.1.0", + "dnd-core": "^3.0.2", + "lodash": "^4.17.10", + "react": "^16.4.0", + "shallowequal": "^1.0.2" + }, "devDependencies": { - "@types/autobind-decorator": "^2.1.0", - "@types/lodash": "^4.14.108", - "babel-cli": "^6.26.0", - "babel-loader": "^7.1.4", + "@types/node": "^10.3.0", "npm-run-all": "^4.1.2", "react-dnd": "^3.0.2", "react-dnd-test-backend": "^3.0.2", @@ -30,10 +37,7 @@ "typescript": "^2.8.3", "webpack": "^4.6.0" }, - "dependencies": { - "autobind-decorator": "^2.1.0", - "dnd-core": "^3.0.2", - "lodash": "^4.2.0", - "shallowequal": "^1.0.2" + "peerDependencies": { + "react": ">= 16.4" } } diff --git a/packages/react-dnd-html5-backend/src/BrowserDetector.ts b/packages/react-dnd-html5-backend/src/BrowserDetector.ts index e161908810..d3121d7b79 100644 --- a/packages/react-dnd-html5-backend/src/BrowserDetector.ts +++ b/packages/react-dnd-html5-backend/src/BrowserDetector.ts @@ -1,4 +1,4 @@ -const memoize = require('lodash/memoize') +import memoize from 'lodash/memoize' declare global { // tslint:disable-next-line interface-name @@ -7,5 +7,8 @@ declare global { } } -export const isFirefox = memoize(() => /firefox/i.test(navigator.userAgent)) -export const isSafari = memoize(() => Boolean(window.safari)) +export type Predicate = () => boolean +export const isFirefox: Predicate = memoize(() => + /firefox/i.test(navigator.userAgent), +) +export const isSafari: Predicate = memoize(() => Boolean(window.safari)) diff --git a/packages/react-dnd-html5-backend/src/HTML5Backend.ts b/packages/react-dnd-html5-backend/src/HTML5Backend.ts index e254021b3b..e547afd0d1 100644 --- a/packages/react-dnd-html5-backend/src/HTML5Backend.ts +++ b/packages/react-dnd-html5-backend/src/HTML5Backend.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-underscore-dangle */ import defaults from 'lodash/defaults' import { Backend, @@ -22,8 +21,7 @@ import { import * as NativeTypes from './NativeTypes' import autobind from 'autobind-decorator' import { HTML5BackendContext } from './interfaces' - -const shallowEqual = require('shallowequal') +import shallowEqual from 'shallowequal' declare global { // tslint:disable-next-line interface-name @@ -476,7 +474,7 @@ export default class HTML5Backend implements Backend { // Looks like a Safari bug: dataTransfer.types is null, but there was no draggable. // Just let it drag. It's a native type (URL or text) and will be picked up in // dragenter handler. - return // eslint-disable-line no-useless-return + return } else { // If by this time no drag source reacted, tell browser not to drag. e.preventDefault() diff --git a/packages/react-dnd-html5-backend/src/MonotonicInterpolant.ts b/packages/react-dnd-html5-backend/src/MonotonicInterpolant.ts index a3d3128bc1..d8514dcbba 100644 --- a/packages/react-dnd-html5-backend/src/MonotonicInterpolant.ts +++ b/packages/react-dnd-html5-backend/src/MonotonicInterpolant.ts @@ -1,7 +1,3 @@ -/* eslint - no-plusplus: off, - no-mixed-operators: off -*/ export default class MonotonicInterpolant { private xs: any private ys: any diff --git a/packages/react-dnd-html5-backend/src/NativeDragSources.ts b/packages/react-dnd-html5-backend/src/NativeDragSources.ts index 46099d8e7d..9e82063095 100644 --- a/packages/react-dnd-html5-backend/src/NativeDragSources.ts +++ b/packages/react-dnd-html5-backend/src/NativeDragSources.ts @@ -12,9 +12,7 @@ function getDataFromDataTransfer( null, ) - return result != null // eslint-disable-line eqeqeq - ? result - : defaultValue + return result != null ? result : defaultValue } const nativeTypesConfig: { diff --git a/packages/react-dnd-html5-backend/src/__tests__/.eslintrc b/packages/react-dnd-html5-backend/src/__tests__/.eslintrc deleted file mode 100644 index 2f8de9aea2..0000000000 --- a/packages/react-dnd-html5-backend/src/__tests__/.eslintrc +++ /dev/null @@ -1,2 +0,0 @@ -env: - jest: true diff --git a/packages/react-dnd-test-backend/.babelrc b/packages/react-dnd-test-backend/.babelrc deleted file mode 100644 index f2e312799e..0000000000 --- a/packages/react-dnd-test-backend/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["env", "stage-2"] -} diff --git a/packages/react-dnd-test-backend/.eslintignore b/packages/react-dnd-test-backend/.eslintignore deleted file mode 100644 index dde8e23a7b..0000000000 --- a/packages/react-dnd-test-backend/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -dist -lib -**/node_modules -**/webpack*.config.js diff --git a/packages/react-dnd-test-backend/.eslintrc b/packages/react-dnd-test-backend/.eslintrc deleted file mode 100644 index afbffb00b6..0000000000 --- a/packages/react-dnd-test-backend/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -env: - mocha: true -rules: - comma-dangle: 0 - id-length: 0 - consistent-return: 0 diff --git a/packages/react-dnd-test-backend/.npmignore b/packages/react-dnd-test-backend/.npmignore index 079a275683..02ba1793bb 100644 --- a/packages/react-dnd-test-backend/.npmignore +++ b/packages/react-dnd-test-backend/.npmignore @@ -1,3 +1 @@ .babelrc -.eslintrc -.eslintignore diff --git a/packages/react-dnd-test-backend/package.json b/packages/react-dnd-test-backend/package.json index 4e5c5fbfd8..4d4424ad4d 100644 --- a/packages/react-dnd-test-backend/package.json +++ b/packages/react-dnd-test-backend/package.json @@ -15,11 +15,12 @@ "prepublish": "npm run test" }, "dependencies": { + "@types/lodash": "^4.14.109", "dnd-core": "^3.0.2", "lodash": "^4.17.10" }, "peerDependencies": { - "react-dnd": "^2.2.0" + "react": ">= 16.4" }, "devDependencies": { "npm-run-all": "^4.1.2", diff --git a/packages/react-dnd/.babelrc b/packages/react-dnd/.babelrc deleted file mode 100644 index f8e2d6f2d8..0000000000 --- a/packages/react-dnd/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["env", "stage-2", "react"], - "plugins": ["transform-decorators-legacy"] -} diff --git a/packages/react-dnd/.eslintignore b/packages/react-dnd/.eslintignore deleted file mode 100644 index f221387964..0000000000 --- a/packages/react-dnd/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist -lib diff --git a/packages/react-dnd/.eslintrc b/packages/react-dnd/.eslintrc deleted file mode 100644 index 673a3867b5..0000000000 --- a/packages/react-dnd/.eslintrc +++ /dev/null @@ -1,2 +0,0 @@ -rules: - react/sort-comp: off diff --git a/packages/react-dnd/.npmignore b/packages/react-dnd/.npmignore index 4af53e62e8..3269032af0 100644 --- a/packages/react-dnd/.npmignore +++ b/packages/react-dnd/.npmignore @@ -2,7 +2,4 @@ src webpack.config.js tests.webpack.js karma.conf.js -.babelrc -.eslintrc -.eslintignore bower.json diff --git a/packages/react-dnd/package.json b/packages/react-dnd/package.json index 956ea955ea..e563e639a8 100644 --- a/packages/react-dnd/package.json +++ b/packages/react-dnd/package.json @@ -18,19 +18,21 @@ "test": "run-s clean build" }, "dependencies": { - "disposables": "^1.0.1", + "@types/invariant": "^2.2.29", + "@types/lodash": "^4.14.109", + "@types/node": "^10.3.0", + "@types/prop-types": "^15.5.3", + "@types/react": "^16.3.14", + "@types/react-dom": "^16.0.5", + "@types/shallowequal": "^0.2.2", "dnd-core": "^3.0.2", "hoist-non-react-statics": "^2.5.0", "invariant": "^2.1.0", - "lodash": "^4.2.0", - "prop-types": "^15.5.10", + "lodash": "^4.17.10", + "prop-types": "^15.6.1", "shallowequal": "^1.0.2" }, "devDependencies": { - "@types/lodash": "^4.14.108", - "@types/prop-types": "^15.5.2", - "@types/react": "^16.3.14", - "@types/react-dom": "^16.0.5", "babel-cli": "^6.26.0", "babel-loader": "^7.1.1", "npm-run-all": "^4.1.2", @@ -42,6 +44,6 @@ "webpack-cli": "^2.1.2" }, "peerDependencies": { - "react": ">= 16.3" + "react": ">= 16.4" } } diff --git a/packages/react-dnd/src/DragDropContext.tsx b/packages/react-dnd/src/DragDropContext.tsx index 75e19b4f06..e235ca7f3a 100644 --- a/packages/react-dnd/src/DragDropContext.tsx +++ b/packages/react-dnd/src/DragDropContext.tsx @@ -66,7 +66,7 @@ export function DragDropContext< S, TargetComponent extends React.Component | React.StatelessComponent

>(backendFactory: BackendFactory, backendContext?: any) { - checkDecoratorArguments('DragDropContext', 'backend', backendFactory) // eslint-disable-line prefer-rest-params + checkDecoratorArguments('DragDropContext', 'backend', backendFactory) const childContext = createChildContext(backendFactory, backendContext) return function decorateContext>( diff --git a/packages/react-dnd/src/DragLayer.tsx b/packages/react-dnd/src/DragLayer.tsx index e8b7b4ebc2..68ea530378 100644 --- a/packages/react-dnd/src/DragLayer.tsx +++ b/packages/react-dnd/src/DragLayer.tsx @@ -7,8 +7,7 @@ import checkDecoratorArguments from './utils/checkDecoratorArguments' import { DragDropManager, Unsubscribe } from 'dnd-core' import { DragLayerCollector, DndOptions, DndComponentClass } from './interfaces' import { Consumer } from './DragDropContext' - -const shallowEqual = require('shallowequal') +import shallowEqual from 'shallowequal' export default function DragLayer< P, @@ -16,7 +15,7 @@ export default function DragLayer< TargetComponent extends React.Component | React.StatelessComponent

, CollectedProps >(collect: DragLayerCollector, options: DndOptions

= {}) { - checkDecoratorArguments('DragLayer', 'collect[, options]', collect, options) // eslint-disable-line prefer-rest-params + checkDecoratorArguments('DragLayer', 'collect[, options]', collect, options) invariant( typeof collect === 'function', 'Expected "collect" provided as the first argument to DragLayer to be a function that collects props to inject into the component. ', diff --git a/packages/react-dnd/src/DragSource.ts b/packages/react-dnd/src/DragSource.ts index 1bcd2d2d4d..867df84db7 100644 --- a/packages/react-dnd/src/DragSource.ts +++ b/packages/react-dnd/src/DragSource.ts @@ -42,7 +42,7 @@ export default function DragSource< type, spec, collect, - options, // eslint-disable-line prefer-rest-params + options, ) let getType: ((props: P) => SourceType) = type as ((props: P) => SourceType) if (typeof type !== 'function') { diff --git a/packages/react-dnd/src/DropTarget.ts b/packages/react-dnd/src/DropTarget.ts index 915f130825..0d6ecb2188 100644 --- a/packages/react-dnd/src/DropTarget.ts +++ b/packages/react-dnd/src/DropTarget.ts @@ -34,7 +34,7 @@ export default function DropTarget< type, spec, collect, - options, // eslint-disable-line prefer-rest-params + options, ) let getType: ((props: P) => TargetType) = type as ((props: P) => TargetType) if (typeof type !== 'function') { diff --git a/packages/react-dnd/src/createSourceConnector.ts b/packages/react-dnd/src/createSourceConnector.ts index 43288164c4..ba4751d9d3 100644 --- a/packages/react-dnd/src/createSourceConnector.ts +++ b/packages/react-dnd/src/createSourceConnector.ts @@ -1,7 +1,6 @@ import wrapConnectorHooks from './wrapConnectorHooks' import { Backend, Unsubscribe } from 'dnd-core' - -const shallowEqual = require('shallowequal') +import shallowEqual from 'shallowequal' export default function createSourceConnector(backend: Backend) { let currentHandlerId: string diff --git a/packages/react-dnd/src/createTargetConnector.ts b/packages/react-dnd/src/createTargetConnector.ts index 3dc9d4279a..6b0881aa4a 100644 --- a/packages/react-dnd/src/createTargetConnector.ts +++ b/packages/react-dnd/src/createTargetConnector.ts @@ -1,6 +1,6 @@ import wrapConnectorHooks from './wrapConnectorHooks' import { Backend, Unsubscribe } from 'dnd-core' -const shallowEqual = require('shallowequal') +import shallowEqual from 'shallowequal' export default function createTargetConnector(backend: Backend) { let currentHandlerId: string diff --git a/packages/react-dnd/src/decorateHandler.tsx b/packages/react-dnd/src/decorateHandler.tsx index a173c5b6b7..136ab3f253 100644 --- a/packages/react-dnd/src/decorateHandler.tsx +++ b/packages/react-dnd/src/decorateHandler.tsx @@ -6,13 +6,12 @@ import hoistStatics from 'hoist-non-react-statics' import { DragDropManager, Identifier } from 'dnd-core' import { DndComponentClass, DndComponent } from './interfaces' import { Consumer } from './DragDropContext' - -const shallowEqual = require('shallowequal') -const { +import shallowEqual from 'shallowequal' +import { Disposable, CompositeDisposable, SerialDisposable, -} = require('disposables') +} from './utils/disposables' const isClassComponent = (Comp: any) => { return ( diff --git a/packages/react-dnd/src/utils/disposables/CompositeDisposable.ts b/packages/react-dnd/src/utils/disposables/CompositeDisposable.ts new file mode 100644 index 0000000000..d65a937872 --- /dev/null +++ b/packages/react-dnd/src/utils/disposables/CompositeDisposable.ts @@ -0,0 +1,82 @@ +import { Disposable } from './Disposable' + +/** + * Represents a group of disposable resources that are disposed together. + * @constructor + */ +export class CompositeDisposable { + private isDisposed = false + private disposables: Disposable[] + + constructor(...disposables: Disposable[]) { + this.disposables = disposables + } + + /** + * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. + * @param {Any} item Disposable to add. + */ + public add(item: Disposable) { + if (this.isDisposed) { + item.dispose() + } else { + this.disposables.push(item) + } + } + + /** + * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. + * @param {Any} item Disposable to remove. + * @returns {Boolean} true if found; false otherwise. + */ + public remove(item: Disposable) { + let shouldDispose = false + if (!this.isDisposed) { + const idx = this.disposables.indexOf(item) + if (idx !== -1) { + shouldDispose = true + this.disposables.splice(idx, 1) + item.dispose() + } + } + return shouldDispose + } + + /** + * Disposes all disposables in the group and removes them from the group but + * does not dispose the CompositeDisposable. + */ + public clear() { + if (!this.isDisposed) { + const len = this.disposables.length + const currentDisposables = new Array(len) + for (let i = 0; i < len; i++) { + currentDisposables[i] = this.disposables[i] + } + this.disposables = [] + + for (let i = 0; i < len; i++) { + currentDisposables[i].dispose() + } + } + } + + /** + * Disposes all disposables in the group and removes them from the group. + */ + public dispose() { + if (!this.isDisposed) { + this.isDisposed = true + const len = this.disposables.length + const currentDisposables = new Array(len) + for (let i = 0; i < len; i++) { + currentDisposables[i] = this.disposables[i] + } + this.disposables = [] + + for (let i = 0; i < len; i++) { + currentDisposables[i].dispose() + } + } + } +} diff --git a/packages/react-dnd/src/utils/disposables/Disposable.ts b/packages/react-dnd/src/utils/disposables/Disposable.ts new file mode 100644 index 0000000000..898310f467 --- /dev/null +++ b/packages/react-dnd/src/utils/disposables/Disposable.ts @@ -0,0 +1,53 @@ +// tslint:disable max-classes-per-file +import isFunction from 'lodash/isFunction' +import noop from 'lodash/noop' + +/** + * Provides a set of static methods for creating Disposables. + * @param {Function} action Action to run during the first call to dispose. + * The action is guaranteed to be run at most once. + */ +export class Disposable { + /** + * Gets the disposable that does nothing when disposed. + */ + public static empty = { dispose: noop } + + /** + * Validates whether the given object is a disposable + * @param {Object} Object to test whether it has a dispose method + * @returns {Boolean} true if a disposable object, else false. + */ + public static isDisposable(d: any) { + return d && isFunction(d.dispose) + } + + public static _fixup(result: any) { + return Disposable.isDisposable(result) ? result : Disposable.empty + } + + /** + * Creates a disposable object that invokes the specified action when disposed. + * @param {Function} dispose Action to run during the first call to dispose. + * The action is guaranteed to be run at most once. + * @return {Disposable} The disposable object that runs the given action upon disposal. + */ + public static create(action: any) { + return new Disposable(action) + } + + private isDisposed = false + private action: () => void + + constructor(action: any) { + this.action = isFunction(action) ? action : noop + } + + /** Performs the task of cleaning up resources. */ + public dispose() { + if (!this.isDisposed) { + this.action() + this.isDisposed = true + } + } +} diff --git a/packages/react-dnd/src/utils/disposables/SerialDisposable.ts b/packages/react-dnd/src/utils/disposables/SerialDisposable.ts new file mode 100644 index 0000000000..a4a85cb415 --- /dev/null +++ b/packages/react-dnd/src/utils/disposables/SerialDisposable.ts @@ -0,0 +1,46 @@ +import { Disposable } from './Disposable' + +/** + * Represents a disposable resource whose underlying disposable resource can + * be replaced by another disposable resource, causing automatic disposal of + * the previous underlying disposable resource. + */ +export class SerialDisposable { + private isDisposed = false + private current: Disposable | undefined + + /** + * Gets the underlying disposable. + * @returns {Any} the underlying disposable. + */ + public getDisposable() { + return this.current + } + + public setDisposable(value: Disposable) { + const shouldDispose = this.isDisposed + if (!shouldDispose) { + const old = this.current + this.current = value + if (old) { + old.dispose() + } + } + + if (shouldDispose && value) { + value.dispose() + } + } + + /** Performs the task of cleaning up resources. */ + public dispose() { + if (!this.isDisposed) { + this.isDisposed = true + const old = this.current + this.current = undefined + if (old) { + old.dispose() + } + } + } +} diff --git a/packages/react-dnd/src/utils/disposables/index.ts b/packages/react-dnd/src/utils/disposables/index.ts new file mode 100644 index 0000000000..81537cee09 --- /dev/null +++ b/packages/react-dnd/src/utils/disposables/index.ts @@ -0,0 +1,3 @@ +export * from './Disposable' +export * from './SerialDisposable' +export * from './CompositeDisposable' diff --git a/yarn.lock b/yarn.lock index c33f10b294..b46edfe0b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,56 +2,12 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" - dependencies: - "@babel/highlight" "7.0.0-beta.44" - "@babel/code-frame@^7.0.0-beta.35": version "7.0.0-beta.46" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.46.tgz#e0d002100805daab1461c0fcb32a07e304f3a4f4" dependencies: "@babel/highlight" "7.0.0-beta.46" -"@babel/generator@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" - dependencies: - "@babel/types" "7.0.0-beta.44" - jsesc "^2.5.1" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-function-name@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" - dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.44" - "@babel/template" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-get-function-arity@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/helper-split-export-declaration@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" - dependencies: - "@babel/types" "7.0.0-beta.44" - -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - "@babel/highlight@7.0.0-beta.46": version "7.0.0-beta.46" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.46.tgz#c553c51e65f572bdedd6eff66fc0bb563016645e" @@ -60,38 +16,6 @@ esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/template@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - lodash "^4.2.0" - -"@babel/traverse@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/generator" "7.0.0-beta.44" - "@babel/helper-function-name" "7.0.0-beta.44" - "@babel/helper-split-export-declaration" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" - -"@babel/types@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" - dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -103,12 +27,6 @@ version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" -"@types/autobind-decorator@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/autobind-decorator/-/autobind-decorator-2.1.0.tgz#f8ffd384c1080635a1575b30db2220ac40b0d3dc" - dependencies: - autobind-decorator "*" - "@types/faker@^4.1.2": version "4.1.2" resolved "https://registry.yarnpkg.com/@types/faker/-/faker-4.1.2.tgz#f8ab50c9f9af68c160dd71b63f83e24b712d0df5" @@ -127,21 +45,21 @@ version "22.2.3" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-22.2.3.tgz#0157c0316dc3722c43a7b71de3fdf3acbccef10d" -"@types/lodash@^4.14.107": - version "4.14.107" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.107.tgz#b2d2ae3958bfb8ff828495cbe12214af9e4d035e" - -"@types/lodash@^4.14.108": - version "4.14.108" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.108.tgz#02656af3add2e5b3174f830862c47421c00ef817" +"@types/lodash@^4.14.109": + version "4.14.109" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.109.tgz#b1c4442239730bf35cabaf493c772b18c045886d" "@types/node@*": version "10.1.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.1.2.tgz#1b928a0baa408fc8ae3ac012cc81375addc147c6" -"@types/prop-types@^15.5.2": - version "15.5.2" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.2.tgz#3c6b8dceb2906cc87fe4358e809f9d20c8d59be1" +"@types/node@^10.3.0": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.3.0.tgz#078516315a84d56216b5d4fed8f75d59d3b16cac" + +"@types/prop-types@^15.5.3": + version "15.5.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.3.tgz#bef071852dca2a2dbb65fecdb7bfb30cedae2de2" "@types/react-dom@^16.0.5": version "16.0.5" @@ -156,6 +74,16 @@ dependencies: csstype "^2.2.0" +"@types/react@^16.3.16": + version "16.3.16" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.3.16.tgz#78fc44a90b45701f50c8a7008f733680ba51fc86" + dependencies: + csstype "^2.2.0" + +"@types/shallowequal@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@types/shallowequal/-/shallowequal-0.2.2.tgz#71918d93f1e9c242790c31b456969ff9f6028005" + JSONStream@^1.0.4: version "1.3.1" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" @@ -197,21 +125,11 @@ acorn-globals@^4.1.0: dependencies: acorn "^5.0.0" -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@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - acorn@^5.0.0: version "5.1.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" -acorn@^5.3.0, acorn@^5.5.0: +acorn@^5.3.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" @@ -219,10 +137,6 @@ add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" @@ -243,15 +157,6 @@ ajv@^5.1.0: json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - ajv@^6.1.0: version "6.4.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6" @@ -362,13 +267,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e" - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -452,7 +350,7 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.6, asap@~2.0.3: +asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -486,10 +384,6 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" -ast-types-flow@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - ast-types@0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" @@ -538,7 +432,7 @@ atob@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" -autobind-decorator@*, autobind-decorator@^2.1.0: +autobind-decorator@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.1.0.tgz#4451240dbfeff46361c506575a63ed40f0e5bc68" @@ -576,12 +470,6 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" - dependencies: - ast-types-flow "0.0.7" - babel-cli@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" @@ -635,17 +523,6 @@ babel-core@^6.0.0, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@^8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.3.tgz#1a2e6681cc9bc4473c32899e59915e19cd6733cf" - dependencies: - "@babel/code-frame" "7.0.0-beta.44" - "@babel/traverse" "7.0.0-beta.44" - "@babel/types" "7.0.0-beta.44" - babylon "7.0.0-beta.44" - eslint-scope "~3.7.1" - eslint-visitor-keys "^1.0.0" - babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" @@ -675,14 +552,6 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-helper-builder-react-jsx@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" - dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - esutils "^2.0.2" - babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" @@ -785,13 +654,6 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -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.3" - babel-jest@^23.0.0-beta.3r: version "23.0.0-beta.3r" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.0.0-beta.3r.tgz#ffb49a3818c3869764ac26be5c1df25aaf9d5816" @@ -827,7 +689,7 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.1.4, babel-plugin-istanbul@^4.1.5, babel-plugin-istanbul@^4.1.6: +babel-plugin-istanbul@^4.1.4, babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" dependencies: @@ -860,7 +722,7 @@ babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" -babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0: +babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" @@ -880,10 +742,6 @@ babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" - babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" @@ -900,7 +758,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-syntax-async-generators "^6.5.0" babel-runtime "^6.22.0" -babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: +babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: @@ -925,14 +783,6 @@ babel-plugin-transform-class-properties@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-decorators-legacy@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" - dependencies: - babel-plugin-syntax-decorators "^6.1.18" - babel-runtime "^6.2.0" - babel-template "^6.3.0" - babel-plugin-transform-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" @@ -955,7 +805,7 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: +babel-plugin-transform-es2015-block-scoping@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: @@ -965,7 +815,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es20 babel-types "^6.26.0" lodash "^4.17.4" -babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: +babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: @@ -979,33 +829,33 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: +babel-plugin-transform-es2015-computed-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0: +babel-plugin-transform-es2015-destructuring@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: +babel-plugin-transform-es2015-for-of@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: +babel-plugin-transform-es2015-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: @@ -1019,7 +869,7 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: +babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: @@ -1027,7 +877,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: @@ -1045,7 +895,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.26.0: babel-template "^6.26.0" babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: @@ -1053,7 +903,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-e babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: +babel-plugin-transform-es2015-modules-umd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: @@ -1061,14 +911,14 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015 babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: +babel-plugin-transform-es2015-object-super@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: +babel-plugin-transform-es2015-parameters@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: @@ -1079,7 +929,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015- babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: @@ -1092,7 +942,7 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: +babel-plugin-transform-es2015-sticky-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: @@ -1106,13 +956,13 @@ babel-plugin-transform-es2015-template-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: +babel-plugin-transform-es2015-unicode-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: @@ -1120,7 +970,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es20 babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: +babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: @@ -1135,7 +985,7 @@ babel-plugin-transform-export-extensions@^6.22.0: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.8.0: +babel-plugin-transform-flow-strip-types@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" dependencies: @@ -1149,35 +999,7 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" -babel-plugin-transform-react-display-name@^6.23.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: +babel-plugin-transform-regenerator@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: @@ -1198,41 +1020,6 @@ babel-polyfill@^6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-env@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.0.tgz#2de1c782a780a0a5d605d199c957596da43c44e4" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.23.0" - babel-plugin-transform-es2015-classes "^6.23.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" - babel-plugin-transform-es2015-destructuring "^6.23.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" - babel-plugin-transform-es2015-for-of "^6.23.0" - babel-plugin-transform-es2015-function-name "^6.22.0" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.23.0" - babel-plugin-transform-es2015-modules-systemjs "^6.23.0" - babel-plugin-transform-es2015-modules-umd "^6.23.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.23.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.23.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" - invariant "^2.2.2" - semver "^5.3.0" - babel-preset-es2015@^6.9.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" @@ -1262,13 +1049,7 @@ babel-preset-es2015@^6.9.0: babel-plugin-transform-es2015-unicode-regex "^6.24.1" babel-plugin-transform-regenerator "^6.24.1" -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-jest@^22.4.0, babel-preset-jest@^22.4.3: +babel-preset-jest@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156" dependencies: @@ -1282,17 +1063,6 @@ babel-preset-jest@^23.0.0-beta.3r: babel-plugin-jest-hoist "^23.0.0-beta.3r" babel-plugin-syntax-object-rest-spread "^6.13.0" -babel-preset-react@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - babel-preset-stage-1@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" @@ -1332,14 +1102,14 @@ babel-register@^6.24.1, babel-register@^6.26.0, babel-register@^6.9.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -1372,10 +1142,6 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.44: - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" - babylon@^6.17.3, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1591,7 +1357,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^2.1.2, browserslist@^2.5.0: +browserslist@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.5.0.tgz#0ea00d22813a4dfae5786485225a9c584b3ef37c" dependencies: @@ -1688,16 +1454,6 @@ call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1862,10 +1618,6 @@ circular-dependency-plugin@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz#da168c0b37e7b43563fb9f912c1c007c213389ef" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" @@ -2132,7 +1884,7 @@ concat-stream@^1.4.10: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -2159,10 +1911,6 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -2580,10 +2328,6 @@ d@1: dependencies: es5-ext "^0.10.9" -damerau-levenshtein@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" @@ -2715,18 +2459,6 @@ defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" @@ -2791,14 +2523,14 @@ detect-node@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" +diff@^3.1.0, diff@^3.3.1, diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + diff@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" -diff@^3.3.1, diff@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" @@ -2814,10 +2546,6 @@ dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" -disposables@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/disposables/-/disposables-1.0.2.tgz#36c6a674475f55a2d6913567a601444e487b4b6e" - dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -2835,19 +2563,6 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.0.2, doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -2923,10 +2638,6 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-regex@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3060,139 +2771,13 @@ escodegen@^1.9.0: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" - dependencies: - eslint-restricted-globals "^0.1.1" - -eslint-config-airbnb@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-16.1.0.tgz#2546bfb02cc9fe92284bf1723ccf2e87bc45ca46" - dependencies: - eslint-config-airbnb-base "^12.1.0" - -eslint-config-prettier@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" - dependencies: - get-stdin "^5.0.1" - -eslint-import-resolver-node@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" - dependencies: - debug "^2.6.8" - resolve "^1.2.0" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-import@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz#15aeea37a67499d848e8e981806d4627b5503816" - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-jsx-a11y@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz#54583d1ae442483162e040e13cc31865465100e5" - dependencies: - aria-query "^0.7.0" - array-includes "^3.0.3" - ast-types-flow "0.0.7" - axobject-query "^0.1.0" - damerau-levenshtein "^1.0.0" - emoji-regex "^6.1.0" - jsx-ast-utils "^2.0.0" - -eslint-plugin-react@^7.7.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" - dependencies: - doctrine "^2.0.2" - has "^1.0.1" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" - -eslint-restricted-globals@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" - -eslint-scope@^3.7.1, eslint-scope@~3.7.1: +eslint-scope@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -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" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -3205,12 +2790,6 @@ esprima@^4.0.0, esprima@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - esrecurse@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" @@ -3218,7 +2797,7 @@ esrecurse@^4.1.0: estraverse "^4.1.0" object-assign "^4.0.1" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -3517,13 +3096,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - file-loader@^1.1.11: version "1.1.11" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" @@ -3604,15 +3176,6 @@ first-chunk-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" @@ -3761,10 +3324,6 @@ function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -3804,10 +3363,6 @@ get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -3938,25 +3493,10 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^11.0.1, globals@^11.1.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.5.0.tgz#6bc840de6771173b191f13d3a9c94d441ee92642" - globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -4386,7 +3926,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.3, ignore@^3.3.5: +ignore@^3.3.5: version "3.3.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b" @@ -4458,7 +3998,7 @@ ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^3.0.6, inquirer@^3.2.2, inquirer@^3.3.0: +inquirer@^3.2.2, inquirer@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: @@ -4516,7 +4056,7 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.0.0, invariant@^2.1.0: +invariant@^2.1.0, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -4772,12 +4312,6 @@ is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" -is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" - is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -5354,13 +4888,6 @@ js-yaml@^3.4.3, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.9.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" @@ -5451,10 +4978,6 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" -jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -5475,10 +4998,6 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -5520,12 +5039,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.0.0, jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - karma-sourcemap-loader@^0.3.7: version "0.3.7" resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" @@ -5645,7 +5158,7 @@ leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" -levn@^0.3.0, levn@~0.3.0: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: @@ -5833,7 +5346,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.13.1, lodash@^4.2.0: +lodash@^4.13.1: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -5936,6 +5449,10 @@ make-dir@^1.1.0: dependencies: pify "^3.0.0" +make-error@^1.1.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -6648,7 +6165,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -6866,7 +6383,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -6944,22 +6461,12 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" dependencies: find-up "^2.1.0" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -7291,10 +6798,6 @@ process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -7305,17 +6808,17 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.10, prop-types@^15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" +prop-types@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: fbjs "^0.8.16" loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.6.0: - version "15.6.0" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" +prop-types@^15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: fbjs "^0.8.16" loose-envify "^1.3.1" @@ -7714,10 +7217,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -7894,13 +7393,6 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requires-port@1.0.x, requires-port@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -7918,10 +7410,6 @@ resolve-dir@^1.0.0: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -7934,13 +7422,13 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.2.0: +resolve@^1.1.6: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: path-parse "^1.0.5" -resolve@^1.1.7, resolve@^1.3.2, resolve@^1.6.0: +resolve@^1.1.7, resolve@^1.3.2: version "1.7.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" dependencies: @@ -8227,12 +7715,6 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -8333,11 +7815,18 @@ source-map-support@^0.5.0: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@^0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -8701,17 +8190,6 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - tapable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" @@ -8792,7 +8270,7 @@ text-extensions@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -8847,10 +8325,6 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -8907,10 +8381,6 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - ts-jest@^22.4.4: version "22.4.4" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-22.4.4.tgz#7b5c0abb2188fe7170840df9f80e78659aaf8a24" @@ -8935,6 +8405,19 @@ ts-loader@^4.2.0: micromatch "^3.1.4" semver "^5.0.1" +ts-node@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-6.0.5.tgz#977c1c931da7a2b09ae2930101f0104a5c2271e9" + dependencies: + arrify "^1.0.0" + chalk "^2.3.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.3" + yn "^2.0.0" + tslib@^1.8.0, tslib@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" @@ -9601,12 +9084,6 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - ws@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" @@ -9764,3 +9241,7 @@ yeoman-generator@^2.0.4: text-table "^0.2.0" through2 "^2.0.0" yeoman-environment "^2.0.5" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"