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)$/,