[change] allow propTypes to be removed in production builds

Fix #254
This commit is contained in:
Nicolas Gallagher
2016-11-22 13:57:12 -08:00
parent 0b1759363d
commit 8dd39c681c
16 changed files with 72 additions and 36 deletions
+3
View File
@@ -1,5 +1,8 @@
{
"presets": [
"react-native"
],
"plugins": [
[ "transform-react-remove-prop-types", { "mode": "wrap" } ]
]
}
+3 -1
View File
@@ -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",
+2 -2
View File
@@ -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
};
} : {};
+2 -2
View File
@@ -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
};
} : {};
+2 -2
View File
@@ -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' ])
};
} : {};
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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;
+8 -5
View File
@@ -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
+2 -4
View File
@@ -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;
+2 -2
View File
@@ -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;
+2 -4
View File
@@ -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;
+4 -4
View File
@@ -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 () {};
+2 -2
View File
@@ -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;
+2 -2
View File
@@ -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;
+2
View File
@@ -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
+32 -2
View File
@@ -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"