diff --git a/Makefile b/Makefile index 6be3f9f495..a2433e7969 100644 --- a/Makefile +++ b/Makefile @@ -103,6 +103,7 @@ sdk-wasm: sdk-wasm-build sdk-wasm-test sdk-wasm-lint sdk-wasm-build: $(MAKE) -C nym-browser-extension/storage wasm-pack $(MAKE) -C wasm/client + $(MAKE) -C wasm/credentials $(MAKE) -C wasm/node-tester $(MAKE) -C wasm/mix-fetch #$(MAKE) -C wasm/full-nym-wasm diff --git a/sdk/typescript/packages/sdk/package.json b/sdk/typescript/packages/sdk/package.json index 0a416329f4..1fd1ad2e13 100644 --- a/sdk/typescript/packages/sdk/package.json +++ b/sdk/typescript/packages/sdk/package.json @@ -13,7 +13,8 @@ "scripts": { "build": "scripts/build-prod.sh", "build:dev": "scripts/build.sh", - "build:dev:esm": "scripts/build-dev-esm.sh", + "build:dev:esm": "SDK_DEV_MODE=true scripts/build-dev-esm.sh", + "build:dev:esm:no-inline": "scripts/build-dev-esm.sh", "build:worker": "rollup -c rollup-worker.config.mjs", "clean": "rimraf dist", "docs:dev": "run-p docs:watch docs:serve ", @@ -32,6 +33,7 @@ }, "dependencies": { "@nymproject/nym-client-wasm": ">=1.2.4-rc.2 || ^1", + "@nymproject/nym-credential-client-wasm": ">=1.2.0-rc.9 || ^1", "comlink": "^4.3.1" }, "devDependencies": { diff --git a/sdk/typescript/packages/sdk/rollup-coconut-worker-full-fat.config.mjs b/sdk/typescript/packages/sdk/rollup-coconut-worker-full-fat.config.mjs new file mode 100644 index 0000000000..d6c91f2652 --- /dev/null +++ b/sdk/typescript/packages/sdk/rollup-coconut-worker-full-fat.config.mjs @@ -0,0 +1,7 @@ +import { getConfig } from './rollup/worker.mjs'; + +export default { + ...getConfig('src/coconut/worker.ts', 'nym_credential_client_wasm_bg.wasm'), + inlineWasm: true, + format: 'cjs', +}; diff --git a/sdk/typescript/packages/sdk/rollup-coconut-worker.config.mjs b/sdk/typescript/packages/sdk/rollup-coconut-worker.config.mjs index 92d400b6a1..ed412d145a 100644 --- a/sdk/typescript/packages/sdk/rollup-coconut-worker.config.mjs +++ b/sdk/typescript/packages/sdk/rollup-coconut-worker.config.mjs @@ -1,26 +1,7 @@ -import typescript from '@rollup/plugin-typescript'; -import resolve from '@rollup/plugin-node-resolve'; -import { wasm } from '@rollup/plugin-wasm'; -import replace from '@rollup/plugin-replace'; - -const extensions = ['.js', '.jsx', '.ts', '.tsx']; +import { getConfig } from './rollup/worker.mjs'; export default { - input: 'src/coconut/worker.ts', - output: { - dir: 'dist', - format: 'cjs', - }, - plugins: [ - resolve({ extensions }), - // this is some nasty monkey patching that removes the WASM URL (because it is handled by the `wasm` plugin) - replace({ - values: { "input = new URL('nym_credential_client_wasm_bg.wasm', import.meta.url);": 'input = undefined;' }, - delimiters: ['', ''], - preventAssignment: true, - }), - // force the wasm plugin to embed the wasm bundle - this means no downstream bundlers have to worry about handling it - wasm({ maxFileSize: 10000000, targetEnv: 'browser' }), - typescript({ compilerOptions: { declaration: false, target: 'es5' } }), - ], + ...getConfig('src/coconut/worker.ts', 'nym_credential_client_wasm_bg.wasm', { + inlineWasm: process.env.SDK_DEV_MODE === 'true', + }), }; diff --git a/sdk/typescript/packages/sdk/rollup-esm.config.mjs b/sdk/typescript/packages/sdk/rollup-esm.config.mjs index fa8d42b2ea..dbe9d64e98 100644 --- a/sdk/typescript/packages/sdk/rollup-esm.config.mjs +++ b/sdk/typescript/packages/sdk/rollup-esm.config.mjs @@ -2,6 +2,6 @@ import { getConfig } from './rollup/esm.mjs'; export default { ...getConfig({ - inline: false, + inline: process.env.SDK_DEV_MODE === 'true', }), }; diff --git a/sdk/typescript/packages/sdk/rollup-worker-full-fat.config.mjs b/sdk/typescript/packages/sdk/rollup-worker-full-fat.config.mjs new file mode 100644 index 0000000000..62a71b1e17 --- /dev/null +++ b/sdk/typescript/packages/sdk/rollup-worker-full-fat.config.mjs @@ -0,0 +1,8 @@ +import { getConfig } from './rollup/worker.mjs'; + +export default { + ...getConfig('src/mixnet/wasm/worker.ts', 'nym_client_wasm_bg.wasm', { + inlineWasm: true, + format: 'cjs', + }), +}; diff --git a/sdk/typescript/packages/sdk/rollup-worker.config.mjs b/sdk/typescript/packages/sdk/rollup-worker.config.mjs index 61aab0b862..3df1f97278 100644 --- a/sdk/typescript/packages/sdk/rollup-worker.config.mjs +++ b/sdk/typescript/packages/sdk/rollup-worker.config.mjs @@ -1,26 +1,7 @@ -import typescript from '@rollup/plugin-typescript'; -import resolve from '@rollup/plugin-node-resolve'; -import { wasm } from '@rollup/plugin-wasm'; -import replace from '@rollup/plugin-replace'; - -const extensions = ['.js', '.jsx', '.ts', '.tsx']; +import { getConfig } from './rollup/worker.mjs'; export default { - input: 'src/mixnet/wasm/worker.ts', - output: { - dir: 'dist', - format: 'cjs', - }, - plugins: [ - resolve({ extensions }), - // this is some nasty monkey patching that removes the WASM URL (because it is handled by the `wasm` plugin) - replace({ - values: { "input = new URL('nym_client_wasm_bg.wasm', import.meta.url);": 'input = undefined;' }, - delimiters: ['', ''], - preventAssignment: true, - }), - // force the wasm plugin to embed the wasm bundle - this means no downstream bundlers have to worry about handling it - wasm({ maxFileSize: 10000000, targetEnv: 'browser' }), - typescript({ compilerOptions: { declaration: false, target: 'es5' } }), - ], + ...getConfig('src/mixnet/wasm/worker.ts', 'nym_client_wasm_bg.wasm', { + inlineWasm: process.env.SDK_DEV_MODE === 'true', + }), }; diff --git a/sdk/typescript/packages/sdk/rollup/worker.mjs b/sdk/typescript/packages/sdk/rollup/worker.mjs new file mode 100644 index 0000000000..e5c809e6b4 --- /dev/null +++ b/sdk/typescript/packages/sdk/rollup/worker.mjs @@ -0,0 +1,43 @@ +import typescript from '@rollup/plugin-typescript'; +import resolve from '@rollup/plugin-node-resolve'; +import { wasm } from '@rollup/plugin-wasm'; +import replace from '@rollup/plugin-replace'; + +const extensions = ['.js', '.jsx', '.ts', '.tsx']; + +/** + * Configure worker output + * + * @param opts + * `format`: `es` or `cjs`, + * `inlineWasm`: true or false, + * `tsTarget`: `es5` or `es6` + */ +export const getConfig = (input, wasmFilename, opts) => ({ + input, + output: { + dir: 'dist', + format: opts?.format || 'es', + }, + plugins: [ + resolve({ extensions }), + // this is some nasty monkey patching that removes the WASM URL (because it is handled by the `wasm` plugin) + replace({ + values: { [`input = new URL('${wasmFilename}', import.meta.url);`]: 'input = undefined;' }, + delimiters: ['', ''], + preventAssignment: true, + }), + opts?.inlineWasm === true + ? wasm({ maxFileSize: 10_000_000, targetEnv: 'browser' }) // force the wasm plugin to embed the wasm bundle - this means no downstream bundlers have to worry about handling it + : wasm({ + targetEnv: 'browser', + fileName: '[name].wasm', + }), + typescript({ + compilerOptions: { + declaration: false, + target: opts?.tsTarget || 'es6', + }, + }), + ], +}); diff --git a/sdk/typescript/packages/sdk/scripts/build-dev-esm.sh b/sdk/typescript/packages/sdk/scripts/build-dev-esm.sh index c545f639d1..04375a450e 100755 --- a/sdk/typescript/packages/sdk/scripts/build-dev-esm.sh +++ b/sdk/typescript/packages/sdk/scripts/build-dev-esm.sh @@ -27,6 +27,7 @@ rm dist/worker.js || true rollup -c rollup-coconut-worker.config.mjs # move it next to the Typescript `src/index.ts` so it can be inlined by rollup +mkdir dist/esm || true cp dist/worker.js src/coconut/worker.js || true rm dist/worker.js || true