From f82d9667e67b6b37dc1ba52b853ec3f618df4da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=83=E5=BD=A6?= Date: Thu, 24 Oct 2019 21:19:31 +0800 Subject: [PATCH 1/2] feat: support props check --- packages/rax/package.json | 12 +++++------- packages/rax/src/vdom/__tests__/context.js | 2 +- packages/rax/src/vdom/__tests__/reactive.js | 2 +- packages/rax/src/vdom/element.js | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/packages/rax/package.json b/packages/rax/package.json index 3b4dae77d7..f769416727 100644 --- a/packages/rax/package.json +++ b/packages/rax/package.json @@ -17,14 +17,12 @@ }, "types": "./index.d.ts", "dependencies": { - "driver-server": "^1.0.0", "@babel/runtime": "^7.2.0", - "rax-is-valid-element": "^1.0.0", - "rax-clone-element": "^1.0.0", + "driver-server": "^1.0.0", "rax-children": "^1.0.0", - "rax-create-factory": "^1.0.0" - }, - "devDependencies": { - "rax-proptypes": "^1.0.0" + "rax-clone-element": "^1.0.0", + "rax-create-factory": "^1.0.0", + "rax-is-valid-element": "^1.0.0", + "prop-types": "^15.7.2" } } diff --git a/packages/rax/src/vdom/__tests__/context.js b/packages/rax/src/vdom/__tests__/context.js index 91fbc4f8c7..b771294868 100644 --- a/packages/rax/src/vdom/__tests__/context.js +++ b/packages/rax/src/vdom/__tests__/context.js @@ -1,7 +1,7 @@ 'use strict'; import Component from '../component'; -import PropTypes from 'rax-proptypes'; +import PropTypes from 'prop-types'; import createElement from '../../createElement'; import Host from '../host'; import render from '../../render'; diff --git a/packages/rax/src/vdom/__tests__/reactive.js b/packages/rax/src/vdom/__tests__/reactive.js index ef35cfd9d3..d991c1487a 100644 --- a/packages/rax/src/vdom/__tests__/reactive.js +++ b/packages/rax/src/vdom/__tests__/reactive.js @@ -2,7 +2,7 @@ /* @jsx createElement */ import Component from '../component'; -import PropTypes from 'rax-proptypes'; +import PropTypes from 'prop-types'; import createElement from '../../createElement'; import Host from '../host'; import ServerDriver from 'driver-server'; diff --git a/packages/rax/src/vdom/element.js b/packages/rax/src/vdom/element.js index d2b36083f3..b1016ac1e9 100644 --- a/packages/rax/src/vdom/element.js +++ b/packages/rax/src/vdom/element.js @@ -1,3 +1,5 @@ +import checkPropTypes from 'prop-types/checkPropTypes'; + export default function Element(type, key, ref, props, owner) { let element = { // Built-in properties that belong on the element @@ -10,6 +12,19 @@ export default function Element(type, key, ref, props, owner) { }; if (process.env.NODE_ENV !== 'production') { + const propTypes = type.propTypes; + + // Validate its props provided by the propTypes definition + if (propTypes) { + const displayName = type.displayName || type.name; + checkPropTypes( + propTypes, + props, + 'prop', + displayName, + ); + } + // We make validation flag non-enumerable, so the test framework could ignore it Object.defineProperty(element, '__validated', { configurable: false, From 3006aaeec76ee273101d3e7fed52c317fafaff68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=83=E5=BD=A6?= Date: Fri, 25 Oct 2019 17:57:28 +0800 Subject: [PATCH 2/2] chore: from rax-proptypes to prop-types --- packages/rax-create-class/package.json | 2 +- packages/rax-create-class/src/__tests__/createClass.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rax-create-class/package.json b/packages/rax-create-class/package.json index 06c7004a94..0498cae72c 100644 --- a/packages/rax-create-class/package.json +++ b/packages/rax-create-class/package.json @@ -21,6 +21,6 @@ "devDependencies": { "rax": "^1.0.0", "driver-server": "^1.0.0", - "rax-proptypes": "^1.0.0" + "prop-types": "^15.7.2" } } diff --git a/packages/rax-create-class/src/__tests__/createClass.js b/packages/rax-create-class/src/__tests__/createClass.js index 6aee6c508b..d0f4a41f5e 100644 --- a/packages/rax-create-class/src/__tests__/createClass.js +++ b/packages/rax-create-class/src/__tests__/createClass.js @@ -2,7 +2,7 @@ /* eslint react/prefer-es6-class: "off" */ import { createElement, render, shared } from 'rax'; -import PropTypes from 'rax-proptypes'; +import PropTypes from 'prop-types'; import ServerDriver from 'driver-server'; import createClass from '../';