From cc587b202108d08dcbc70cbaa2ee7917799c4ce0 Mon Sep 17 00:00:00 2001 From: xiazeyu_2011 Date: Sun, 7 Jan 2018 11:11:10 +0800 Subject: [PATCH] feat: config validater --- package-lock.json | 87 ++++++++++++++++++++++++++++------- package.json | 3 ++ src/config/configMgr.js | 6 +-- src/config/configValidater.js | 56 ++++++++++++++++------ src/wpPublicPath.js | 2 +- 5 files changed, 119 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2703382..3200a35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -137,8 +137,7 @@ "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { "version": "0.2.3", @@ -1869,6 +1868,14 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.19" + } + }, "end-of-stream": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", @@ -2915,8 +2922,7 @@ "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ieee754": { "version": "1.1.8", @@ -3121,8 +3127,7 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-typedarray": { "version": "1.0.0", @@ -3158,6 +3163,22 @@ "isarray": "1.0.0" } }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.3" + }, + "dependencies": { + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + } + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -3168,8 +3189,7 @@ "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "jsbn": { "version": "0.1.1", @@ -3486,7 +3506,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, "requires": { "js-tokens": "3.0.2" } @@ -3719,6 +3738,15 @@ "lower-case": "1.1.4" } }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", @@ -3812,8 +3840,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object.omit": { "version": "2.0.1", @@ -4143,7 +4170,6 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, "requires": { "asap": "2.0.6" } @@ -4154,6 +4180,37 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "prop-types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", + "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.17" + } + } + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -4661,8 +4718,7 @@ "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "sha.js": { "version": "2.4.9", @@ -5027,8 +5083,7 @@ "ua-parser-js": { "version": "0.7.17", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", - "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", - "dev": true + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" }, "uglify-js": { "version": "3.3.4", diff --git a/package.json b/package.json index 20be77c..c469c47 100644 --- a/package.json +++ b/package.json @@ -57,5 +57,8 @@ "commitizen": { "path": "./node_modules/cz-conventional-changelog" } + }, + "dependencies": { + "prop-types": "^15.6.0" } } diff --git a/src/config/configMgr.js b/src/config/configMgr.js index adc8a57..2962c5f 100644 --- a/src/config/configMgr.js +++ b/src/config/configMgr.js @@ -20,12 +20,12 @@ let currConfig = {}; * @type {Object} */ -const defaultOptions = { +const defaultConfig = { model: { jsonPath: '', // string hHeadPos: 0.5, // horizontalHeadPos vHeadPos: 0.618, // verticalHeadPos - myDefine: {}, + myDefine: [], }, display: { AA: 2, // antialiasing Grade 抗锯齿等级 @@ -73,7 +73,7 @@ function configApplyer(userConfig){ }); } - currConfig = _.defaultsDeep(userConfig, defaultOptions); + currConfig = _.defaultsDeep(userConfig, defaultConfig); } diff --git a/src/config/configValidater.js b/src/config/configValidater.js index 365db33..732cb4f 100644 --- a/src/config/configValidater.js +++ b/src/config/configValidater.js @@ -8,25 +8,51 @@ 'use strict'; -import _ from 'lodash'; +let PropTypes = require('prop-types'); + +const configPropTypes = { + model: PropTypes.shape({ + jsonPath: PropTypes.string, + hHeadPos: PropTypes.number, + vHeadPos: PropTypes.number, + myDefine: PropTypes.array, + }), + display: PropTypes.shape({ + AA: PropTypes.number, + widght: PropTypes.number, + height: PropTypes.number, + scale: PropTypes.number, + position: PropTypes.oneOf(['left', 'right']), + hOffset: PropTypes.number, // horizontalOffset + vOffset: PropTypes.number, // verticalOffset + }), + mobile: PropTypes.shape({ + show: PropTypes.bool, + scale: PropTypes.number, + motion: PropTypes.bool, + }), + name: PropTypes.shape({ + canvas: PropTypes.string, + div: PropTypes.string, + }), + react: PropTypes.shape({ + opacityDefault: PropTypes.number, + opacityOnHover: PropTypes.number, + myFunc: PropTypes.func, + }), + debug: PropTypes.shape({ + log: PropTypes.bool, + mouseLog: PropTypes.bool, + mouseFunc: PropTypes.func, + }), +} function configValidater(userConfig){ - if (process.env.NODE_ENV === 'development') console.log('config: validating config...'); - - if(_.has(userConfig, 'model')){ - if(_.has(userConfig.model, 'jsonPath')){ - if(!_.isString(userConfig.model.jsonPath)){ - throw 'userConfig.model.jsonPath should be a string.'; - } - } - if(_.has(userConfig.model, 'hHeadPos')){ - - } - } + PropTypes.checkPropTypes(configPropTypes, userConfig, 'config', 'Live2D-widget'); } -export { - configValidater, +module.exports = { + configValidater: configValidater, } diff --git a/src/wpPublicPath.js b/src/wpPublicPath.js index 3020ef1..3cf2256 100644 --- a/src/wpPublicPath.js +++ b/src/wpPublicPath.js @@ -28,7 +28,7 @@ function getCurrentPath(){ // IE 10 +, Safari and Opera 9 // console.log('Stage2'); - // console.log(e); + console.log(e); let stack = e.stack || e.sourceURL || e.stacktrace, rExtractUri = /(file:\/{3}\w:)(\/[^\/]*){3}\//;