From e2d07266081103d9863e103ea5d3c04a69713b3c Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Mon, 2 Nov 2020 18:34:00 +0100 Subject: [PATCH] Split js/wasm (#130) * Split js/wasm * require --- jest.config.js | 2 +- jest.resolver.js | 10 ---------- packages/wasm-crypto/Cargo.toml | 2 +- packages/wasm-crypto/package.json | 2 +- packages/wasm-crypto/src/{js => }/index.d.ts | 0 packages/wasm-crypto/src/index.js | 6 ++++++ packages/wasm-crypto/src/js/bridge.js | 2 +- packages/wasm-crypto/src/js/index.js | 4 ++-- packages/wasm-crypto/src/lib.rs | 7 +++++++ packages/wasm-crypto/src/{ => rs}/bip39.rs | 0 packages/wasm-crypto/src/{ => rs}/ed25519.rs | 0 packages/wasm-crypto/src/{ => rs}/hashing.rs | 0 packages/wasm-crypto/src/{ => rs}/sr25519.rs | 0 packages/wasm-crypto/src/wasm/asm.js | 6 ++++++ packages/wasm-crypto/src/wasm/bytes.js | 6 ++++++ .../src/{js/wasm_asm_stub.js => wasm/stub.js} | 0 packages/wasm-crypto/test/asm.js | 4 ++-- scripts/build-package.sh | 19 +++++++++++-------- scripts/build.sh | 2 +- scripts/pack-wasm-base.js | 2 +- tsconfig.json | 2 +- 21 files changed, 47 insertions(+), 29 deletions(-) delete mode 100644 jest.resolver.js rename packages/wasm-crypto/src/{js => }/index.d.ts (100%) create mode 100644 packages/wasm-crypto/src/index.js rename packages/wasm-crypto/src/{ => rs}/bip39.rs (100%) rename packages/wasm-crypto/src/{ => rs}/ed25519.rs (100%) rename packages/wasm-crypto/src/{ => rs}/hashing.rs (100%) rename packages/wasm-crypto/src/{ => rs}/sr25519.rs (100%) create mode 100644 packages/wasm-crypto/src/wasm/asm.js create mode 100644 packages/wasm-crypto/src/wasm/bytes.js rename packages/wasm-crypto/src/{js/wasm_asm_stub.js => wasm/stub.js} (100%) diff --git a/jest.config.js b/jest.config.js index a1a7d310..e4334d93 100644 --- a/jest.config.js +++ b/jest.config.js @@ -10,5 +10,5 @@ module.exports = Object.assign({}, config, { modulePathIgnorePatterns: [ '/packages/wasm-schnorrkel/build' ], - resolver: './jest.resolver.js' + resolver: '@polkadot/dev/config/jest-resolver' }); diff --git a/jest.resolver.js b/jest.resolver.js deleted file mode 100644 index 66ddc8cf..00000000 --- a/jest.resolver.js +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -const path = require('path'); - -module.exports = function resolver (file, config) { - return file.includes('package.json') - ? path.join(config.basedir.replace('/src', '/'), file) - : config.defaultResolver(file, config); -}; diff --git a/packages/wasm-crypto/Cargo.toml b/packages/wasm-crypto/Cargo.toml index f62b5e15..4a65790c 100644 --- a/packages/wasm-crypto/Cargo.toml +++ b/packages/wasm-crypto/Cargo.toml @@ -3,7 +3,7 @@ [package] authors = ["Jaco Greeff "] -description = "WASM bindings to Rust crypto libaries." +description = "WASM bindings to Rust crypto libraries." edition = "2018" license = "Apache-2.0" name = "wasm" diff --git a/packages/wasm-crypto/package.json b/packages/wasm-crypto/package.json index 30e6f477..e11a7fcf 100644 --- a/packages/wasm-crypto/package.json +++ b/packages/wasm-crypto/package.json @@ -3,7 +3,7 @@ "version": "1.5.0-beta.15", "author": "Jaco Greeff ", "react-native": { - "./wasm_asm_stub.js": "./wasm_asm.js" + "./wasm/stub.js": "./wasm/asm.js" }, "main": "index.js", "types": "index.d.ts", diff --git a/packages/wasm-crypto/src/js/index.d.ts b/packages/wasm-crypto/src/index.d.ts similarity index 100% rename from packages/wasm-crypto/src/js/index.d.ts rename to packages/wasm-crypto/src/index.d.ts diff --git a/packages/wasm-crypto/src/index.js b/packages/wasm-crypto/src/index.js new file mode 100644 index 00000000..ec612e93 --- /dev/null +++ b/packages/wasm-crypto/src/index.js @@ -0,0 +1,6 @@ +// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +const lib = require('./js'); + +module.exports = lib; diff --git a/packages/wasm-crypto/src/js/bridge.js b/packages/wasm-crypto/src/js/bridge.js index e504c5ff..caa951ab 100644 --- a/packages/wasm-crypto/src/js/bridge.js +++ b/packages/wasm-crypto/src/js/bridge.js @@ -3,7 +3,7 @@ const { assert, stringToU8a, u8aToString } = require('@polkadot/util'); -const pkg = require('./package.json'); +const pkg = require('../package.json'); let wasm; let cachegetInt32 = null; diff --git a/packages/wasm-crypto/src/js/index.js b/packages/wasm-crypto/src/js/index.js index ff326b1d..a08af1fb 100644 --- a/packages/wasm-crypto/src/js/index.js +++ b/packages/wasm-crypto/src/js/index.js @@ -1,10 +1,10 @@ // Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors // SPDX-License-Identifier: Apache-2.0 +const wasmBytes = require('../wasm/bytes'); +const asmFallback = require('../wasm/stub'); const { allocString, allocU8a, getWasm, initWasm, resultString, resultU8a, withWasm } = require('./bridge'); const imports = require('./imports'); -const asmFallback = require('./wasm_asm_stub'); -const wasmBytes = require('./wasm_wasm'); const wasmPromise = initWasm(wasmBytes, asmFallback, imports).catch(() => null); diff --git a/packages/wasm-crypto/src/lib.rs b/packages/wasm-crypto/src/lib.rs index ce81a27e..c9bfc427 100644 --- a/packages/wasm-crypto/src/lib.rs +++ b/packages/wasm-crypto/src/lib.rs @@ -5,7 +5,14 @@ #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; +#[path = "rs/bip39.rs"] pub mod bip39; + +#[path = "rs/ed25519.rs"] pub mod ed25519; + +#[path = "rs/hashing.rs"] pub mod hashing; + +#[path = "rs/sr25519.rs"] pub mod sr25519; diff --git a/packages/wasm-crypto/src/bip39.rs b/packages/wasm-crypto/src/rs/bip39.rs similarity index 100% rename from packages/wasm-crypto/src/bip39.rs rename to packages/wasm-crypto/src/rs/bip39.rs diff --git a/packages/wasm-crypto/src/ed25519.rs b/packages/wasm-crypto/src/rs/ed25519.rs similarity index 100% rename from packages/wasm-crypto/src/ed25519.rs rename to packages/wasm-crypto/src/rs/ed25519.rs diff --git a/packages/wasm-crypto/src/hashing.rs b/packages/wasm-crypto/src/rs/hashing.rs similarity index 100% rename from packages/wasm-crypto/src/hashing.rs rename to packages/wasm-crypto/src/rs/hashing.rs diff --git a/packages/wasm-crypto/src/sr25519.rs b/packages/wasm-crypto/src/rs/sr25519.rs similarity index 100% rename from packages/wasm-crypto/src/sr25519.rs rename to packages/wasm-crypto/src/rs/sr25519.rs diff --git a/packages/wasm-crypto/src/wasm/asm.js b/packages/wasm-crypto/src/wasm/asm.js new file mode 100644 index 00000000..08ff71d8 --- /dev/null +++ b/packages/wasm-crypto/src/wasm/asm.js @@ -0,0 +1,6 @@ +// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +// Stub replaced at build time + +module.exports = {}; diff --git a/packages/wasm-crypto/src/wasm/bytes.js b/packages/wasm-crypto/src/wasm/bytes.js new file mode 100644 index 00000000..63fe7da3 --- /dev/null +++ b/packages/wasm-crypto/src/wasm/bytes.js @@ -0,0 +1,6 @@ +// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +// Stub replaced at build time + +module.exports = Buffer.from(); diff --git a/packages/wasm-crypto/src/js/wasm_asm_stub.js b/packages/wasm-crypto/src/wasm/stub.js similarity index 100% rename from packages/wasm-crypto/src/js/wasm_asm_stub.js rename to packages/wasm-crypto/src/wasm/stub.js diff --git a/packages/wasm-crypto/test/asm.js b/packages/wasm-crypto/test/asm.js index 5e248ba4..d16d5c50 100644 --- a/packages/wasm-crypto/test/asm.js +++ b/packages/wasm-crypto/test/asm.js @@ -4,8 +4,8 @@ global.WebAssembly = null; require('override-require')( - (request) => request === './wasm_asm_stub', - () => require('../build/wasm_asm') + (request) => request.endsWith('wasm/stub'), + () => require('../build/wasm/asm') ); const { runUnassisted } = require('./all'); diff --git a/scripts/build-package.sh b/scripts/build-package.sh index 3311abf1..03e6bc40 100755 --- a/scripts/build-package.sh +++ b/scripts/build-package.sh @@ -7,14 +7,21 @@ set -e WSM=pkg/wasm_bg.wasm OPT=pkg/wasm_opt.wasm -ASM=build/wasm_asm.js +ASM=build/wasm/asm.js echo "*** Building package" # cleanup old echo "*** Cleaning old builds" rm -rf ./build ./pkg -mkdir -p build +mkdir -p build/js build/wasm + +# copy our package interfaces +echo "*** Copying package sources" +cp package.json build/ +cp src/index.d.ts src/index.js build/ +cp src/js/* build/js/ +cp src/wasm/* build/wasm/ # build new via wasm-pack echo "*** Building WASM output" @@ -34,12 +41,8 @@ echo "*** Building asm.js version" # cleanup the generated asm, converting to cjs sed -i -e '/import {/d' $ASM -echo "const imports = require('./imports'); +echo "const imports = require('../js/imports'); $(cat $ASM)" > $ASM sed -i -e 's/{abort.*},memasmFunc/imports, memasmFunc/g' $ASM sed -i -e 's/export var /module\.exports\./g' $ASM - -# copy our package interfaces -echo "*** Copying package sources" -cp package.json build/ -cp src/js/* build/ +rm -rf build/wasm/*-e diff --git a/scripts/build.sh b/scripts/build.sh index 704f2f80..5cb77454 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -12,6 +12,6 @@ cd packages/wasm-crypto ../../scripts/test-package.sh rm -rf build/*-e build/package.json build/README.md -ls -al build +ls -alR build cd ../.. diff --git a/scripts/pack-wasm-base.js b/scripts/pack-wasm-base.js index 8bec352d..18a9b591 100755 --- a/scripts/pack-wasm-base.js +++ b/scripts/pack-wasm-base.js @@ -5,7 +5,7 @@ const fs = require('fs'); const buffer = fs.readFileSync('./pkg/wasm_opt.wasm'); -fs.writeFileSync('./build/wasm_wasm.js', `// Generated as part of the build, do not edit +fs.writeFileSync('./build/wasm/bytes.js', `// Generated as part of the build, do not edit module.exports = Buffer.from('${buffer.toString('base64')}', 'base64'); `); diff --git a/tsconfig.json b/tsconfig.json index c37de3c9..2594b5d7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "compilerOptions": { "baseUrl": ".", "paths": { - "@polkadot/wasm-schnorrkel": [ "packages/wasm-schnorrkel/src" ] + "@polkadot/wasm-crypto": [ "packages/wasm-crypto/src" ] }, "skipLibCheck": true, "typeRoots": [