diff --git a/.babelrc b/.babelrc deleted file mode 100644 index eea66dbc6..000000000 --- a/.babelrc +++ /dev/null @@ -1,102 +0,0 @@ -{ - "env": { - "commonjs": { - "ignore": [ - "*.jest.js", - "*.e2e.js", - "*.ssr.js", - "*.example.js", - "source/demo", - "source/jest-*.js", - "source/TestUtils.js" - ], - "plugins": [ - "transform-runtime", - ["flow-react-proptypes", { "deadCode": true }], - ["transform-react-remove-prop-types", { "mode": "wrap" }] - ], - "presets": [ - "env", - "react", - "flow", - "stage-1" - ] - }, - "development": { - "plugins": [ - [ - "react-transform", - { - "transforms": [ - { - "transform": "react-transform-hmr", - "imports": [ - "react" - ], - "locals": [ - "module" - ] - }, - { - "transform": "react-transform-catch-errors", - "imports": [ - "react", - "redbox-react" - ] - } - ] - } - ] - ], - "presets": [ - "env", - "react", - "flow", - "stage-1" - ] - }, - "es": { - "ignore": [ - "*.jest.js", - "*.e2e.js", - "*.ssr.js", - "*.example.js", - "source/demo", - "source/jest-*.js", - "source/TestUtils.js" - ], - "plugins": [ - "transform-runtime", - ["flow-react-proptypes", { "deadCode": true, "useESModules": true }], - ["transform-react-remove-prop-types", { "mode": "wrap" }] - ], - "presets": [ - ["env", { "modules": false }], - "react", - "flow", - "stage-1" - ] - }, - "production": { - "comments": false, - "plugins": [ - "transform-runtime" - ], - "presets": [ - ["env", { "modules": false }], - "react", - "flow", - "stage-1" - ] - }, - "test": { - "comments": false, - "presets": [ - "env", - "react", - "flow", - "stage-1" - ] - } - } -} diff --git a/.babelrc.js b/.babelrc.js new file mode 100644 index 000000000..368a8ee87 --- /dev/null +++ b/.babelrc.js @@ -0,0 +1,81 @@ +const env = process.env.NODE_ENV; +const buildIgnore = [ + '*.jest.js', + '*.e2e.js', + '*.ssr.js', + '*.example.js', + 'source/demo', + 'source/jest-*.js', + 'source/TestUtils.js', +]; + +if (env === 'commonjs') { + module.exports = { + ignore: buildIgnore, + plugins: [ + 'transform-runtime', + ['flow-react-proptypes', {deadCode: true}], + ['transform-react-remove-prop-types', {mode: 'wrap'}], + ], + presets: ['env', 'react', 'flow', 'stage-1'], + }; +} + +if (env === 'es') { + module.exports = { + ignore: buildIgnore, + plugins: [ + 'transform-runtime', + ['flow-react-proptypes', {deadCode: true}], + ['transform-react-remove-prop-types', {mode: 'wrap'}], + ], + presets: [['env', {modules: false}], 'react', 'flow', 'stage-1'], + }; +} + +if (env === 'rollup') { + module.exports = { + comments: false, + plugins: ['external-helpers'], + presets: [['env', {modules: false}], 'react', 'flow', 'stage-1'], + }; +} + +if (env === 'test') { + module.exports = { + comments: false, + presets: ['env', 'react', 'flow', 'stage-1'], + }; +} + +if (env === 'development') { + module.exports = { + plugins: [ + [ + 'react-transform', + { + transforms: [ + { + transform: 'react-transform-hmr', + imports: ['react'], + locals: ['module'], + }, + { + transform: 'react-transform-catch-errors', + imports: ['react', 'redbox-react'], + }, + ], + }, + ], + ], + presets: ['env', 'react', 'flow', 'stage-1'], + }; +} + +if (env === 'production') { + module.exports = { + comments: false, + plugins: ['transform-runtime'], + presets: [['env', {modules: false}], 'react', 'flow', 'stage-1'], + }; +} diff --git a/package.json b/package.json index 034f85db4..388a4497f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "build:css": "postcss source/styles.css -o styles.css --use autoprefixer", "build:demo": "npm run clean:demo && cross-env NODE_ENV=production webpack --config webpack.config.demo.js -p --bail", "build:es": "npm run clean:es && npm run build:types && cross-env NODE_ENV=es babel source --out-dir dist/es", - "build:umd": "npm run clean:umd && cross-env NODE_ENV=production rollup -c", + "build:umd": "npm run clean:umd && cross-env NODE_ENV=rollup rollup -c", "check-all": "yarn prettier && yarn lint && yarn flow", "ci-check": "yarn prettier:diff && yarn lint && yarn flow", "clean": "npm run clean:commonjs && npm run clean:demo && npm run clean:es && npm run clean:umd", @@ -67,6 +67,11 @@ "bugs": { "url": "https://github.com/bvaughn/react-virtualized/issues" }, + "babel": { + "presets": [ + "./.babelrc.js" + ] + }, "jest": { "globalSetup": "./source/jest-global-setup.js", "globalTeardown": "./source/jest-global-teardown.js", @@ -97,6 +102,7 @@ "babel-eslint": "^8.1.2", "babel-jest": "^22.0.4", "babel-loader": "7.1.2", + "babel-plugin-external-helpers": "^6.22.0", "babel-plugin-flow-react-proptypes": "^16.0.0", "babel-plugin-react-transform": "^3.0.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.12", @@ -152,6 +158,7 @@ "rollup-plugin-babel": "^3.0.3", "rollup-plugin-commonjs": "^8.3.0", "rollup-plugin-node-resolve": "^3.0.2", + "rollup-plugin-replace": "^2.0.0", "rollup-plugin-uglify": "^3.0.0", "style-loader": "^0.19.1", "watch": "^1.0.2", diff --git a/rollup.config.js b/rollup.config.js index 1ff153c8e..c322f43e6 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,7 @@ import nodeResolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import babel from 'rollup-plugin-babel'; +import replace from 'rollup-plugin-replace'; import uglify from 'rollup-plugin-uglify'; export default { @@ -22,7 +23,9 @@ export default { }), babel({ exclude: 'node_modules/**', - runtimeHelpers: true, + }), + replace({ + 'process.env.NODE_ENV': JSON.stringify('development'), }), uglify({ mangle: false, diff --git a/source/Collection/Collection.js b/source/Collection/Collection.js index ff116b14c..dccb41d0e 100644 --- a/source/Collection/Collection.js +++ b/source/Collection/Collection.js @@ -1,6 +1,6 @@ /** @flow */ import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; +import * as React from 'react'; import CollectionView from './CollectionView'; import calculateSizeAndPositionData from './utils/calculateSizeAndPositionData'; import getUpdatedOffsetForIndex from '../utils/getUpdatedOffsetForIndex'; @@ -10,7 +10,7 @@ import type {ScrollPosition, SizeInfo} from './types'; * Renders scattered or non-linear data. * Unlike Grid, which renders checkerboard data, Collection can render arbitrarily positioned- even overlapping- data. */ -export default class Collection extends PureComponent { +export default class Collection extends React.PureComponent { static propTypes = { 'aria-label': PropTypes.string, diff --git a/source/Collection/CollectionView.js b/source/Collection/CollectionView.js index 237d95743..7661ea834 100644 --- a/source/Collection/CollectionView.js +++ b/source/Collection/CollectionView.js @@ -1,6 +1,6 @@ /** @flow */ import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; +import * as React from 'react'; import cn from 'classnames'; import createCallbackMemoizer from '../utils/createCallbackMemoizer'; import getScrollbarSize from 'dom-helpers/util/scrollbarSize'; @@ -26,7 +26,7 @@ const SCROLL_POSITION_CHANGE_REASONS = { * Monitors changes in properties (eg. cellCount) and state (eg. scroll offsets) to determine when rendering needs to occur. * This component does not render any visible content itself; it defers to the specified :cellLayoutManager. */ -export default class CollectionView extends PureComponent { +export default class CollectionView extends React.PureComponent { static propTypes = { 'aria-label': PropTypes.string, diff --git a/source/Masonry/Masonry.js b/source/Masonry/Masonry.js index 609338ac8..cedf694eb 100644 --- a/source/Masonry/Masonry.js +++ b/source/Masonry/Masonry.js @@ -1,5 +1,5 @@ /** @flow */ -import React, {PureComponent} from 'react'; +import * as React from 'react'; import cn from 'classnames'; import PositionCache from './PositionCache'; import { @@ -65,7 +65,7 @@ export const DEFAULT_SCROLLING_RESET_TIME_INTERVAL = 150; * The left position of all items within a column must align. * (Items may not span multiple columns.) */ -export default class Masonry extends PureComponent { +export default class Masonry extends React.PureComponent { static defaultProps = { autoHeight: false, keyMapper: identity, diff --git a/source/MultiGrid/MultiGrid.js b/source/MultiGrid/MultiGrid.js index ef2d33819..b285af613 100644 --- a/source/MultiGrid/MultiGrid.js +++ b/source/MultiGrid/MultiGrid.js @@ -1,6 +1,6 @@ /** @flow */ import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; +import * as React from 'react'; import CellMeasurerCacheDecorator from './CellMeasurerCacheDecorator'; import Grid from '../Grid'; @@ -13,7 +13,7 @@ const SCROLLBAR_SIZE_BUFFER = 20; * If no sticky columns, only 1 sticky header Grid will be rendered. * If sticky columns, 2 sticky header Grids will be rendered. */ -export default class MultiGrid extends PureComponent { +export default class MultiGrid extends React.PureComponent { static propTypes = { classNameBottomLeftGrid: PropTypes.string.isRequired, classNameBottomRightGrid: PropTypes.string.isRequired, diff --git a/source/Table/SortIndicator.js b/source/Table/SortIndicator.js index 29bb0798f..4331f5687 100644 --- a/source/Table/SortIndicator.js +++ b/source/Table/SortIndicator.js @@ -1,6 +1,6 @@ import cn from 'classnames'; import PropTypes from 'prop-types'; -import React from 'react'; +import * as React from 'react'; import SortDirection from './SortDirection'; /** diff --git a/source/Table/Table.js b/source/Table/Table.js index 2d5e6cac0..4a06e460e 100644 --- a/source/Table/Table.js +++ b/source/Table/Table.js @@ -5,7 +5,7 @@ import type {CellPosition} from '../Grid'; import cn from 'classnames'; import Column from './Column'; import PropTypes from 'prop-types'; -import React, {PureComponent} from 'react'; +import * as React from 'react'; import {findDOMNode} from 'react-dom'; import Grid, {accessibilityOverscanIndicesGetter} from '../Grid'; @@ -17,7 +17,7 @@ import SortDirection from './SortDirection'; * Table component with fixed headers and virtualized rows for improved performance with large data sets. * This component expects explicit width, height, and padding parameters. */ -export default class Table extends PureComponent { +export default class Table extends React.PureComponent { static propTypes = { 'aria-label': PropTypes.string, diff --git a/source/Table/defaultHeaderRenderer.js b/source/Table/defaultHeaderRenderer.js index 655c5b355..2d63a5033 100644 --- a/source/Table/defaultHeaderRenderer.js +++ b/source/Table/defaultHeaderRenderer.js @@ -1,5 +1,5 @@ /** @flow */ -import React from 'react'; +import * as React from 'react'; import SortIndicator from './SortIndicator'; import type {HeaderRendererParams} from './types'; diff --git a/source/Table/defaultHeaderRowRenderer.js b/source/Table/defaultHeaderRowRenderer.js index 8472eb122..a44d82cbc 100644 --- a/source/Table/defaultHeaderRowRenderer.js +++ b/source/Table/defaultHeaderRowRenderer.js @@ -1,5 +1,5 @@ /** @flow */ -import React from 'react'; +import * as React from 'react'; import type {HeaderRowRendererParams} from './types'; export default function defaultHeaderRowRenderer({ diff --git a/source/Table/defaultRowRenderer.js b/source/Table/defaultRowRenderer.js index b04edaaee..ef3b056fe 100644 --- a/source/Table/defaultRowRenderer.js +++ b/source/Table/defaultRowRenderer.js @@ -1,5 +1,5 @@ /** @flow */ -import React from 'react'; +import * as React from 'react'; import type {RowRendererParams} from './types'; /** diff --git a/source/WindowScroller/WindowScroller.e2e.js b/source/WindowScroller/WindowScroller.e2e.js index 725fea9ff..c9e1e01d6 100644 --- a/source/WindowScroller/WindowScroller.e2e.js +++ b/source/WindowScroller/WindowScroller.e2e.js @@ -7,6 +7,7 @@ const bootstrap = async () => { const scripts = [ './node_modules/react/umd/react.development.js', './node_modules/react-dom/umd/react-dom.development.js', + './node_modules/prop-types/prop-types.js', './dist/umd/react-virtualized.js', ]; @@ -14,6 +15,10 @@ const bootstrap = async () => { await page.addScriptTag({path}); } + page.on('console', msg => + msg.args().forEach(arg => console.log(arg.toString())), + ); + return page; }; diff --git a/source/WindowScroller/WindowScroller.js b/source/WindowScroller/WindowScroller.js index fe0563423..e34f78009 100644 --- a/source/WindowScroller/WindowScroller.js +++ b/source/WindowScroller/WindowScroller.js @@ -1,7 +1,7 @@ // @flow import * as React from 'react'; -import ReactDOM from 'react-dom'; +import * as ReactDOM from 'react-dom'; import { registerScrollListener, unregisterScrollListener, diff --git a/yarn.lock b/yarn.lock index fbda8e582..65647a35a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -798,6 +798,12 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-external-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + babel-plugin-flow-react-proptypes@^16.0.0: version "16.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-flow-react-proptypes/-/babel-plugin-flow-react-proptypes-16.0.0.tgz#793d09ab02e9a7b956856ecc6bb0a050d224666a" @@ -6708,6 +6714,14 @@ rollup-plugin-node-resolve@^3.0.2: is-module "^1.0.0" resolve "^1.1.6" +rollup-plugin-replace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.0.0.tgz#19074089c8ed57184b8cc64e967a03d095119277" + dependencies: + magic-string "^0.22.4" + minimatch "^3.0.2" + rollup-pluginutils "^2.0.1" + rollup-plugin-uglify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-3.0.0.tgz#a34eca24617709c6bf1778e9653baafa06099b86"