From 8edeae1af0d1a6232090fa2cbab3c3456b5cbfe5 Mon Sep 17 00:00:00 2001 From: Franklin Waller Date: Wed, 18 Dec 2019 11:47:01 +0100 Subject: [PATCH] fix(browser): Fix issue where browsers where unable to boot --- electron/package-lock.json | 43 ++++++++++++++++++++++ electron/package.json | 3 +- package-lock.json | 27 ++++++++++++++ package.json | 3 +- src/js/pages/RegisterPage/RegisterPage.tsx | 2 +- src/js/services/TerminalService.ts | 13 ++++++- webpack.config.js | 6 +++ www/index.html | 6 ++- 8 files changed, 97 insertions(+), 6 deletions(-) diff --git a/electron/package-lock.json b/electron/package-lock.json index 59e14aa..c9ff4c0 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -251,6 +251,12 @@ "tweetnacl": "^0.14.3" } }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -854,6 +860,12 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1396,6 +1408,28 @@ "strip-bom": "^2.0.0" } }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -2449,6 +2483,15 @@ } } }, + "worker-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-3.2.0.tgz", + "integrity": "sha512-W5nRkw7+HlbsEt3qRP6MczwDDISjiRj2GYt9+bpe8A2La00TmJdwzG5bpdMXhRt1qcWmwAvl1TiKaHRa+XDS9Q==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", diff --git a/electron/package.json b/electron/package.json index 00626d8..b618909 100644 --- a/electron/package.json +++ b/electron/package.json @@ -24,7 +24,8 @@ }, "devDependencies": { "cross-env": "^6.0.3", - "electron": "^4.0.0" + "electron": "^4.0.0", + "worker-plugin": "^3.2.0" }, "keywords": [ "capacitor", diff --git a/package-lock.json b/package-lock.json index 64f3617..7aee3bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3145,6 +3145,9 @@ "@wasmer/wasi": "^0.5.0", "@wasmer/wasm-transformer": "^0.5.0", "@wasmer/wasmfs": "^0.5.0", + "asyncify-wasm": "^1.0.0", + "binaryen": "^89.0.0", + "comlink": "^4.2.0", "ethers": "^4.0.40", "keccak": "^2.1.0", "memfs": "^3.0.1" @@ -3190,6 +3193,16 @@ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" }, + "asyncify-wasm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asyncify-wasm/-/asyncify-wasm-1.0.0.tgz", + "integrity": "sha512-BUV42UZW5q58aaWUj0KSmhfbPFZcTTRRW6nsJ7IAm3NSFymMZkVPeC8X7nmctHjoBdLcCLKl5U8ZLcSF+or2+Q==" + }, + "binaryen": { + "version": "89.0.0", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-89.0.0.tgz", + "integrity": "sha512-yvTTdiCzWUQb3NHcdpiyhQOTUpTw8l+YcjvDQ1+R4e2jr3VQspMScoQitOTPC6mftXkEP67x5S14kCApNX/X1Q==" + }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -3223,6 +3236,11 @@ "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz", "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=" }, + "comlink": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.2.0.tgz", + "integrity": "sha512-33hF3yYzZicIWLREuvluTGSZkbAXYwRmrA9IYQo0/P+0O45qgvzR0FHX4tRZztObFMTs/RhnN0G0UBNDAZSiCg==" + }, "elliptic": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", @@ -21830,6 +21848,15 @@ "errno": "~0.1.7" } }, + "worker-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-3.2.0.tgz", + "integrity": "sha512-W5nRkw7+HlbsEt3qRP6MczwDDISjiRj2GYt9+bpe8A2La00TmJdwzG5bpdMXhRt1qcWmwAvl1TiKaHRa+XDS9Q==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", diff --git a/package.json b/package.json index 8e37a0c..c900c75 100644 --- a/package.json +++ b/package.json @@ -101,6 +101,7 @@ "node-sass": "^4.13.0", "standard-version": "^7.0.1", "typescript": "^3.7.3", - "url-loader": "^2.2.0" + "url-loader": "^2.2.0", + "worker-plugin": "^3.2.0" } } diff --git a/src/js/pages/RegisterPage/RegisterPage.tsx b/src/js/pages/RegisterPage/RegisterPage.tsx index c347f53..00b6ec9 100644 --- a/src/js/pages/RegisterPage/RegisterPage.tsx +++ b/src/js/pages/RegisterPage/RegisterPage.tsx @@ -20,7 +20,7 @@ export default function RegisterPage() { ...values, [name]: event.target.value, }); - } + }; } function createAccount() { diff --git a/src/js/services/TerminalService.ts b/src/js/services/TerminalService.ts index e8b90dc..91af090 100644 --- a/src/js/services/TerminalService.ts +++ b/src/js/services/TerminalService.ts @@ -19,7 +19,7 @@ export default class TerminalService { this.currentPath = currentPath; } - async handleCommand(commandName: string, args: string[], envEntriest: any[]) { + async handleCommand(commandName: string, args: string[], envEntriest: any) { if (commandName.endsWith('.wasm')) { return this.fs.readFile(commandName); } @@ -43,7 +43,16 @@ export default class TerminalService { }; } + const kernel = InstanceBag.get('kernel'); const wasmBinary = await fetchCommandFromWAPM(commandName, [], [['PATH', '/']]); - return lowerI64Imports(wasmBinary); + const preparedBin = await kernel.vm.prepareBin(wasmBinary); + + return preparedBin; + // args.unshift(commandName); + // const vmOutput = await kernel.spawnProcess(preparedBin, args, { + // env: envEntriest, + // }); + + // return () => vmOutput; } } diff --git a/webpack.config.js b/webpack.config.js index 7235287..dab9f3d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,4 +1,5 @@ const path = require('path'); +const WorkerPlugin = require('worker-plugin'); const exclude = '/node_modules'; @@ -16,6 +17,11 @@ module.exports = { filename: '[name].js', publicPath: 'build/', }, + plugins: [ + new WorkerPlugin({ + globalObject: 'self', + }), + ], module: { rules: [ { diff --git a/www/index.html b/www/index.html index 458c457..5c9ea62 100644 --- a/www/index.html +++ b/www/index.html @@ -18,9 +18,13 @@