diff --git a/.babelrc b/.babelrc index d6ff3f1b..2e2e0fb3 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,8 @@ { "presets": [ "react-native" + ], + "plugins": [ + [ "transform-react-remove-prop-types", { "mode": "wrap" } ] ] } diff --git a/package.json b/package.json index f5c8cc24..98ed02ce 100644 --- a/package.json +++ b/package.json @@ -19,13 +19,15 @@ }, "dependencies": { "animated": "^0.1.3", + "babel-plugin-transform-react-remove-prop-types": "^0.2.11", "babel-runtime": "^6.11.6", "fbjs": "^0.8.4", "inline-style-prefixer": "^2.0.1", "lodash": "^4.15.0", "react-dom": "~15.3.2", "react-textarea-autosize": "^4.0.4", - "react-timer-mixin": "^0.13.3" + "react-timer-mixin": "^0.13.3", + "webpack-bundle-analyzer": "^1.5.3" }, "devDependencies": { "@kadira/storybook": "^2.5.1", diff --git a/src/components/Image/ImageStylePropTypes.js b/src/components/Image/ImageStylePropTypes.js index f6edac93..ceda8fff 100644 --- a/src/components/Image/ImageStylePropTypes.js +++ b/src/components/Image/ImageStylePropTypes.js @@ -7,7 +7,7 @@ import TransformPropTypes from '../../propTypes/TransformPropTypes'; const hiddenOrVisible = PropTypes.oneOf([ 'hidden', 'visible' ]); -module.exports = { +module.exports = process.env.NODE_ENV !== 'production' ? { ...BorderPropTypes, ...LayoutPropTypes, ...TransformPropTypes, @@ -24,4 +24,4 @@ module.exports = { * @platform web */ visibility: hiddenOrVisible -}; +} : {}; diff --git a/src/components/Text/TextStylePropTypes.js b/src/components/Text/TextStylePropTypes.js index 86d6cfe7..4f3014f6 100644 --- a/src/components/Text/TextStylePropTypes.js +++ b/src/components/Text/TextStylePropTypes.js @@ -1,7 +1,7 @@ import TextPropTypes from '../../propTypes/TextPropTypes'; import ViewStylePropTypes from '../View/ViewStylePropTypes'; -module.exports = { +module.exports = process.env.NODE_ENV !== 'production' ? { ...ViewStylePropTypes, ...TextPropTypes -}; +} : {}; diff --git a/src/components/View/ViewStylePropTypes.js b/src/components/View/ViewStylePropTypes.js index 630c515c..07677223 100644 --- a/src/components/View/ViewStylePropTypes.js +++ b/src/components/View/ViewStylePropTypes.js @@ -8,7 +8,7 @@ const { number, oneOf, string } = PropTypes; const autoOrHiddenOrVisible = oneOf([ 'auto', 'hidden', 'visible' ]); const hiddenOrVisible = oneOf([ 'hidden', 'visible' ]); -module.exports = { +module.exports = process.env.NODE_ENV !== 'production' ? { ...BorderPropTypes, ...LayoutPropTypes, ...TransformPropTypes, @@ -36,4 +36,4 @@ module.exports = { userSelect: string, visibility: hiddenOrVisible, WebkitOverflowScrolling: oneOf([ 'auto', 'touch' ]) -}; +} : {}; diff --git a/src/propTypes/BaseComponentPropTypes.js b/src/propTypes/BaseComponentPropTypes.js index 48e83033..a914d243 100644 --- a/src/propTypes/BaseComponentPropTypes.js +++ b/src/propTypes/BaseComponentPropTypes.js @@ -1,13 +1,13 @@ import { PropTypes } from 'react'; const { array, bool, number, object, oneOf, oneOfType, string } = PropTypes; -const BaseComponentPropTypes = { +const BaseComponentPropTypes = process.env.NODE_ENV !== 'production' ? { accessibilityLabel: string, accessibilityLiveRegion: oneOf([ 'assertive', 'off', 'polite' ]), accessibilityRole: string, accessible: bool, style: oneOfType([ array, number, object ]), testID: string -}; +} : {}; module.exports = BaseComponentPropTypes; diff --git a/src/propTypes/BorderPropTypes.js b/src/propTypes/BorderPropTypes.js index a63d87bc..3eb9443c 100644 --- a/src/propTypes/BorderPropTypes.js +++ b/src/propTypes/BorderPropTypes.js @@ -4,7 +4,7 @@ import { PropTypes } from 'react'; const numberOrString = PropTypes.oneOfType([ PropTypes.number, PropTypes.string ]); const BorderStylePropType = PropTypes.oneOf([ 'solid', 'dotted', 'dashed' ]); -const BorderPropTypes = { +const BorderPropTypes = process.env.NODE_ENV !== 'production' ? { borderColor: ColorPropType, borderTopColor: ColorPropType, borderRightColor: ColorPropType, @@ -29,6 +29,6 @@ const BorderPropTypes = { borderBottomRightRadius$noI18n: numberOrString, borderLeftStyle$noI18n: BorderStylePropType, borderRightStyle$noI18n: BorderStylePropType -}; +} : {}; module.exports = BorderPropTypes; diff --git a/src/propTypes/ColorPropType.js b/src/propTypes/ColorPropType.js index 83effacc..8673147d 100644 --- a/src/propTypes/ColorPropType.js +++ b/src/propTypes/ColorPropType.js @@ -11,11 +11,10 @@ */ import { PropTypes } from 'react' -import ReactPropTypeLocationNames from 'react/lib/ReactPropTypeLocationNames' - -var normalizeColor = require('../modules/normalizeColor'); var colorPropType = function(isRequired, props, propName, componentName, location, propFullName) { + var normalizeColor = require('../modules/normalizeColor'); + var ReactPropTypeLocationNames = require('react/lib/ReactPropTypeLocationNames'); var color = props[propName]; if (color === undefined || color === null) { if (isRequired) { @@ -56,7 +55,11 @@ var colorPropType = function(isRequired, props, propName, componentName, locatio } }; -var ColorPropType = colorPropType.bind(null, false /* isRequired */); -ColorPropType.isRequired = colorPropType.bind(null, true /* isRequired */); +if (process.env.NODE_ENV !== 'production') { + var ColorPropType = colorPropType.bind(null, false /* isRequired */); + ColorPropType.isRequired = colorPropType.bind(null, true /* isRequired */); +} else { + var ColorPropType = function () {} +} module.exports = ColorPropType diff --git a/src/propTypes/EdgeInsetsPropType.js b/src/propTypes/EdgeInsetsPropType.js index cf2d0fcb..24c16c39 100644 --- a/src/propTypes/EdgeInsetsPropType.js +++ b/src/propTypes/EdgeInsetsPropType.js @@ -14,13 +14,11 @@ var PropTypes = require('react').PropTypes; -var createStrictShapeTypeChecker = require('./createStrictShapeTypeChecker'); - -var EdgeInsetsPropType = createStrictShapeTypeChecker({ +var EdgeInsetsPropType = process.env.NODE_ENV !== 'production' ? require('./createStrictShapeTypeChecker')({ top: PropTypes.number, left: PropTypes.number, bottom: PropTypes.number, right: PropTypes.number, -}); +}) : function () {}; module.exports = EdgeInsetsPropType; diff --git a/src/propTypes/LayoutPropTypes.js b/src/propTypes/LayoutPropTypes.js index 5739f21d..9007003a 100644 --- a/src/propTypes/LayoutPropTypes.js +++ b/src/propTypes/LayoutPropTypes.js @@ -3,7 +3,7 @@ import { PropTypes } from 'react'; const { number, oneOf, oneOfType, string } = PropTypes; const numberOrString = oneOfType([ number, string ]); -const LayoutPropTypes = { +const LayoutPropTypes = process.env.NODE_ENV !== 'production' ? { // box model borderWidth: numberOrString, borderBottomWidth: numberOrString, @@ -58,6 +58,6 @@ const LayoutPropTypes = { paddingLeft$noI18n: numberOrString, paddingRight$noI18n: numberOrString, right$noI18n: numberOrString -}; +} : {}; module.exports = LayoutPropTypes; diff --git a/src/propTypes/PointPropType.js b/src/propTypes/PointPropType.js index 553227d6..171d2a1c 100644 --- a/src/propTypes/PointPropType.js +++ b/src/propTypes/PointPropType.js @@ -14,11 +14,9 @@ var PropTypes = require('react').PropTypes; -var createStrictShapeTypeChecker = require('./createStrictShapeTypeChecker'); - -var PointPropType = createStrictShapeTypeChecker({ +var PointPropType = process.env.NODE_ENV !== 'production' ? require('./createStrictShapeTypeChecker')({ x: PropTypes.number, y: PropTypes.number, -}); +}) : function () {}; module.exports = PointPropType; diff --git a/src/propTypes/StyleSheetPropType.js b/src/propTypes/StyleSheetPropType.js index f1e76f04..bd43c383 100644 --- a/src/propTypes/StyleSheetPropType.js +++ b/src/propTypes/StyleSheetPropType.js @@ -5,10 +5,10 @@ * @flow */ -import createStrictShapeTypeChecker from './createStrictShapeTypeChecker'; -import flattenStyle from '../modules/flattenStyle'; +module.exports = process.env.NODE_ENV !== 'production' ? function StyleSheetPropType(shape) { + const createStrictShapeTypeChecker = require('./createStrictShapeTypeChecker'); + const flattenStyle = require('../modules/flattenStyle'); -module.exports = function StyleSheetPropType(shape) { const shapePropType = createStrictShapeTypeChecker(shape); return function (props, propName, componentName, location?) { let newProps = props; @@ -19,4 +19,4 @@ module.exports = function StyleSheetPropType(shape) { } return shapePropType(newProps, propName, componentName, location); }; -}; +} : function () {}; diff --git a/src/propTypes/TextPropTypes.js b/src/propTypes/TextPropTypes.js index 9f52eb7c..1b9942dd 100644 --- a/src/propTypes/TextPropTypes.js +++ b/src/propTypes/TextPropTypes.js @@ -8,7 +8,7 @@ const ShadowOffsetPropType = shape({ width: number, height: number }); const TextAlignPropType = oneOf([ 'center', 'inherit', 'justify', 'justify-all', 'left', 'right' ]); const WritingDirectionPropType = oneOf([ 'auto', 'ltr', 'rtl' ]); -const TextPropTypes = { +const TextPropTypes = process.env.NODE_ENV !== 'production' ? { // box model color: ColorPropType, fontFamily: string, @@ -40,6 +40,6 @@ const TextPropTypes = { textAlign$noI18n: TextAlignPropType, textShadowOffset$noI18n: ShadowOffsetPropType, writingDirection$noI18n: WritingDirectionPropType -}; +} : {}; module.exports = TextPropTypes; diff --git a/src/propTypes/TransformPropTypes.js b/src/propTypes/TransformPropTypes.js index 28870da1..0471ea8e 100644 --- a/src/propTypes/TransformPropTypes.js +++ b/src/propTypes/TransformPropTypes.js @@ -10,7 +10,7 @@ import { PropTypes } from 'react'; const { arrayOf, number, oneOfType, shape, string } = PropTypes; const numberOrString = oneOfType([ number, string ]); -const TransformPropTypes = { +const TransformPropTypes = process.env.NODE_ENV !== 'production' ? { transform: arrayOf( oneOfType([ shape({ perspective: numberOrString }), @@ -29,6 +29,6 @@ const TransformPropTypes = { shape({ translate3d: string }) ]) ) -}; +} : {}; module.exports = TransformPropTypes; diff --git a/webpack.config.js b/webpack.config.js index af708713..363b1130 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ const path = require('path') const webpack = require('webpack') +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; const DIST_DIRECTORY = './dist' @@ -14,6 +15,7 @@ module.exports = { path: DIST_DIRECTORY }, plugins: [ + new BundleAnalyzerPlugin({ analyzerMode: 'static' }), new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }), new webpack.optimize.DedupePlugin(), // https://github.com/animatedjs/animated/issues/40 diff --git a/yarn.lock b/yarn.lock index 57e47e0a..db68e23b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -131,7 +131,7 @@ acorn@^3.0.0, acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.1: +acorn@^4.0.1, acorn@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1" @@ -900,6 +900,10 @@ babel-plugin-transform-react-jsx@^6.3.13, babel-plugin-transform-react-jsx@^6.5. babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.0.0" +babel-plugin-transform-react-remove-prop-types: + version "0.2.11" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.2.11.tgz#05eb7cc4670d6506d801680576589c7abcd51b00" + babel-plugin-transform-regenerator@^6.16.0, babel-plugin-transform-regenerator@^6.5.0, babel-plugin-transform-regenerator@^6.6.0, babel-plugin-transform-regenerator@6.16.1: version "6.16.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59" @@ -1915,6 +1919,10 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" +ejs@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.2.tgz#21444ba09386f0c65b6eafb96a3d51bcb3be80d1" + element-class@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/element-class/-/element-class-0.2.2.tgz#9d3bbd0767f9013ef8e1c8ebe722c1402a60050e" @@ -2218,7 +2226,7 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.13.3: +express@^4.13.3, express@^4.14.0: version "4.14.0" resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" dependencies: @@ -2319,6 +2327,10 @@ fileset@0.2.x: glob "5.x" minimatch "2.x" +filesize@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.3.0.tgz#53149ea3460e3b2e024962a51648aa572cf98122" + fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -4118,6 +4130,10 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +opener@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.2.tgz#b32582080042af8680c389a499175b4c54fff523" + optimist@^0.6.1, optimist@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -5650,6 +5666,20 @@ webidl-conversions@^3.0.0, webidl-conversions@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" +webpack-bundle-analyzer: + version "1.5.3" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-1.5.3.tgz#d1109bdd0a0067bba88ea6aa642533b4de926965" + dependencies: + acorn "^4.0.3" + chalk "^1.1.3" + commander "^2.9.0" + ejs "^2.5.2" + express "^4.14.0" + filesize "^3.3.0" + lodash "^4.16.4" + mkdirp "^0.5.1" + opener "^1.4.2" + webpack-core@~0.6.0: version "0.6.8" resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.8.tgz#edf9135de00a6a3c26dd0f14b208af0aa4af8d0a"