Build embedded Parity JS properly and separatly (#4426)
* Add a specific embed webpack build // output assets in JSON * WIP Embed * Updated Webpack * Update exports // Webpack config * Fix app build fail * Fix NPm scripts * Reduce Embed dependencies * Fix NPM exports * remvoe stats * Lazy-Load worker (not to load in embed) * PR Grumbles + Fix tests
This commit is contained in:
		
							parent
							
								
									656c08976f
								
							
						
					
					
						commit
						e8175f4cca
					
				| @ -4,11 +4,11 @@ | |||||||
|     "stage-0", "react" |     "stage-0", "react" | ||||||
|   ], |   ], | ||||||
|   "plugins": [ |   "plugins": [ | ||||||
|     "transform-runtime", |  | ||||||
|     "transform-decorators-legacy", |     "transform-decorators-legacy", | ||||||
|     "transform-class-properties", |     "transform-class-properties", | ||||||
|     "transform-object-rest-spread", |     "transform-object-rest-spread", | ||||||
|     "lodash" |     "lodash", | ||||||
|  |     "recharts" | ||||||
|   ], |   ], | ||||||
|   "retainLines": true, |   "retainLines": true, | ||||||
|   "env": { |   "env": { | ||||||
| @ -25,7 +25,8 @@ | |||||||
|     }, |     }, | ||||||
|     "test": { |     "test": { | ||||||
|       "plugins": [ |       "plugins": [ | ||||||
|         ["babel-plugin-webpack-alias", { "config": "webpack/test.js" }] |         "transform-runtime", | ||||||
|  |         [ "babel-plugin-webpack-alias", { "config": "webpack/test.js" } ] | ||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -25,18 +25,20 @@ | |||||||
|     "Promise" |     "Promise" | ||||||
|   ], |   ], | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "build": "npm run build:lib && npm run build:dll && npm run build:app", |     "build": "npm run build:lib && npm run build:dll && npm run build:app && npm run build:embed", | ||||||
|     "build:app": "webpack --config webpack/app", |     "build:app": "webpack --config webpack/app", | ||||||
|     "build:lib": "webpack --config webpack/libraries", |     "build:lib": "webpack --config webpack/libraries", | ||||||
|     "build:dll": "webpack --config webpack/vendor", |     "build:dll": "webpack --config webpack/vendor", | ||||||
|     "build:markdown": "babel-node ./scripts/build-rpc-markdown.js", |     "build:markdown": "babel-node ./scripts/build-rpc-markdown.js", | ||||||
|     "build:json": "babel-node ./scripts/build-rpc-json.js", |     "build:json": "babel-node ./scripts/build-rpc-json.js", | ||||||
|     "ci:build": "npm run ci:build:lib && npm run ci:build:dll && npm run ci:build:app", |     "build:embed": "EMBED=1 node webpack/embed", | ||||||
|  |     "ci:build": "npm run ci:build:lib && npm run ci:build:dll && npm run ci:build:app && npm run ci:build:embed", | ||||||
|     "ci:build:app": "NODE_ENV=production webpack --config webpack/app", |     "ci:build:app": "NODE_ENV=production webpack --config webpack/app", | ||||||
|     "ci:build:lib": "NODE_ENV=production webpack --config webpack/libraries", |     "ci:build:lib": "NODE_ENV=production webpack --config webpack/libraries", | ||||||
|     "ci:build:dll": "NODE_ENV=production webpack --config webpack/vendor", |     "ci:build:dll": "NODE_ENV=production webpack --config webpack/vendor", | ||||||
|     "ci:build:npm": "NODE_ENV=production webpack --config webpack/npm", |     "ci:build:npm": "NODE_ENV=production webpack --config webpack/npm", | ||||||
|     "ci:build:jsonrpc": "babel-node ./scripts/build-rpc-json.js --output .npmjs/jsonrpc", |     "ci:build:jsonrpc": "babel-node ./scripts/build-rpc-json.js --output .npmjs/jsonrpc", | ||||||
|  |     "ci:build:embed": "NODE_ENV=production EMBED=1 node webpack/embed", | ||||||
|     "start": "npm install && npm run build:lib && npm run build:dll && npm run start:app", |     "start": "npm install && npm run build:lib && npm run build:dll && npm run start:app", | ||||||
|     "start:app": "node webpack/dev.server", |     "start:app": "node webpack/dev.server", | ||||||
|     "clean": "rm -rf ./.build ./.coverage ./.happypack ./.npmjs ./build", |     "clean": "rm -rf ./.build ./.coverage ./.happypack ./.npmjs ./build", | ||||||
| @ -53,27 +55,28 @@ | |||||||
|     "prepush": "npm run lint:cached" |     "prepush": "npm run lint:cached" | ||||||
|   }, |   }, | ||||||
|   "devDependencies": { |   "devDependencies": { | ||||||
|     "babel-cli": "6.18.0", |     "babel-cli": "6.22.2", | ||||||
|     "babel-core": "6.21.0", |     "babel-core": "6.22.1", | ||||||
|     "babel-eslint": "7.1.1", |     "babel-eslint": "7.1.1", | ||||||
|     "babel-loader": "6.2.10", |     "babel-loader": "6.2.10", | ||||||
|     "babel-plugin-lodash": "3.2.11", |     "babel-plugin-lodash": "3.2.11", | ||||||
|     "babel-plugin-react-intl": "2.2.0", |     "babel-plugin-react-intl": "2.3.1", | ||||||
|     "babel-plugin-transform-class-properties": "6.19.0", |     "babel-plugin-recharts": "1.1.0", | ||||||
|  |     "babel-plugin-transform-class-properties": "6.22.0", | ||||||
|     "babel-plugin-transform-decorators-legacy": "1.3.4", |     "babel-plugin-transform-decorators-legacy": "1.3.4", | ||||||
|     "babel-plugin-transform-object-rest-spread": "6.20.2", |     "babel-plugin-transform-object-rest-spread": "6.22.0", | ||||||
|     "babel-plugin-transform-react-remove-prop-types": "0.2.11", |     "babel-plugin-transform-react-remove-prop-types": "0.3.0", | ||||||
|     "babel-plugin-transform-runtime": "6.15.0", |     "babel-plugin-transform-runtime": "6.22.0", | ||||||
|     "babel-plugin-webpack-alias": "2.1.2", |     "babel-plugin-webpack-alias": "2.1.2", | ||||||
|     "babel-polyfill": "6.20.0", |     "babel-polyfill": "6.22.0", | ||||||
|     "babel-preset-env": "1.1.4", |     "babel-preset-env": "1.1.8", | ||||||
|     "babel-preset-es2015": "6.18.0", |     "babel-preset-es2015": "6.22.0", | ||||||
|     "babel-preset-es2016": "6.16.0", |     "babel-preset-es2016": "6.22.0", | ||||||
|     "babel-preset-es2017": "6.16.0", |     "babel-preset-es2017": "6.22.0", | ||||||
|     "babel-preset-react": "6.16.0", |     "babel-preset-react": "6.22.0", | ||||||
|     "babel-preset-stage-0": "6.16.0", |     "babel-preset-stage-0": "6.22.0", | ||||||
|     "babel-register": "6.18.0", |     "babel-register": "6.22.0", | ||||||
|     "babel-runtime": "6.20.0", |     "babel-runtime": "6.22.0", | ||||||
|     "chai": "3.5.0", |     "chai": "3.5.0", | ||||||
|     "chai-as-promised": "6.0.0", |     "chai-as-promised": "6.0.0", | ||||||
|     "chai-enzyme": "0.6.1", |     "chai-enzyme": "0.6.1", | ||||||
| @ -132,7 +135,7 @@ | |||||||
|     "stylelint": "7.7.0", |     "stylelint": "7.7.0", | ||||||
|     "stylelint-config-standard": "15.0.1", |     "stylelint-config-standard": "15.0.1", | ||||||
|     "url-loader": "0.5.7", |     "url-loader": "0.5.7", | ||||||
|     "webpack": "2.2.0-rc.2", |     "webpack": "2.2.1", | ||||||
|     "webpack-dev-middleware": "1.9.0", |     "webpack-dev-middleware": "1.9.0", | ||||||
|     "webpack-error-notification": "0.1.6", |     "webpack-error-notification": "0.1.6", | ||||||
|     "webpack-hot-middleware": "2.14.0", |     "webpack-hot-middleware": "2.14.0", | ||||||
|  | |||||||
| @ -31,4 +31,4 @@ if (isNode) { | |||||||
| 
 | 
 | ||||||
| import Etherscan from './3rdparty/etherscan'; | import Etherscan from './3rdparty/etherscan'; | ||||||
| 
 | 
 | ||||||
| module.exports = Etherscan; | export default Etherscan; | ||||||
|  | |||||||
| @ -16,4 +16,4 @@ | |||||||
| 
 | 
 | ||||||
| import JsonRpc from './jsonrpc'; | import JsonRpc from './jsonrpc'; | ||||||
| 
 | 
 | ||||||
| module.exports = JsonRpc; | export default JsonRpc; | ||||||
|  | |||||||
| @ -32,4 +32,4 @@ if (isNode) { | |||||||
| import Abi from './abi'; | import Abi from './abi'; | ||||||
| import Api from './api'; | import Api from './api'; | ||||||
| 
 | 
 | ||||||
| module.exports = { Api, Abi }; | export { Api, Abi }; | ||||||
|  | |||||||
| @ -31,4 +31,4 @@ if (isNode) { | |||||||
| 
 | 
 | ||||||
| import ShapeShift from './3rdparty/shapeshift'; | import ShapeShift from './3rdparty/shapeshift'; | ||||||
| 
 | 
 | ||||||
| module.exports = ShapeShift; | export default ShapeShift; | ||||||
|  | |||||||
| @ -20,7 +20,8 @@ import { FormattedMessage } from 'react-intl'; | |||||||
| import { IconButton } from 'material-ui'; | import { IconButton } from 'material-ui'; | ||||||
| import { RadioButton, RadioButtonGroup } from 'material-ui/RadioButton'; | import { RadioButton, RadioButtonGroup } from 'material-ui/RadioButton'; | ||||||
| 
 | 
 | ||||||
| import { Form, Input, IdentityIcon, PasswordStrength } from '~/ui'; | import { Form, Input, IdentityIcon } from '~/ui'; | ||||||
|  | import PasswordStrength from '~/ui/Form/PasswordStrength'; | ||||||
| import { RefreshIcon } from '~/ui/Icons'; | import { RefreshIcon } from '~/ui/Icons'; | ||||||
| 
 | 
 | ||||||
| import styles from '../createAccount.css'; | import styles from '../createAccount.css'; | ||||||
|  | |||||||
| @ -18,7 +18,8 @@ import { observer } from 'mobx-react'; | |||||||
| import React, { Component, PropTypes } from 'react'; | import React, { Component, PropTypes } from 'react'; | ||||||
| import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||||
| 
 | 
 | ||||||
| import { Form, Input, PasswordStrength } from '~/ui'; | import { Form, Input } from '~/ui'; | ||||||
|  | import PasswordStrength from '~/ui/Form/PasswordStrength'; | ||||||
| 
 | 
 | ||||||
| import styles from '../createAccount.css'; | import styles from '../createAccount.css'; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,7 +19,8 @@ import React, { Component, PropTypes } from 'react'; | |||||||
| import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||||
| import { Checkbox } from 'material-ui'; | import { Checkbox } from 'material-ui'; | ||||||
| 
 | 
 | ||||||
| import { Form, Input, PasswordStrength } from '~/ui'; | import { Form, Input } from '~/ui'; | ||||||
|  | import PasswordStrength from '~/ui/Form/PasswordStrength'; | ||||||
| 
 | 
 | ||||||
| import styles from '../createAccount.css'; | import styles from '../createAccount.css'; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -20,7 +20,8 @@ import moment from 'moment'; | |||||||
| import React, { Component, PropTypes } from 'react'; | import React, { Component, PropTypes } from 'react'; | ||||||
| import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||||
| 
 | 
 | ||||||
| import { Button, Modal, Editor } from '~/ui'; | import { Button, Modal } from '~/ui'; | ||||||
|  | import Editor from '~/ui/Editor'; | ||||||
| import { CancelIcon, CheckIcon, DeleteIcon } from '~/ui/Icons'; | import { CancelIcon, CheckIcon, DeleteIcon } from '~/ui/Icons'; | ||||||
| 
 | 
 | ||||||
| import styles from './loadContract.css'; | import styles from './loadContract.css'; | ||||||
|  | |||||||
| @ -23,7 +23,8 @@ import { connect } from 'react-redux'; | |||||||
| import { bindActionCreators } from 'redux'; | import { bindActionCreators } from 'redux'; | ||||||
| 
 | 
 | ||||||
| import { newError, openSnackbar } from '~/redux/actions'; | import { newError, openSnackbar } from '~/redux/actions'; | ||||||
| import { Button, Modal, IdentityName, IdentityIcon, PasswordStrength } from '~/ui'; | import { Button, Modal, IdentityName, IdentityIcon } from '~/ui'; | ||||||
|  | import PasswordStrength from '~/ui/Form/PasswordStrength'; | ||||||
| import Form, { Input } from '~/ui/Form'; | import Form, { Input } from '~/ui/Form'; | ||||||
| import { CancelIcon, CheckIcon, SendIcon } from '~/ui/Icons'; | import { CancelIcon, CheckIcon, SendIcon } from '~/ui/Icons'; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -19,7 +19,8 @@ import React, { Component, PropTypes } from 'react'; | |||||||
| import SaveIcon from 'material-ui/svg-icons/content/save'; | import SaveIcon from 'material-ui/svg-icons/content/save'; | ||||||
| import ContentClear from 'material-ui/svg-icons/content/clear'; | import ContentClear from 'material-ui/svg-icons/content/clear'; | ||||||
| 
 | 
 | ||||||
| import { Button, Modal, Editor, Form, Input } from '~/ui'; | import { Button, Modal, Form, Input } from '~/ui'; | ||||||
|  | import Editor from '~/ui/Editor'; | ||||||
| import { ERRORS, validateName } from '~/util/validation'; | import { ERRORS, validateName } from '~/util/validation'; | ||||||
| 
 | 
 | ||||||
| import styles from './saveContract.css'; | import styles from './saveContract.css'; | ||||||
|  | |||||||
							
								
								
									
										23
									
								
								js/src/redux/providers/workerWrapper.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								js/src/redux/providers/workerWrapper.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | // Copyright 2015-2017 Parity Technologies (UK) Ltd.
 | ||||||
|  | // This file is part of Parity.
 | ||||||
|  | 
 | ||||||
|  | // Parity is free software: you can redistribute it and/or modify
 | ||||||
|  | // it under the terms of the GNU General Public License as published by
 | ||||||
|  | // the Free Software Foundation, either version 3 of the License, or
 | ||||||
|  | // (at your option) any later version.
 | ||||||
|  | 
 | ||||||
|  | // Parity is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
|  | // GNU General Public License for more details.
 | ||||||
|  | 
 | ||||||
|  | // You should have received a copy of the GNU General Public License
 | ||||||
|  | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | if (!process.env.EMBED) { | ||||||
|  |   const setupWorker = require('./worker').setupWorker; | ||||||
|  | 
 | ||||||
|  |   module.exports = { setupWorker }; | ||||||
|  | } else { | ||||||
|  |   module.exports = { setupWorker: () => {} }; | ||||||
|  | } | ||||||
| @ -20,7 +20,7 @@ import initMiddleware from './middleware'; | |||||||
| import initReducers from './reducers'; | import initReducers from './reducers'; | ||||||
| 
 | 
 | ||||||
| import { load as loadWallet } from './providers/walletActions'; | import { load as loadWallet } from './providers/walletActions'; | ||||||
| import { setupWorker } from './providers/worker'; | import { setupWorker } from './providers/workerWrapper'; | ||||||
| 
 | 
 | ||||||
| import { | import { | ||||||
|   Balances as BalancesProvider, |   Balances as BalancesProvider, | ||||||
|  | |||||||
| @ -14,4 +14,9 @@ | |||||||
| // You should have received a copy of the GNU General Public License
 | // You should have received a copy of the GNU General Public License
 | ||||||
| // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
| 
 | 
 | ||||||
|  | export Export from './Export'; | ||||||
|  | export Import from './Import'; | ||||||
|  | export Search from './Search'; | ||||||
|  | export Sort from './Sort'; | ||||||
|  | 
 | ||||||
| export default from './actionbar'; | export default from './actionbar'; | ||||||
|  | |||||||
| @ -14,35 +14,19 @@ | |||||||
| // You should have received a copy of the GNU General Public License
 | // You should have received a copy of the GNU General Public License
 | ||||||
| // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
| 
 | 
 | ||||||
| import AddressSelect from './AddressSelect'; | export AddressSelect from './AddressSelect'; | ||||||
| import DappUrlInput from './DappUrlInput'; | export DappUrlInput from './DappUrlInput'; | ||||||
| import FormWrap from './FormWrap'; | export FormWrap from './FormWrap'; | ||||||
| import Input from './Input'; | export Input from './Input'; | ||||||
| import InputAddress from './InputAddress'; | export InputAddress from './InputAddress'; | ||||||
| import InputAddressSelect from './InputAddressSelect'; | export InputAddressSelect from './InputAddressSelect'; | ||||||
| import InputChip from './InputChip'; | export InputChip from './InputChip'; | ||||||
| import InputDate from './InputDate'; | export InputDate from './InputDate'; | ||||||
| import InputInline from './InputInline'; | export InputInline from './InputInline'; | ||||||
| import InputTime from './InputTime'; | export InputTime from './InputTime'; | ||||||
| import Label from './Label'; | export Label from './Label'; | ||||||
| import RadioButtons from './RadioButtons'; | export RadioButtons from './RadioButtons'; | ||||||
| import Select from './Select'; | export Select from './Select'; | ||||||
| import TypedInput from './TypedInput'; | export TypedInput from './TypedInput'; | ||||||
| 
 | 
 | ||||||
| export default from './form'; | export default from './form'; | ||||||
| export { |  | ||||||
|   AddressSelect, |  | ||||||
|   DappUrlInput, |  | ||||||
|   FormWrap, |  | ||||||
|   Input, |  | ||||||
|   InputAddress, |  | ||||||
|   InputAddressSelect, |  | ||||||
|   InputChip, |  | ||||||
|   InputDate, |  | ||||||
|   InputInline, |  | ||||||
|   InputTime, |  | ||||||
|   Label, |  | ||||||
|   RadioButtons, |  | ||||||
|   Select, |  | ||||||
|   TypedInput |  | ||||||
| }; |  | ||||||
|  | |||||||
| @ -14,118 +14,43 @@ | |||||||
| // You should have received a copy of the GNU General Public License
 | // You should have received a copy of the GNU General Public License
 | ||||||
| // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
| 
 | 
 | ||||||
| import AccountCard from './AccountCard'; | export AccountCard from './AccountCard'; | ||||||
| import Actionbar from './Actionbar'; | export Actionbar, { Export as ActionbarExport, Import as ActionbarImport, Search as ActionbarSearch, Sort as ActionbarSort } from './Actionbar'; | ||||||
| import ActionbarExport from './Actionbar/Export'; | export Badge from './Badge'; | ||||||
| import ActionbarImport from './Actionbar/Import'; | export Balance from './Balance'; | ||||||
| import ActionbarSearch from './Actionbar/Search'; | export BlockStatus from './BlockStatus'; | ||||||
| import ActionbarSort from './Actionbar/Sort'; | export Button from './Button'; | ||||||
| import Badge from './Badge'; | export Certifications from './Certifications'; | ||||||
| import Balance from './Balance'; | export ConfirmDialog from './ConfirmDialog'; | ||||||
| import BlockStatus from './BlockStatus'; | export Container, { Title as ContainerTitle } from './Container'; | ||||||
| import Button from './Button'; | export ContextProvider from './ContextProvider'; | ||||||
| import Certifications from './Certifications'; | export CopyToClipboard from './CopyToClipboard'; | ||||||
| import ConfirmDialog from './ConfirmDialog'; | export CurrencySymbol from './CurrencySymbol'; | ||||||
| import Container, { Title as ContainerTitle } from './Container'; | export DappCard from './DappCard'; | ||||||
| import ContextProvider from './ContextProvider'; | export DappIcon from './DappIcon'; | ||||||
| import CopyToClipboard from './CopyToClipboard'; | export Errors from './Errors'; | ||||||
| import CurrencySymbol from './CurrencySymbol'; | export Features, { FEATURES, FeaturesStore } from './Features'; | ||||||
| import DappCard from './DappCard'; | export Form, { AddressSelect, DappUrlInput, FormWrap, Input, InputAddress, InputAddressSelect, InputChip, InputDate, InputInline, InputTime, Label, RadioButtons, Select, TypedInput } from './Form'; | ||||||
| import DappIcon from './DappIcon'; | export GasPriceEditor from './GasPriceEditor'; | ||||||
| import Editor from './Editor'; | export GasPriceSelector from './GasPriceSelector'; | ||||||
| import Errors from './Errors'; | export Icons from './Icons'; | ||||||
| import Features, { FEATURES, FeaturesStore } from './Features'; | export IdentityIcon from './IdentityIcon'; | ||||||
| import Form, { AddressSelect, DappUrlInput, FormWrap, Input, InputAddress, InputAddressSelect, InputChip, InputDate, InputInline, InputTime, Label, RadioButtons, Select, TypedInput } from './Form'; | export IdentityName from './IdentityName'; | ||||||
| import GasPriceEditor from './GasPriceEditor'; | export LanguageSelector from './LanguageSelector'; | ||||||
| import GasPriceSelector from './GasPriceSelector'; | export Loading from './Loading'; | ||||||
| import Icons from './Icons'; | export MethodDecoding from './MethodDecoding'; | ||||||
| import IdentityIcon from './IdentityIcon'; | export Modal, { Busy as BusyStep, Completed as CompletedStep } from './Modal'; | ||||||
| import IdentityName from './IdentityName'; | export muiTheme from './Theme'; | ||||||
| import LanguageSelector from './LanguageSelector'; | export Page from './Page'; | ||||||
| import Loading from './Loading'; | export ParityBackground from './ParityBackground'; | ||||||
| import MethodDecoding from './MethodDecoding'; | export Portal from './Portal'; | ||||||
| import Modal, { Busy as BusyStep, Completed as CompletedStep } from './Modal'; | export QrCode from './QrCode'; | ||||||
| import muiTheme from './Theme'; | export SectionList from './SectionList'; | ||||||
| import Page from './Page'; | export ShortenedHash from './ShortenedHash'; | ||||||
| import ParityBackground from './ParityBackground'; | export SignerIcon from './SignerIcon'; | ||||||
| import PasswordStrength from './Form/PasswordStrength'; | export Tags from './Tags'; | ||||||
| import Portal from './Portal'; | export Title from './Title'; | ||||||
| import QrCode from './QrCode'; | export Tooltips, { Tooltip } from './Tooltips'; | ||||||
| import SectionList from './SectionList'; | export TxHash from './TxHash'; | ||||||
| import ShortenedHash from './ShortenedHash'; | export TxList from './TxList'; | ||||||
| import SignerIcon from './SignerIcon'; | export Warning from './Warning'; | ||||||
| import Tags from './Tags'; |  | ||||||
| import Title from './Title'; |  | ||||||
| import Tooltips, { Tooltip } from './Tooltips'; |  | ||||||
| import TxHash from './TxHash'; |  | ||||||
| import TxList from './TxList'; |  | ||||||
| import Warning from './Warning'; |  | ||||||
| 
 |  | ||||||
| export { |  | ||||||
|   AccountCard, |  | ||||||
|   Actionbar, |  | ||||||
|   ActionbarExport, |  | ||||||
|   ActionbarImport, |  | ||||||
|   ActionbarSearch, |  | ||||||
|   ActionbarSort, |  | ||||||
|   AddressSelect, |  | ||||||
|   Badge, |  | ||||||
|   Balance, |  | ||||||
|   BlockStatus, |  | ||||||
|   Button, |  | ||||||
|   Certifications, |  | ||||||
|   ConfirmDialog, |  | ||||||
|   Container, |  | ||||||
|   ContainerTitle, |  | ||||||
|   ContextProvider, |  | ||||||
|   CopyToClipboard, |  | ||||||
|   CurrencySymbol, |  | ||||||
|   DappCard, |  | ||||||
|   DappIcon, |  | ||||||
|   DappUrlInput, |  | ||||||
|   Editor, |  | ||||||
|   Errors, |  | ||||||
|   FEATURES, |  | ||||||
|   Features, |  | ||||||
|   FeaturesStore, |  | ||||||
|   Form, |  | ||||||
|   FormWrap, |  | ||||||
|   GasPriceEditor, |  | ||||||
|   GasPriceSelector, |  | ||||||
|   Icons, |  | ||||||
|   Input, |  | ||||||
|   InputAddress, |  | ||||||
|   InputAddressSelect, |  | ||||||
|   InputChip, |  | ||||||
|   InputDate, |  | ||||||
|   InputInline, |  | ||||||
|   InputTime, |  | ||||||
|   IdentityIcon, |  | ||||||
|   IdentityName, |  | ||||||
|   Label, |  | ||||||
|   LanguageSelector, |  | ||||||
|   Loading, |  | ||||||
|   MethodDecoding, |  | ||||||
|   Modal, |  | ||||||
|   BusyStep, |  | ||||||
|   CompletedStep, |  | ||||||
|   muiTheme, |  | ||||||
|   Page, |  | ||||||
|   ParityBackground, |  | ||||||
|   PasswordStrength, |  | ||||||
|   Portal, |  | ||||||
|   QrCode, |  | ||||||
|   RadioButtons, |  | ||||||
|   Select, |  | ||||||
|   ShortenedHash, |  | ||||||
|   SectionList, |  | ||||||
|   SignerIcon, |  | ||||||
|   Tags, |  | ||||||
|   Title, |  | ||||||
|   Tooltip, |  | ||||||
|   Tooltips, |  | ||||||
|   TxHash, |  | ||||||
|   TxList, |  | ||||||
|   TypedInput, |  | ||||||
|   Warning |  | ||||||
| }; |  | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ | |||||||
| // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
| 
 | 
 | ||||||
| import scrypt from 'scryptsy'; | import scrypt from 'scryptsy'; | ||||||
| import * as Transaction from 'ethereumjs-tx'; | import Transaction from 'ethereumjs-tx'; | ||||||
| import { pbkdf2Sync } from 'crypto'; | import { pbkdf2Sync } from 'crypto'; | ||||||
| import { createDecipheriv } from 'browserify-aes'; | import { createDecipheriv } from 'browserify-aes'; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -30,7 +30,8 @@ import { newError } from '~/redux/actions'; | |||||||
| import { setVisibleAccounts } from '~/redux/providers/personalActions'; | import { setVisibleAccounts } from '~/redux/providers/personalActions'; | ||||||
| 
 | 
 | ||||||
| import { EditMeta, ExecuteContract } from '~/modals'; | import { EditMeta, ExecuteContract } from '~/modals'; | ||||||
| import { Actionbar, Button, Page, Modal, Editor } from '~/ui'; | import { Actionbar, Button, Page, Modal } from '~/ui'; | ||||||
|  | import Editor from '~/ui/Editor'; | ||||||
| 
 | 
 | ||||||
| import Header from '../Account/Header'; | import Header from '../Account/Header'; | ||||||
| import Delete from '../Address/Delete'; | import Delete from '../Address/Delete'; | ||||||
|  | |||||||
| @ -28,7 +28,8 @@ import ListIcon from 'material-ui/svg-icons/action/view-list'; | |||||||
| import SettingsIcon from 'material-ui/svg-icons/action/settings'; | import SettingsIcon from 'material-ui/svg-icons/action/settings'; | ||||||
| import SendIcon from 'material-ui/svg-icons/content/send'; | import SendIcon from 'material-ui/svg-icons/content/send'; | ||||||
| 
 | 
 | ||||||
| import { Actionbar, ActionbarExport, ActionbarImport, Button, Editor, Page, Select, Input } from '~/ui'; | import { Actionbar, ActionbarExport, ActionbarImport, Button, Page, Select, Input } from '~/ui'; | ||||||
|  | import Editor from '~/ui/Editor'; | ||||||
| import { DeployContract, SaveContract, LoadContract } from '~/modals'; | import { DeployContract, SaveContract, LoadContract } from '~/modals'; | ||||||
| 
 | 
 | ||||||
| import WriteContractStore from './writeContractStore'; | import WriteContractStore from './writeContractStore'; | ||||||
|  | |||||||
| @ -14,44 +14,20 @@ | |||||||
| // You should have received a copy of the GNU General Public License
 | // You should have received a copy of the GNU General Public License
 | ||||||
| // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
| 
 | 
 | ||||||
| import Account from './Account'; | export Account from './Account'; | ||||||
| import Accounts from './Accounts'; | export Accounts from './Accounts'; | ||||||
| import Address from './Address'; | export Address from './Address'; | ||||||
| import Addresses from './Addresses'; | export Addresses from './Addresses'; | ||||||
| import Application from './Application'; | export Application from './Application'; | ||||||
| import Contract from './Contract'; | export Contract from './Contract'; | ||||||
| import Contracts from './Contracts'; | export Contracts from './Contracts'; | ||||||
| import Dapp from './Dapp'; | export Dapp from './Dapp'; | ||||||
| import Dapps from './Dapps'; | export Dapps from './Dapps'; | ||||||
| import HistoryStore from './historyStore'; | export HistoryStore from './historyStore'; | ||||||
| import ParityBar from './ParityBar'; | export ParityBar from './ParityBar'; | ||||||
| import Settings, { SettingsBackground, SettingsParity, SettingsProxy, SettingsViews } from './Settings'; | export Settings, { SettingsBackground, SettingsParity, SettingsProxy, SettingsViews } from './Settings'; | ||||||
| import Signer from './Signer'; | export Signer from './Signer'; | ||||||
| import Status from './Status'; | export Status from './Status'; | ||||||
| import Wallet from './Wallet'; | export Wallet from './Wallet'; | ||||||
| import Web from './Web'; | export Web from './Web'; | ||||||
| import WriteContract from './WriteContract'; | export WriteContract from './WriteContract'; | ||||||
| 
 |  | ||||||
| export { |  | ||||||
|   Account, |  | ||||||
|   Accounts, |  | ||||||
|   Address, |  | ||||||
|   Addresses, |  | ||||||
|   Application, |  | ||||||
|   Contract, |  | ||||||
|   Contracts, |  | ||||||
|   Dapp, |  | ||||||
|   Dapps, |  | ||||||
|   HistoryStore, |  | ||||||
|   ParityBar, |  | ||||||
|   Settings, |  | ||||||
|   SettingsBackground, |  | ||||||
|   SettingsParity, |  | ||||||
|   SettingsProxy, |  | ||||||
|   SettingsViews, |  | ||||||
|   Signer, |  | ||||||
|   Status, |  | ||||||
|   Wallet, |  | ||||||
|   Web, |  | ||||||
|   WriteContract |  | ||||||
| }; |  | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ | |||||||
| // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
| 
 | 
 | ||||||
| try { | try { | ||||||
|   var JsonRpc = require('../.npmjs/jsonRpc/library.js'); |   var JsonRpc = require('../.npmjs/jsonrpc/library.js').default; | ||||||
| 
 | 
 | ||||||
|   if (typeof JsonRpc !== 'object') { |   if (typeof JsonRpc !== 'object') { | ||||||
|     throw new Error('JsonRpc'); |     throw new Error('JsonRpc'); | ||||||
|  | |||||||
| @ -32,17 +32,25 @@ const FAVICON = path.resolve(__dirname, '../assets/images/parity-logo-black-no-t | |||||||
| 
 | 
 | ||||||
| const DEST = process.env.BUILD_DEST || '.build'; | const DEST = process.env.BUILD_DEST || '.build'; | ||||||
| const ENV = process.env.NODE_ENV || 'development'; | const ENV = process.env.NODE_ENV || 'development'; | ||||||
|  | const EMBED = process.env.EMBED; | ||||||
|  | 
 | ||||||
| const isProd = ENV === 'production'; | const isProd = ENV === 'production'; | ||||||
|  | const isEmbed = EMBED === '1' || EMBED === 'true'; | ||||||
|  | 
 | ||||||
|  | const entry = isEmbed | ||||||
|  |   ? { | ||||||
|  |     embed: './embed.js' | ||||||
|  |   } | ||||||
|  |   : Object.assign({}, Shared.dappsEntry, { | ||||||
|  |     index: './index.js' | ||||||
|  |   }); | ||||||
| 
 | 
 | ||||||
| module.exports = { | module.exports = { | ||||||
|   cache: !isProd, |   cache: !isProd, | ||||||
|   devtool: isProd ? '#hidden-source-map' : '#source-map', |   devtool: isProd ? '#hidden-source-map' : '#source-map', | ||||||
| 
 | 
 | ||||||
|   context: path.join(__dirname, '../src'), |   context: path.join(__dirname, '../src'), | ||||||
|   entry: Object.assign({}, Shared.dappsEntry, { |   entry: entry, | ||||||
|     index: './index.js', |  | ||||||
|     embed: './embed.js' |  | ||||||
|   }), |  | ||||||
|   output: { |   output: { | ||||||
|     // publicPath: '/',
 |     // publicPath: '/',
 | ||||||
|     path: path.join(__dirname, '../', DEST), |     path: path.join(__dirname, '../', DEST), | ||||||
| @ -55,15 +63,12 @@ module.exports = { | |||||||
|         test: /\.js$/, |         test: /\.js$/, | ||||||
|         exclude: /(node_modules)/, |         exclude: /(node_modules)/, | ||||||
|         // use: [ 'happypack/loader?id=js' ]
 |         // use: [ 'happypack/loader?id=js' ]
 | ||||||
|         use: isProd ? ['babel-loader'] : [ |         use: isProd ? 'babel-loader' : 'babel-loader?cacheDirectory=true' | ||||||
|           'babel-loader?cacheDirectory=true' |  | ||||||
|         ], |  | ||||||
|         options: Shared.getBabelrc() |  | ||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
|         test: /\.js$/, |         test: /\.js$/, | ||||||
|         include: /node_modules\/material-ui-chip-input/, |         include: /node_modules\/(material-chip-input|ethereumjs-tx)/, | ||||||
|         use: [ 'babel-loader' ] |         use: 'babel-loader' | ||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
|         test: /\.json$/, |         test: /\.json$/, | ||||||
| @ -91,13 +96,13 @@ module.exports = { | |||||||
|         test: /\.css$/, |         test: /\.css$/, | ||||||
|         include: [ /src/ ], |         include: [ /src/ ], | ||||||
|         // exclude: [ /src\/dapps/ ],
 |         // exclude: [ /src\/dapps/ ],
 | ||||||
|         loader: isProd ? ExtractTextPlugin.extract([ |         loader: (isProd && !isEmbed) ? ExtractTextPlugin.extract([ | ||||||
|           // 'style-loader',
 |           // 'style-loader',
 | ||||||
|           'css-loader?modules&sourceMap&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]', |           'css-loader?modules&sourceMap&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]', | ||||||
|           'postcss-loader' |           'postcss-loader' | ||||||
|         ]) : undefined, |         ]) : undefined, | ||||||
|         // use: [ 'happypack/loader?id=css' ]
 |         // use: [ 'happypack/loader?id=css' ]
 | ||||||
|         use: isProd ? undefined : [ |         use: (isProd && !isEmbed) ? undefined : [ | ||||||
|           'style-loader', |           'style-loader', | ||||||
|           'css-loader?modules&sourceMap&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]', |           'css-loader?modules&sourceMap&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]', | ||||||
|           'postcss-loader' |           'postcss-loader' | ||||||
| @ -155,53 +160,63 @@ module.exports = { | |||||||
|       }); |       }); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     const plugins = Shared.getPlugins().concat( |     let plugins = Shared.getPlugins().concat( | ||||||
|       new CopyWebpackPlugin([ |       new WebpackErrorNotificationPlugin() | ||||||
|         { from: './error_pages.css', to: 'styles.css' }, |  | ||||||
|         { from: 'dapps/static' } |  | ||||||
|       ], {}), |  | ||||||
| 
 |  | ||||||
|       new WebpackErrorNotificationPlugin(), |  | ||||||
| 
 |  | ||||||
|       new webpack.DllReferencePlugin({ |  | ||||||
|         context: '.', |  | ||||||
|         manifest: require(`../${DEST}/vendor-manifest.json`) |  | ||||||
|       }), |  | ||||||
| 
 |  | ||||||
|       new HtmlWebpackPlugin({ |  | ||||||
|         title: 'Parity', |  | ||||||
|         filename: 'index.html', |  | ||||||
|         template: './index.ejs', |  | ||||||
|         favicon: FAVICON, |  | ||||||
|         chunks: [ |  | ||||||
|           isProd ? null : 'commons', |  | ||||||
|           'index' |  | ||||||
|         ] |  | ||||||
|       }), |  | ||||||
| 
 |  | ||||||
|       new HtmlWebpackPlugin({ |  | ||||||
|         title: 'Parity Bar', |  | ||||||
|         filename: 'embed.html', |  | ||||||
|         template: './index.ejs', |  | ||||||
|         favicon: FAVICON, |  | ||||||
|         chunks: [ |  | ||||||
|           isProd ? null : 'commons', |  | ||||||
|           'embed' |  | ||||||
|         ] |  | ||||||
|       }), |  | ||||||
| 
 |  | ||||||
|       new ScriptExtHtmlWebpackPlugin({ |  | ||||||
|         sync: [ 'commons', 'vendor.js' ], |  | ||||||
|         defaultAttribute: 'defer' |  | ||||||
|       }), |  | ||||||
| 
 |  | ||||||
|       new ServiceWorkerWebpackPlugin({ |  | ||||||
|         entry: path.join(__dirname, '../src/serviceWorker.js') |  | ||||||
|       }), |  | ||||||
| 
 |  | ||||||
|       DappsHTMLInjection |  | ||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|  |     if (!isEmbed) { | ||||||
|  |       plugins = [].concat( | ||||||
|  |         plugins, | ||||||
|  | 
 | ||||||
|  |         new HtmlWebpackPlugin({ | ||||||
|  |           title: 'Parity', | ||||||
|  |           filename: 'index.html', | ||||||
|  |           template: './index.ejs', | ||||||
|  |           favicon: FAVICON, | ||||||
|  |           chunks: [ | ||||||
|  |             isProd ? null : 'commons', | ||||||
|  |             'index' | ||||||
|  |           ] | ||||||
|  |         }), | ||||||
|  | 
 | ||||||
|  |         new ServiceWorkerWebpackPlugin({ | ||||||
|  |           entry: path.join(__dirname, '../src/serviceWorker.js') | ||||||
|  |         }), | ||||||
|  | 
 | ||||||
|  |         DappsHTMLInjection, | ||||||
|  | 
 | ||||||
|  |         new webpack.DllReferencePlugin({ | ||||||
|  |           context: '.', | ||||||
|  |           manifest: require(`../${DEST}/vendor-manifest.json`) | ||||||
|  |         }), | ||||||
|  | 
 | ||||||
|  |         new ScriptExtHtmlWebpackPlugin({ | ||||||
|  |           sync: [ 'commons', 'vendor.js' ], | ||||||
|  |           defaultAttribute: 'defer' | ||||||
|  |         }), | ||||||
|  | 
 | ||||||
|  |         new CopyWebpackPlugin([ | ||||||
|  |           { from: './error_pages.css', to: 'styles.css' }, | ||||||
|  |           { from: 'dapps/static' } | ||||||
|  |         ], {}) | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (isEmbed) { | ||||||
|  |       plugins.push( | ||||||
|  |         new HtmlWebpackPlugin({ | ||||||
|  |           title: 'Parity Bar', | ||||||
|  |           filename: 'embed.html', | ||||||
|  |           template: './index.ejs', | ||||||
|  |           favicon: FAVICON, | ||||||
|  |           chunks: [ | ||||||
|  |             isProd ? null : 'commons', | ||||||
|  |             'embed' | ||||||
|  |           ] | ||||||
|  |         }) | ||||||
|  |       ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (!isProd) { |     if (!isProd) { | ||||||
|       const DEST_I18N = path.join(__dirname, '..', DEST, 'i18n'); |       const DEST_I18N = path.join(__dirname, '..', DEST, 'i18n'); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -36,4 +36,5 @@ app.use(wsProxy); | |||||||
| var server = app.listen(process.env.PORT || 3000, function () { | var server = app.listen(process.env.PORT || 3000, function () { | ||||||
|   console.log('Listening on port', server.address().port); |   console.log('Listening on port', server.address().port); | ||||||
| }); | }); | ||||||
|  | 
 | ||||||
| server.on('upgrade', wsProxy.upgrade); | server.on('upgrade', wsProxy.upgrade); | ||||||
|  | |||||||
							
								
								
									
										49
									
								
								js/webpack/embed.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								js/webpack/embed.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,49 @@ | |||||||
|  | // Copyright 2015-2017 Parity Technologies (UK) Ltd.
 | ||||||
|  | // This file is part of Parity.
 | ||||||
|  | 
 | ||||||
|  | // Parity is free software: you can redistribute it and/or modify
 | ||||||
|  | // it under the terms of the GNU General Public License as published by
 | ||||||
|  | // the Free Software Foundation, either version 3 of the License, or
 | ||||||
|  | // (at your option) any later version.
 | ||||||
|  | 
 | ||||||
|  | // Parity is distributed in the hope that it will be useful,
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | ||||||
|  | // GNU General Public License for more details.
 | ||||||
|  | 
 | ||||||
|  | // You should have received a copy of the GNU General Public License
 | ||||||
|  | // along with Parity.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  | 
 | ||||||
|  | const webpack = require('webpack'); | ||||||
|  | const WebpackStats = require('webpack/lib/Stats'); | ||||||
|  | const path = require('path'); | ||||||
|  | const fs = require('fs'); | ||||||
|  | 
 | ||||||
|  | const WebpackConfig = require('./app'); | ||||||
|  | 
 | ||||||
|  | const compiler = webpack(WebpackConfig); | ||||||
|  | 
 | ||||||
|  | compiler.run(function handler (err, stats) { | ||||||
|  |   if (err) { | ||||||
|  |     return console.error(err); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // @see https://github.com/webpack/webpack/blob/324d309107f00cfc38ec727521563d309339b2ec/lib/Stats.js#L790
 | ||||||
|  |   // Accepted values: none, errors-only, minimal, normal, verbose
 | ||||||
|  |   const options = WebpackStats.presetToOptions('normal'); | ||||||
|  | 
 | ||||||
|  |   options.timings = true; | ||||||
|  | 
 | ||||||
|  |   const output = stats.toString(options); | ||||||
|  |   const assets = Object.keys(stats.compilation.assets); | ||||||
|  | 
 | ||||||
|  |   const embedPath = path.resolve(WebpackConfig.output.path, './embed.json'); | ||||||
|  |   const embedData = { assets: assets }; | ||||||
|  | 
 | ||||||
|  |   fs.writeFileSync(embedPath, JSON.stringify(embedData, null, 2)); | ||||||
|  | 
 | ||||||
|  |   process.stdout.write('\n'); | ||||||
|  |   process.stdout.write(output); | ||||||
|  |   process.stdout.write('\n\n'); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
| @ -26,6 +26,7 @@ const rucksack = require('rucksack-css'); | |||||||
| const CircularDependencyPlugin = require('circular-dependency-plugin'); | const CircularDependencyPlugin = require('circular-dependency-plugin'); | ||||||
| const ProgressBarPlugin = require('progress-bar-webpack-plugin'); | const ProgressBarPlugin = require('progress-bar-webpack-plugin'); | ||||||
| 
 | 
 | ||||||
|  | const EMBED = process.env.EMBED; | ||||||
| const ENV = process.env.NODE_ENV || 'development'; | const ENV = process.env.NODE_ENV || 'development'; | ||||||
| const isProd = ENV === 'production'; | const isProd = ENV === 'production'; | ||||||
| 
 | 
 | ||||||
| @ -113,6 +114,7 @@ function getPlugins (_isProd = isProd) { | |||||||
| 
 | 
 | ||||||
|     new webpack.DefinePlugin({ |     new webpack.DefinePlugin({ | ||||||
|       'process.env': { |       'process.env': { | ||||||
|  |         EMBED: JSON.stringify(EMBED), | ||||||
|         NODE_ENV: JSON.stringify(ENV), |         NODE_ENV: JSON.stringify(ENV), | ||||||
|         RPC_ADDRESS: JSON.stringify(process.env.RPC_ADDRESS), |         RPC_ADDRESS: JSON.stringify(process.env.RPC_ADDRESS), | ||||||
|         PARITY_URL: JSON.stringify(process.env.PARITY_URL), |         PARITY_URL: JSON.stringify(process.env.PARITY_URL), | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user