diff --git a/js/package.json b/js/package.json index af56140b1..f9ef9c181 100644 --- a/js/package.json +++ b/js/package.json @@ -43,6 +43,7 @@ "test": "mocha 'src/**/*.spec.js'", "test:coverage": "istanbul cover _mocha -- 'src/**/*.spec.js'", "test:e2e": "mocha 'src/**/*.e2e.js'", + "test:npm": "(cd .npmjs && npm i) && node test/npmLibrary && (rm -rf .npmjs/node_modules)", "prepush": "npm run lint:cached" }, "devDependencies": { diff --git a/js/parity.package.json b/js/parity.package.json index 7d18cc5ed..0974e072f 100644 --- a/js/parity.package.json +++ b/js/parity.package.json @@ -27,6 +27,7 @@ }, "dependencies": { "bignumber.js": "^2.3.0", - "js-sha3": "^0.5.2" + "js-sha3": "^0.5.2", + "node-fetch": "^1.6.3" } } diff --git a/js/src/library.js b/js/src/library.js index fbbab2286..2b526c28e 100644 --- a/js/src/library.js +++ b/js/src/library.js @@ -14,10 +14,22 @@ // You should have received a copy of the GNU General Public License // along with Parity. If not, see . +import 'babel-polyfill/dist/polyfill.js'; +import es6Promise from 'es6-promise'; +es6Promise.polyfill(); + +const isNode = typeof global !== 'undefined' && typeof global !== 'undefined'; +const isBrowser = typeof self !== 'undefined' && typeof self.window !== 'undefined'; + +if (isBrowser) { + require('whatwg-fetch'); +} + +if (isNode) { + global.fetch = require('node-fetch'); +} + import Abi from './abi'; import Api from './api'; -export { - Abi, - Api -}; +module.exports = { Api, Abi }; diff --git a/js/test/npmLibrary.js b/js/test/npmLibrary.js new file mode 100644 index 000000000..63d8f9515 --- /dev/null +++ b/js/test/npmLibrary.js @@ -0,0 +1,45 @@ +// Copyright 2015, 2016 Ethcore (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 . + +try { + var Api = require('../.npmjs/library.js').Api; + var Abi = require('../.npmjs/library.js').Abi; + + if (typeof Api !== 'function') { + throw new Error('No Api'); + } + + if (typeof Abi !== 'function') { + throw new Error('No Abi'); + } + + var transport = new Api.Transport.Http('http://localhost:8545'); + var api = new Api(transport); + + api.eth + .blockNumber() + .then((block) => { + console.log('library working fine', '(block #' + block.toFormat() + ')'); + process.exit(0); + }) + .catch(() => { + console.log('library working fine (disconnected)'); + process.exit(0); + }); +} catch (e) { + console.error('An error occured:', e.toString().split('\n')[0]); + process.exit(1); +} diff --git a/js/webpack.libraries.js b/js/webpack.libraries.js index bf54a933f..07e40957e 100644 --- a/js/webpack.libraries.js +++ b/js/webpack.libraries.js @@ -26,6 +26,7 @@ const DEST = process.env.BUILD_DEST || '.build'; module.exports = { context: path.join(__dirname, './src'), + target: 'node', entry: { // library 'inject': ['./web3.js'], @@ -34,9 +35,18 @@ module.exports = { }, output: { path: path.join(__dirname, DEST), - filename: '[name].js' + filename: '[name].js', + library: '[name].js', + libraryTarget: 'umd' + }, + externals: { + 'node-fetch': 'node-fetch', + 'vertx': 'vertx' }, module: { + noParse: [ + /babel-polyfill/ + ], loaders: [ { test: /\.js$/, diff --git a/js/webpack.npm.js b/js/webpack.npm.js index 23e2b7939..80b6dd540 100644 --- a/js/webpack.npm.js +++ b/js/webpack.npm.js @@ -24,13 +24,23 @@ const isProd = ENV === 'production'; module.exports = { context: path.join(__dirname, './src'), + target: 'node', entry: 'library.js', output: { path: path.join(__dirname, '.npmjs'), filename: 'library.js', - libraryTarget: 'commonjs' + library: 'Parity', + libraryTarget: 'umd', + umdNamedDefine: true + }, + externals: { + 'node-fetch': 'node-fetch', + 'vertx': 'vertx' }, module: { + noParse: [ + /babel-polyfill/ + ], loaders: [ { test: /(\.jsx|\.js)$/,