diff --git a/.gitignore b/.gitignore index ac98c5a..5cbe11f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ ### App ### -/dist/ -/native.js -/_test.js +dist/ +/packages/nanocurrency/native.js ### TS ### diff --git a/.gitmodules b/.gitmodules index bb04a95..7b5d23d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "src/native/blake2"] - path = src/native/blake2 +[submodule "packages/nanocurrency/src/native/blake2"] + path = packages/nanocurrency/src/native/blake2 url = https://github.com/BLAKE2/BLAKE2.git diff --git a/.travis.yml b/.travis.yml index e302048..1fef428 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,8 +14,6 @@ branches: install: - yarn script: - - yarn build:prod - - yarn test - - yarn lint -after_success: - - yarn travis-deploy-once "yarn semantic-release" + - yarn lerna run build:prod + - yarn lerna run test + - yarn lerna run lint diff --git a/examples/multi-threaded/index.html b/examples/multi-threaded/index.html deleted file mode 100644 index 6753c9c..0000000 --- a/examples/multi-threaded/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - -

-    
-  
-
diff --git a/examples/multi-threaded/worker.js b/examples/multi-threaded/worker.js
deleted file mode 100644
index 3219923..0000000
--- a/examples/multi-threaded/worker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* eslint-env worker */
-/* global NanoCurrency:false */
-
-importScripts('https://cdn.jsdelivr.net/npm/nanocurrency@2.0.0/dist/nanocurrency.umd.js');
-
-onmessage = async function({ data }) {
-  const { blockHash, workerNumber, workerCount } = data;
-
-  postMessage({ type: 'started' });
-
-  const work = await NanoCurrency.computeWork(blockHash, workerNumber, workerCount);
-
-  postMessage({ type: 'done', work });
-};
diff --git a/examples/pow-benchmark/worker.js b/examples/pow-benchmark/worker.js
deleted file mode 100644
index 3219923..0000000
--- a/examples/pow-benchmark/worker.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* eslint-env worker */
-/* global NanoCurrency:false */
-
-importScripts('https://cdn.jsdelivr.net/npm/nanocurrency@2.0.0/dist/nanocurrency.umd.js');
-
-onmessage = async function({ data }) {
-  const { blockHash, workerNumber, workerCount } = data;
-
-  postMessage({ type: 'started' });
-
-  const work = await NanoCurrency.computeWork(blockHash, workerNumber, workerCount);
-
-  postMessage({ type: 'done', work });
-};
diff --git a/lerna.json b/lerna.json
new file mode 100644
index 0000000..fac1066
--- /dev/null
+++ b/lerna.json
@@ -0,0 +1,7 @@
+{
+  "packages": [
+    "packages/*"
+  ],
+  "version": "independent",
+  "npmClient": "yarn"
+}
diff --git a/package.json b/package.json
index 4b45b94..a99b184 100644
--- a/package.json
+++ b/package.json
@@ -1,95 +1,19 @@
 {
-  "name": "nanocurrency",
-  "description":
-    "A toolkit for the Nano cryptocurrency, allowing you to derive keys, generate seeds, hashes, signatures, proofs of work and blocks.",
-  "version": "0.0.0-development",
-  "author": {
-    "name": "Marvin ROGER",
-    "email": "dev@marvinroger.fr",
-    "url": "https://www.marvinroger.fr"
-  },
-  "browser": {
-    "path": false,
-    "fs": false,
-    "crypto": false,
-    "util": false,
-    "./dist/nanocurrency.cjs.js": "./dist/nanocurrency.umd.js"
-  },
-  "bugs": "https://github.com/marvinroger/nanocurrency-js/issues",
+  "private": true,
+  "workspaces": [
+    "packages/*"
+  ],
   "dependencies": {
-    "bignumber.js": "^7.2.0",
-    "blakejs": "^1.1.0",
-    "yargs": "^12.0.1"
+    "@types/node": "^11.11.0",
+    "@types/yargs": "^12.0.9",
+    "cross-env": "^5.2.0",
+    "jest": "^24.3.1",
+    "lerna": "^3.13.1",
+    "prettier": "^1.16.4",
+    "tslint": "^5.13.1",
+    "typedoc": "^0.14.2",
+    "typedoc-plugin-internal-external": "^2.0.1",
+    "typescript": "^3.3.3333"
   },
-  "devDependencies": {
-    "@types/node": "^10.0.0",
-    "@types/yargs": "^11.0.0",
-    "bundlesize": "^0.17.0",
-    "cross-env": "^5.1.3",
-    "cross-os": "^1.2.2",
-    "cross-var": "^1.1.0",
-    "jest": "^23.0.0",
-    "prettier": "^1.12.1",
-    "puppeteer": "^1.1.1",
-    "rollup": "^0.62.0",
-    "rollup-plugin-commonjs": "^9.0.0",
-    "rollup-plugin-license": "^0.7.0",
-    "rollup-plugin-node-resolve": "^3.0.2",
-    "rollup-plugin-terser": "^1.0.1",
-    "rollup-plugin-typescript2": "^0.14.0",
-    "semantic-release": "^15.0.2",
-    "travis-deploy-once": "^5.0.0",
-    "tslint": "^5.10.0",
-    "tslint-config-airbnb": "^5.8.0",
-    "tslint-config-prettier": "^1.12.0",
-    "typedoc": "^0.11.1",
-    "typedoc-plugin-internal-external": "^1.0.10",
-    "typescript": "^2.8.3"
-  },
-  "files": ["dist/"],
-  "homepage": "https://github.com/marvinroger/nanocurrency-js",
-  "jest": {
-    "testPathIgnorePatterns": ["/__tests__/data/", "/node_modules/"]
-  },
-  "keywords": ["crypto", "currency", "nano", "pow", "raiblocks"],
-  "license": "GPL-3.0",
-  "main": "dist/nanocurrency.cjs.js",
-  "module": "dist/nanocurrency.esm.js",
-  "types": "dist/types/index.d.ts",
-  "bin": {
-    "nanocurrency": "dist/bin/index.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/marvinroger/nanocurrency-js.git"
-  },
-  "scripts": {
-    "build:dev": "yarn build:dev:native && yarn build:dev:js",
-    "build:dev:js": "cross-env NODE_ENV=development rollup -c",
-    "build:dev:native": "cross-env EMCC_ARGS=\"\" cross-os build:native__cross",
-    "build:native__common":
-      "cross-var docker run --rm -v $PWD:/src trzeci/emscripten emcc -o native.js $EMCC_ARGS -s WASM=1 -s MODULARIZE=1 -s SINGLE_FILE=1 -s \"EXTRA_EXPORTED_RUNTIME_METHODS=[\\\"cwrap\\\"]\" src/native/functions.c src/native/blake2/ref/blake2b-ref.c",
-    "build:native__cross": {
-      "darwin": "cross-env PWD=\"$(pwd)\" yarn build:native__common",
-      "linux": "cross-env PWD=\"$(pwd)\" yarn build:native__common",
-      "win32": "cross-env PWD=\"%cd%\" yarn build:native__common"
-    },
-    "build:prod": "yarn build:prod:native && yarn build:prod:js",
-    "build:prod:js": "cross-env NODE_ENV=production rollup -c",
-    "build:prod:native":
-      "cross-env EMCC_ARGS=\"-O3 --closure 1 --llvm-lto 3\" cross-os build:native__cross",
-    "generate-docs": "typedoc src/index.ts",
-    "format": "prettier --write \"{src,__tests__}/**/*.{ts,js}\"",
-    "lint": "tslint --project . \"src/**/*.ts\"",
-    "prepublishOnly": "yarn build:prod:js",
-    "semantic-release": "semantic-release",
-    "test": "jest && bundlesize",
-    "travis-deploy-once": "travis-deploy-once"
-  },
-  "bundlesize": [
-    {
-      "path": "./dist/nanocurrency.*.js",
-      "maxSize": "100kB"
-    }
-  ]
+  "name": "nanocurrency-workspace"
 }
diff --git a/__tests__/cli.js b/packages/nanocurrency-cli/__tests__/cli.js
similarity index 98%
rename from __tests__/cli.js
rename to packages/nanocurrency-cli/__tests__/cli.js
index a762da6..ec01ec5 100644
--- a/__tests__/cli.js
+++ b/packages/nanocurrency-cli/__tests__/cli.js
@@ -3,12 +3,12 @@
 const path = require('path');
 const util = require('util');
 const exec = util.promisify(require('child_process').exec);
-const nano = require('../dist/nanocurrency.cjs');
+const nano = require('nanocurrency');
 
 const cli = async args => {
   try {
     const { stdout, stderr } = await exec(
-      'node ' + path.join(__dirname, '../dist/bin/index.js') + ' ' + args
+      'node ' + path.join(__dirname, '../dist/index.js') + ' ' + args
     );
 
     return {
diff --git a/packages/nanocurrency-cli/package.json b/packages/nanocurrency-cli/package.json
new file mode 100644
index 0000000..28eb76a
--- /dev/null
+++ b/packages/nanocurrency-cli/package.json
@@ -0,0 +1,41 @@
+{
+  "name": "nanocurrency-cli",
+  "description": "A toolkit for the Nano cryptocurrency, allowing you to derive keys, generate seeds, hashes, signatures, proofs of work and blocks.",
+  "version": "0.0.0-development",
+  "author": {
+    "name": "Marvin ROGER",
+    "email": "dev@marvinroger.fr",
+    "url": "https://www.marvinroger.fr"
+  },
+  "bugs": "https://github.com/marvinroger/nanocurrency-js/issues",
+  "dependencies": {
+    "nanocurrency": "^2.0.4",
+    "yargs": "^13.0.0"
+  },
+  "files": [
+    "dist/"
+  ],
+  "homepage": "https://github.com/marvinroger/nanocurrency-js",
+  "keywords": [
+    "crypto",
+    "currency",
+    "nano",
+    "pow",
+    "raiblocks"
+  ],
+  "license": "GPL-3.0",
+  "bin": {
+    "nanocurrency": "dist/index.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/marvinroger/nanocurrency-js.git"
+  },
+  "scripts": {
+    "build:prod": "tsc --build",
+    "format": "prettier --write \"{src,__tests__}/**/*.{ts,js}\"",
+    "lint": "tslint --project . \"src/**/*.ts\"",
+    "prepublishOnly": "yarn build",
+    "test": "jest"
+  }
+}
diff --git a/src/cli/index.ts b/packages/nanocurrency-cli/src/index.ts
similarity index 98%
rename from src/cli/index.ts
rename to packages/nanocurrency-cli/src/index.ts
index 12fbf4c..41694c3 100644
--- a/src/cli/index.ts
+++ b/packages/nanocurrency-cli/src/index.ts
@@ -1,6 +1,6 @@
+#!/usr/bin/env node
 import * as yargs from 'yargs';
-
-const nanocurrency = require('../nanocurrency.cjs');
+import * as nanocurrency from 'nanocurrency';
 
 const wrapSubcommand = (yargs: yargs.Argv) =>
   yargs
@@ -151,8 +151,8 @@ yargs
         },
         async argv => {
           const converted = await nanocurrency.convert(argv.input, {
-            from: argv.from,
-            to: argv.to,
+            from: argv.from as any,
+            to: argv.to as any,
           });
           console.log(converted);
         }
diff --git a/packages/nanocurrency-cli/tsconfig.json b/packages/nanocurrency-cli/tsconfig.json
new file mode 100644
index 0000000..f158630
--- /dev/null
+++ b/packages/nanocurrency-cli/tsconfig.json
@@ -0,0 +1,7 @@
+{
+  "extends": "../../tsconfig",
+  "files": ["src/index.ts"],
+  "compilerOptions": {
+    "outDir": "dist"
+  }
+}
diff --git a/__tests__/accelerated.js.bak b/packages/nanocurrency/__tests__/accelerated.js.bak
similarity index 100%
rename from __tests__/accelerated.js.bak
rename to packages/nanocurrency/__tests__/accelerated.js.bak
diff --git a/__tests__/block.js b/packages/nanocurrency/__tests__/block.js
similarity index 100%
rename from __tests__/block.js
rename to packages/nanocurrency/__tests__/block.js
diff --git a/__tests__/browser.js b/packages/nanocurrency/__tests__/browser.js
similarity index 100%
rename from __tests__/browser.js
rename to packages/nanocurrency/__tests__/browser.js
diff --git a/__tests__/conversion.js b/packages/nanocurrency/__tests__/conversion.js
similarity index 100%
rename from __tests__/conversion.js
rename to packages/nanocurrency/__tests__/conversion.js
diff --git a/__tests__/data/invalid.js b/packages/nanocurrency/__tests__/data/invalid.js
similarity index 100%
rename from __tests__/data/invalid.js
rename to packages/nanocurrency/__tests__/data/invalid.js
diff --git a/__tests__/data/valid_blocks.json b/packages/nanocurrency/__tests__/data/valid_blocks.json
similarity index 100%
rename from __tests__/data/valid_blocks.json
rename to packages/nanocurrency/__tests__/data/valid_blocks.json
diff --git a/__tests__/data/valid_keys.json b/packages/nanocurrency/__tests__/data/valid_keys.json
similarity index 100%
rename from __tests__/data/valid_keys.json
rename to packages/nanocurrency/__tests__/data/valid_keys.json
diff --git a/__tests__/hash.js b/packages/nanocurrency/__tests__/hash.js
similarity index 100%
rename from __tests__/hash.js
rename to packages/nanocurrency/__tests__/hash.js
diff --git a/__tests__/keys.js b/packages/nanocurrency/__tests__/keys.js
similarity index 100%
rename from __tests__/keys.js
rename to packages/nanocurrency/__tests__/keys.js
diff --git a/__tests__/signature.js b/packages/nanocurrency/__tests__/signature.js
similarity index 100%
rename from __tests__/signature.js
rename to packages/nanocurrency/__tests__/signature.js
diff --git a/__tests__/work.js b/packages/nanocurrency/__tests__/work.js
similarity index 100%
rename from __tests__/work.js
rename to packages/nanocurrency/__tests__/work.js
diff --git a/docs/assets/css/main.css b/packages/nanocurrency/docs/assets/css/main.css
similarity index 100%
rename from docs/assets/css/main.css
rename to packages/nanocurrency/docs/assets/css/main.css
diff --git a/docs/assets/css/main.css.map b/packages/nanocurrency/docs/assets/css/main.css.map
similarity index 100%
rename from docs/assets/css/main.css.map
rename to packages/nanocurrency/docs/assets/css/main.css.map
diff --git a/docs/assets/images/icons.png b/packages/nanocurrency/docs/assets/images/icons.png
similarity index 100%
rename from docs/assets/images/icons.png
rename to packages/nanocurrency/docs/assets/images/icons.png
diff --git a/docs/assets/images/icons@2x.png b/packages/nanocurrency/docs/assets/images/icons@2x.png
similarity index 100%
rename from docs/assets/images/icons@2x.png
rename to packages/nanocurrency/docs/assets/images/icons@2x.png
diff --git a/docs/assets/images/widgets.png b/packages/nanocurrency/docs/assets/images/widgets.png
similarity index 100%
rename from docs/assets/images/widgets.png
rename to packages/nanocurrency/docs/assets/images/widgets.png
diff --git a/docs/assets/images/widgets@2x.png b/packages/nanocurrency/docs/assets/images/widgets@2x.png
similarity index 100%
rename from docs/assets/images/widgets@2x.png
rename to packages/nanocurrency/docs/assets/images/widgets@2x.png
diff --git a/docs/assets/js/main.js b/packages/nanocurrency/docs/assets/js/main.js
similarity index 100%
rename from docs/assets/js/main.js
rename to packages/nanocurrency/docs/assets/js/main.js
diff --git a/docs/assets/js/search.js b/packages/nanocurrency/docs/assets/js/search.js
similarity index 100%
rename from docs/assets/js/search.js
rename to packages/nanocurrency/docs/assets/js/search.js
diff --git a/docs/enums/unit.html b/packages/nanocurrency/docs/enums/unit.html
similarity index 100%
rename from docs/enums/unit.html
rename to packages/nanocurrency/docs/enums/unit.html
diff --git a/docs/index.html b/packages/nanocurrency/docs/index.html
similarity index 100%
rename from docs/index.html
rename to packages/nanocurrency/docs/index.html
diff --git a/docs/interfaces/blockdata.html b/packages/nanocurrency/docs/interfaces/blockdata.html
similarity index 100%
rename from docs/interfaces/blockdata.html
rename to packages/nanocurrency/docs/interfaces/blockdata.html
diff --git a/docs/interfaces/computeworkparams.html b/packages/nanocurrency/docs/interfaces/computeworkparams.html
similarity index 100%
rename from docs/interfaces/computeworkparams.html
rename to packages/nanocurrency/docs/interfaces/computeworkparams.html
diff --git a/docs/interfaces/convertparams.html b/packages/nanocurrency/docs/interfaces/convertparams.html
similarity index 100%
rename from docs/interfaces/convertparams.html
rename to packages/nanocurrency/docs/interfaces/convertparams.html
diff --git a/docs/interfaces/deriveaddressparams.html b/packages/nanocurrency/docs/interfaces/deriveaddressparams.html
similarity index 100%
rename from docs/interfaces/deriveaddressparams.html
rename to packages/nanocurrency/docs/interfaces/deriveaddressparams.html
diff --git a/docs/interfaces/hashblockparams.html b/packages/nanocurrency/docs/interfaces/hashblockparams.html
similarity index 100%
rename from docs/interfaces/hashblockparams.html
rename to packages/nanocurrency/docs/interfaces/hashblockparams.html
diff --git a/docs/interfaces/signblockparams.html b/packages/nanocurrency/docs/interfaces/signblockparams.html
similarity index 100%
rename from docs/interfaces/signblockparams.html
rename to packages/nanocurrency/docs/interfaces/signblockparams.html
diff --git a/docs/interfaces/validateworkparams.html b/packages/nanocurrency/docs/interfaces/validateworkparams.html
similarity index 100%
rename from docs/interfaces/validateworkparams.html
rename to packages/nanocurrency/docs/interfaces/validateworkparams.html
diff --git a/docs/interfaces/verifyblockparams.html b/packages/nanocurrency/docs/interfaces/verifyblockparams.html
similarity index 100%
rename from docs/interfaces/verifyblockparams.html
rename to packages/nanocurrency/docs/interfaces/verifyblockparams.html
diff --git a/examples/pow-benchmark/index.html b/packages/nanocurrency/examples/pow-benchmark/index.html
similarity index 93%
rename from examples/pow-benchmark/index.html
rename to packages/nanocurrency/examples/pow-benchmark/index.html
index cf75f29..45a3543 100644
--- a/examples/pow-benchmark/index.html
+++ b/packages/nanocurrency/examples/pow-benchmark/index.html
@@ -5,14 +5,12 @@
 
   
     

-    
+