From 76d75705d74d37048b80725e9da39f54f22a40a4 Mon Sep 17 00:00:00 2001 From: Joon Ho Cho Date: Tue, 14 Jun 2016 14:12:52 -0700 Subject: [PATCH] add examples/ that strip propTypes for production with babel plugin --- examples/.babelrc | 4 +++ examples/package.json | 40 +++++++++++++++++++++++++ examples/src/index.js | 65 ++++++++++++++++++++++++++++++++++++++++ examples/test/index.js | 30 +++++++++++++++++++ examples/test/mocha.opts | 4 +++ examples/test/setup.js | 2 ++ src/index.js | 6 +++- 7 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 examples/.babelrc create mode 100644 examples/package.json create mode 100644 examples/src/index.js create mode 100644 examples/test/index.js create mode 100644 examples/test/mocha.opts create mode 100644 examples/test/setup.js diff --git a/examples/.babelrc b/examples/.babelrc new file mode 100644 index 0000000..ecc3e48 --- /dev/null +++ b/examples/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015", "stage-0", "react"], + "plugins": ["transform-react-remove-prop-types"] +} diff --git a/examples/package.json b/examples/package.json new file mode 100644 index 0000000..f6bdc20 --- /dev/null +++ b/examples/package.json @@ -0,0 +1,40 @@ +{ + "name": "examples", + "version": "0.0.0", + "description": "", + "main": "lib/index.js", + "scripts": { + "build": "babel src --out-dir lib", + "build-watch": "babel src --watch --out-dir lib", + "clear": "rm -rf ./lib", + "pretest": "npm run build", + "start": "npm test", + "test": "mocha", + "test-watch": "mocha --watch", + "watch": "npm run build-watch & npm run test-watch" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/joonhocho/proptypes-parser.git" + }, + "author": "Joon Ho Cho", + "license": "MIT", + "bugs": { + "url": "https://github.com/joonhocho/proptypes-parser/issues" + }, + "homepage": "https://github.com/joonhocho/proptypes-parser#readme", + "dependencies": { + "react": "^15.1.0" + }, + "devDependencies": { + "babel-cli": "^6.10.1", + "babel-plugin-transform-react-remove-prop-types": "^0.2.7", + "babel-preset-es2015": "^6.9.0", + "babel-preset-react": "^6.5.0", + "babel-preset-stage-0": "^6.5.0", + "babel-register": "^6.9.0", + "chai": "^3.5.0", + "mocha": "^2.5.3", + "proptypes-parser": "^0.1.0" + } +} diff --git a/examples/src/index.js b/examples/src/index.js new file mode 100644 index 0000000..b533fbc --- /dev/null +++ b/examples/src/index.js @@ -0,0 +1,65 @@ +import React, {Component} from 'react'; +import {PT} from '../../lib'; + +class ES6 extends Component { + static propTypes = PT`{ + value: Number! + }`; + render() { + return (
); + } +} + + +const ES5 = React.createClass({ + propTypes: PT`{ + value: Number! + }`, + render: function() { + return (
); + }, +}); + + +class ES6Assign extends Component { + render() { + return (
); + } +} +ES6Assign.propTypes = PT`{ + value: Number! +}`; + + +const ES5Assign = React.createClass({ + render: function() { + return (
); + } +}); +ES5Assign.propTypes = PT`{ + value: Number! +}`; + + +function FuncAssign() { + return (
); +} +FuncAssign.propTypes = PT`{ + value: Number! +}`; + + +class ES6VarAssign extends Component { + render() { + return (
); + } +} +const fPropTypes = PT`{ + value: Number! +}`; +ES6VarAssign.propTypes = fPropTypes; + + +export { + ES6, ES5, ES6Assign, ES5Assign, FuncAssign, ES6VarAssign, +}; diff --git a/examples/test/index.js b/examples/test/index.js new file mode 100644 index 0000000..a455a9c --- /dev/null +++ b/examples/test/index.js @@ -0,0 +1,30 @@ +import {describe, it} from 'mocha'; +import {expect} from 'chai'; +import {ES6, ES5, ES6Assign, ES5Assign, FuncAssign, ES6VarAssign} from '../lib'; + + +describe('PT', () => { + it('babel plugin should remove ES6.propTypes', () => { + expect(ES6.propTypes).to.be.undefined; + }); + + it('babel plugin should remove ES5.propTypes', () => { + expect(ES5.propTypes).to.be.undefined; + }); + + it('babel plugin should remove ES6Assign.propTypes', () => { + expect(ES6Assign.propTypes).to.be.undefined; + }); + + it('babel plugin should remove ES5Assign.propTypes', () => { + expect(ES5Assign.propTypes).to.be.undefined; + }); + + it('babel plugin should remove FuncAssign.propTypes', () => { + expect(FuncAssign.propTypes).to.be.undefined; + }); + + it('babel plugin should remove ES6VarAssign.propTypes', () => { + expect(ES6VarAssign.propTypes).to.be.undefined; + }); +}); diff --git a/examples/test/mocha.opts b/examples/test/mocha.opts new file mode 100644 index 0000000..057915a --- /dev/null +++ b/examples/test/mocha.opts @@ -0,0 +1,4 @@ +--compilers js:babel-register +--require ./test/setup.js +--reporter spec +--timeout 5000 diff --git a/examples/test/setup.js b/examples/test/setup.js new file mode 100644 index 0000000..ca8f1dc --- /dev/null +++ b/examples/test/setup.js @@ -0,0 +1,2 @@ +var chai = require('chai'); +chai.use(require('chai-as-promised')); diff --git a/src/index.js b/src/index.js index 7c84f31..404fdbd 100644 --- a/src/index.js +++ b/src/index.js @@ -4,7 +4,11 @@ import {PropTypes} from 'react'; let createParser; if (process && process.env && process.env.NODE_ENV === 'production') { // No-op if production - createParser = () => () => ({}); + createParser = () => { + const fn = () => ({}); + fn.PT = fn; + return fn; + }; } else { createParser = require('./parser.js').default; }