Switch to marine version of AquaVM (#3)

This commit is contained in:
Valery Antopol 2022-02-18 19:48:33 +03:00 committed by GitHub
parent 757a03cf7f
commit fb3c5fc81b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 1544 additions and 122 deletions

View File

@ -9,7 +9,7 @@ jobs:
strategy:
matrix:
node-version: [15.x, 16.x]
node-version: [16.x]
steps:
- uses: actions/checkout@v2

View File

@ -9,7 +9,7 @@ jobs:
strategy:
matrix:
node-version: [15.x, 16.x]
node-version: [16.x]
steps:
- uses: actions/checkout@v2

View File

@ -1,5 +1,7 @@
#!/bin/sh
set -e
# set current working directory to script directory to run script from everywhere
cd "$(dirname "$0")"

View File

@ -13,6 +13,9 @@
"browser-or-node": "^2.0.0",
"threads": "^1.7.0"
},
"bin": {
"copy-avm-runner": "dist/copyRunnerScript.js"
},
"devDependencies": {
"@types/node": "^16.11.10",
"typescript": "^4.0.0"

View File

@ -21,7 +21,9 @@ import { RunnerScriptInterface, wasmLoadingMethod } from './types';
export { wasmLoadingMethod } from './types';
const defaultAvmFileName = 'avm.wasm';
const defaultMarineFileName = 'marine-js.wasm';
const avmPackageName = '@fluencelabs/avm';
const marinePackageName = '@fluencelabs/marine-js';
const runnerScriptNodePath = './runnerScript.node.js';
const runnerScriptWebPath = './runnerScript.web.js';
@ -41,7 +43,10 @@ export class AvmRunnerBackground implements AvmRunner {
method = this._loadingMethod || {
method: 'fetch-from-url',
baseUrl: window.location.origin,
filePath: defaultAvmFileName,
filePaths: {
avm: defaultAvmFileName,
marine: defaultMarineFileName,
},
};
workerPath = runnerScriptWebPath;
}
@ -54,19 +59,23 @@ export class AvmRunnerBackground implements AvmRunner {
try {
// webpack will complain about missing dependencies for web target
// to fix this we have to use eval('require')
const path = eval('require')('path');
const fluencePath = eval('require').resolve(avmPackageName);
const filePath = path.join(path.dirname(fluencePath), defaultAvmFileName);
const require = eval('require');
const path = require('path');
const avmPackagePath = require.resolve(avmPackageName);
const avmFilePath = path.join(path.dirname(avmPackagePath), defaultAvmFileName);
const marinePackagePath = require.resolve(marinePackageName);
const marineFilePath = path.join(path.dirname(marinePackagePath), defaultMarineFileName);
method = {
method: 'read-from-fs',
filePath: filePath,
filePaths: {
avm: avmFilePath,
marine: marineFilePath,
},
};
} catch (e: any) {
throw new Error(
'Failed to load avm.wasm. Did you forget to install @fluencelabs/avm? Original error: ' +
e.toString(),
);
throw new Error('Failed to load wasm file(s). Original error: ' + e.toString());
}
}
} else {

View File

@ -16,15 +16,20 @@
import { CallResultsArray, InterpreterResult, LogLevel } from '@fluencelabs/avm-runner-interface';
interface FilePaths {
avm: string;
marine: string;
}
export type wasmLoadingMethod =
| {
method: 'fetch-from-url';
baseUrl: string;
filePath: string;
filePaths: FilePaths;
}
| {
method: 'read-from-fs';
filePath: string;
filePaths: FilePaths;
};
export type RunnerScriptInterface = {

View File

@ -8,8 +8,10 @@
"name": "runner-script",
"version": "1.0.0",
"dependencies": {
"@fluencelabs/avm": "0.19.6",
"@fluencelabs/avm-runner-interface": "^0.2.0",
"@fluencelabs/marine-js": "^0.1.0-web-runtime-experiments.0",
"@wasmer/wasi": "^0.12.0",
"@wasmer/wasmfs": "^0.12.0",
"browser-or-node": "^2.0.0",
"threads": "^1.7.0"
},
@ -22,6 +24,24 @@
"webpack-cli": "^4.9.1"
}
},
"../../marine/web-runtime/npm-package": {
"name": "@fluencelabs/marine-js",
"version": "0.0.3",
"extraneous": true,
"license": "Apache 2.0",
"bin": {
"copy-marine": "dist/copyMarine.js"
},
"devDependencies": {
"@fluencelabs/avm": "0.20.0-marine-web-adapted.1",
"@types/jest": "^27.4.0",
"@types/node": "^14.0.0",
"@wasmer/wasi": "^0.12.0",
"@wasmer/wasmfs": "^0.12.0",
"jest": "^27.2.4",
"typescript": "^4.0.0"
}
},
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz",
@ -31,25 +51,51 @@
"node": ">=10.0.0"
}
},
"node_modules/@fluencelabs/avm": {
"version": "0.19.6",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.19.6.tgz",
"integrity": "sha512-T6UQsIuGVltf13Wc3bFmuCYmQzu/00Y4lPS7atBauQ2R4+BqhRg1dc5reSZ+MbAW3Vy+NmJY1EEYOFRpLCGBwg==",
"bin": {
"copy-avm": "dist/copyAvm.js"
}
},
"node_modules/@fluencelabs/avm-runner-interface": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-runner-interface/-/avm-runner-interface-0.2.0.tgz",
"integrity": "sha512-Y41pL+UwZZVdormxju8cJQsNRp6tdER0VqJ9Kg9gH2wd1KJAaYTJkyVbn8NB7fEFRUbqfbb1BXHi9wWBYOgGYQ=="
},
"node_modules/@fluencelabs/marine-js": {
"version": "0.1.0-web-runtime-experiments.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.1.0-web-runtime-experiments.0.tgz",
"integrity": "sha512-UQxTtACJLNJcTaD10LQ2hIA1x5/yN6S4XT0Kn8wCYVz/QbD/itb47x8+wA582HNKEbJpHuj0A098UYrt6+WpQA==",
"bin": {
"copy-marine": "dist/copyMarine.js"
}
},
"node_modules/@types/node": {
"version": "17.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz",
"integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==",
"dev": true
},
"node_modules/@wasmer/wasi": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@wasmer/wasi/-/wasi-0.12.0.tgz",
"integrity": "sha512-FJhLZKAfLWm/yjQI7eCRHNbA8ezmb7LSpUYFkHruZXs2mXk2+DaQtSElEtOoNrVQ4vApTyVaAd5/b7uEu8w6wQ==",
"dependencies": {
"browser-process-hrtime": "^1.0.0",
"buffer-es6": "^4.9.3",
"path-browserify": "^1.0.0",
"randomfill": "^1.0.4"
}
},
"node_modules/@wasmer/wasi/node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
},
"node_modules/@wasmer/wasmfs": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@wasmer/wasmfs/-/wasmfs-0.12.0.tgz",
"integrity": "sha512-m1ftchyQ1DfSenm5XbbdGIpb6KJHH5z0gODo3IZr6lATkj4WXfX/UeBTZ0aG9YVShBp+kHLdUHvOkqjy6p/GWw==",
"dependencies": {
"memfs": "3.0.4",
"pako": "^1.0.11",
"tar-stream": "^2.1.0"
}
},
"node_modules/@webassemblyjs/ast": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
@ -551,7 +597,6 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true,
"funding": [
{
"type": "github",
@ -596,6 +641,52 @@
"file-uri-to-path": "1.0.0"
}
},
"node_modules/bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"dependencies": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
}
},
"node_modules/bl/node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"node_modules/bl/node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@ -641,6 +732,11 @@
"resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.0.0.tgz",
"integrity": "sha512-3Lrks/Okgof+/cRguUNG+qRXSeq79SO3hY4QrXJayJofwJwHiGC0qi99uDjsfTwULUFSr1OGVsBkdIkygKjTUA=="
},
"node_modules/browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
},
"node_modules/browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@ -739,6 +835,11 @@
"isarray": "^1.0.0"
}
},
"node_modules/buffer-es6": {
"version": "4.9.3",
"resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz",
"integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ="
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@ -1274,7 +1375,6 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"dependencies": {
"once": "^1.4.0"
}
@ -1595,6 +1695,11 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"node_modules/fast-extend": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/fast-extend/-/fast-extend-1.0.2.tgz",
"integrity": "sha512-XXA9RmlPatkFKUzqVZAFth18R4Wo+Xug/S+C7YlYA3xrXwfPlW3dqNwOb4hvQo7wZJ2cNDYhrYuPzVOfHy5/uQ=="
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@ -1764,6 +1869,16 @@
"readable-stream": "^2.0.0"
}
},
"node_modules/fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"node_modules/fs-monkey": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-0.3.3.tgz",
"integrity": "sha512-FNUvuTAJ3CqCQb5ELn+qCbGR/Zllhf2HtwsdAtBi59s1WeCjKMT81fHcSu7dwIskqGVK+MmOrb7VOBlq3/SItw=="
},
"node_modules/fs-write-stream-atomic": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@ -2080,7 +2195,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"dev": true,
"funding": [
{
"type": "github",
@ -2146,8 +2260,7 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/internal-slot": {
"version": "1.0.3",
@ -2722,6 +2835,15 @@
"safe-buffer": "^5.1.2"
}
},
"node_modules/memfs": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.0.4.tgz",
"integrity": "sha512-OcZEzwX9E5AoY8SXjuAvw0DbIAYwUzV/I236I8Pqvrlv7sL/Y0E9aRCon05DhaV8pg1b32uxj76RgW0s5xjHBA==",
"dependencies": {
"fast-extend": "1.0.2",
"fs-monkey": "0.3.3"
}
},
"node_modules/memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
@ -3169,7 +3291,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"dependencies": {
"wrappy": "1"
}
@ -3234,8 +3355,7 @@
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"node_modules/parallel-transform": {
"version": "1.2.0",
@ -3481,7 +3601,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"dependencies": {
"safe-buffer": "^5.1.0"
}
@ -3490,7 +3609,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"dependencies": {
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
@ -3699,7 +3817,6 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true,
"funding": [
{
"type": "github",
@ -4132,7 +4249,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"dependencies": {
"safe-buffer": "~5.2.0"
}
@ -4181,6 +4297,34 @@
"node": ">=6"
}
},
"node_modules/tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"dependencies": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/tar-stream/node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/terser": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
@ -4650,8 +4794,7 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/vm-browserify": {
"version": "1.1.2",
@ -5363,8 +5506,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"node_modules/xtend": {
"version": "4.0.2",
@ -5395,22 +5537,50 @@
"integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==",
"dev": true
},
"@fluencelabs/avm": {
"version": "0.19.6",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.19.6.tgz",
"integrity": "sha512-T6UQsIuGVltf13Wc3bFmuCYmQzu/00Y4lPS7atBauQ2R4+BqhRg1dc5reSZ+MbAW3Vy+NmJY1EEYOFRpLCGBwg=="
},
"@fluencelabs/avm-runner-interface": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm-runner-interface/-/avm-runner-interface-0.2.0.tgz",
"integrity": "sha512-Y41pL+UwZZVdormxju8cJQsNRp6tdER0VqJ9Kg9gH2wd1KJAaYTJkyVbn8NB7fEFRUbqfbb1BXHi9wWBYOgGYQ=="
},
"@fluencelabs/marine-js": {
"version": "0.1.0-web-runtime-experiments.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.1.0-web-runtime-experiments.0.tgz",
"integrity": "sha512-UQxTtACJLNJcTaD10LQ2hIA1x5/yN6S4XT0Kn8wCYVz/QbD/itb47x8+wA582HNKEbJpHuj0A098UYrt6+WpQA=="
},
"@types/node": {
"version": "17.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz",
"integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==",
"dev": true
},
"@wasmer/wasi": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@wasmer/wasi/-/wasi-0.12.0.tgz",
"integrity": "sha512-FJhLZKAfLWm/yjQI7eCRHNbA8ezmb7LSpUYFkHruZXs2mXk2+DaQtSElEtOoNrVQ4vApTyVaAd5/b7uEu8w6wQ==",
"requires": {
"browser-process-hrtime": "^1.0.0",
"buffer-es6": "^4.9.3",
"path-browserify": "^1.0.0",
"randomfill": "^1.0.4"
},
"dependencies": {
"path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
}
}
},
"@wasmer/wasmfs": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@wasmer/wasmfs/-/wasmfs-0.12.0.tgz",
"integrity": "sha512-m1ftchyQ1DfSenm5XbbdGIpb6KJHH5z0gODo3IZr6lATkj4WXfX/UeBTZ0aG9YVShBp+kHLdUHvOkqjy6p/GWw==",
"requires": {
"memfs": "3.0.4",
"pako": "^1.0.11",
"tar-stream": "^2.1.0"
}
},
"@webassemblyjs/ast": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
@ -5839,8 +6009,7 @@
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"big.js": {
"version": "5.2.2",
@ -5865,6 +6034,37 @@
"file-uri-to-path": "1.0.0"
}
},
"bl": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
},
"dependencies": {
"buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"requires": {
"base64-js": "^1.3.1",
"ieee754": "^1.1.13"
}
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@ -5907,6 +6107,11 @@
"resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.0.0.tgz",
"integrity": "sha512-3Lrks/Okgof+/cRguUNG+qRXSeq79SO3hY4QrXJayJofwJwHiGC0qi99uDjsfTwULUFSr1OGVsBkdIkygKjTUA=="
},
"browser-process-hrtime": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
},
"browserify-aes": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@ -6004,6 +6209,11 @@
"isarray": "^1.0.0"
}
},
"buffer-es6": {
"version": "4.9.3",
"resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz",
"integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ="
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@ -6475,7 +6685,6 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
@ -6732,6 +6941,11 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-extend": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/fast-extend/-/fast-extend-1.0.2.tgz",
"integrity": "sha512-XXA9RmlPatkFKUzqVZAFth18R4Wo+Xug/S+C7YlYA3xrXwfPlW3dqNwOb4hvQo7wZJ2cNDYhrYuPzVOfHy5/uQ=="
},
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@ -6873,6 +7087,16 @@
"readable-stream": "^2.0.0"
}
},
"fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-monkey": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-0.3.3.tgz",
"integrity": "sha512-FNUvuTAJ3CqCQb5ELn+qCbGR/Zllhf2HtwsdAtBi59s1WeCjKMT81fHcSu7dwIskqGVK+MmOrb7VOBlq3/SItw=="
},
"fs-write-stream-atomic": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@ -7115,8 +7339,7 @@
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"dev": true
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"iferr": {
"version": "0.1.5",
@ -7159,8 +7382,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"internal-slot": {
"version": "1.0.3",
@ -7572,6 +7794,15 @@
"safe-buffer": "^5.1.2"
}
},
"memfs": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.0.4.tgz",
"integrity": "sha512-OcZEzwX9E5AoY8SXjuAvw0DbIAYwUzV/I236I8Pqvrlv7sL/Y0E9aRCon05DhaV8pg1b32uxj76RgW0s5xjHBA==",
"requires": {
"fast-extend": "1.0.2",
"fs-monkey": "0.3.3"
}
},
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
@ -7951,7 +8182,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
@ -7998,8 +8228,7 @@
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"parallel-transform": {
"version": "1.2.0",
@ -8209,7 +8438,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"requires": {
"safe-buffer": "^5.1.0"
}
@ -8218,7 +8446,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
"dev": true,
"requires": {
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
@ -8393,8 +8620,7 @@
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safe-regex": {
"version": "1.1.0",
@ -8752,7 +8978,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
"safe-buffer": "~5.2.0"
}
@ -8789,6 +9014,30 @@
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
"dev": true
},
"tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"requires": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
},
"dependencies": {
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
}
}
},
"terser": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
@ -9170,8 +9419,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"vm-browserify": {
"version": "1.1.2",
@ -9739,8 +9987,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"xtend": {
"version": "4.0.2",

View File

@ -14,8 +14,10 @@
"webpack-cli": "^4.9.1"
},
"dependencies": {
"@fluencelabs/avm": "0.19.6",
"@fluencelabs/avm-runner-interface": "^0.2.0",
"@fluencelabs/marine-js": "0.1.0",
"@wasmer/wasi": "^0.12.0",
"@wasmer/wasmfs": "^0.12.0",
"browser-or-node": "^2.0.0",
"threads": "^1.7.0"
}

View File

@ -1,8 +1,23 @@
import { LogLevel, CallResultsArray, InterpreterResult } from '@fluencelabs/avm-runner-interface';
import { AirInterpreter } from '@fluencelabs/avm';
import { WASI } from '@wasmer/wasi';
import { WasmFs } from '@wasmer/wasmfs';
import bindings from '@wasmer/wasi/lib/bindings/browser';
import { LogLevel, CallResultsArray, InterpreterResult, CallRequest } from '@fluencelabs/avm-runner-interface';
import { isBrowser, isNode, isWebWorker } from 'browser-or-node';
import { expose } from 'threads';
import { wasmLoadingMethod, RunnerScriptInterface } from './types';
import { init } from '@fluencelabs/marine-js';
type LogImport = {
log_utf8_string: (level: any, target: any, offset: any, size: any) => void;
};
type ImportObject = {
host: LogImport;
};
type HostImportsConfig = {
exports: any;
};
const logFunction = (level: LogLevel, message: string) => {
switch (level) {
@ -22,51 +37,148 @@ const logFunction = (level: LogLevel, message: string) => {
}
};
let airInterpreter: AirInterpreter | 'not-set' | 'terminated' = 'not-set';
let cachegetUint8Memory0 = null;
function getUint8Memory0(wasm) {
if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
}
return cachegetUint8Memory0;
}
function getStringFromWasm0(wasm, ptr, len) {
return decoder.decode(getUint8Memory0(wasm).subarray(ptr, ptr + len));
}
/// Returns import object that describes host functions called by AIR interpreter
function newImportObject(cfg: HostImportsConfig): ImportObject {
return {
host: log_import(cfg),
};
}
function log_import(cfg: HostImportsConfig): LogImport {
return {
log_utf8_string: (level: any, target: any, offset: any, size: any) => {
let wasm = cfg.exports;
try {
let str = getStringFromWasm0(wasm, offset, size);
let levelStr: LogLevel;
switch (level) {
case 1:
levelStr = 'error';
break;
case 2:
levelStr = 'warn';
break;
case 3:
levelStr = 'info';
break;
case 4:
levelStr = 'debug';
break;
case 6:
levelStr = 'trace';
break;
default:
return;
}
logFunction(levelStr, str);
} finally {
}
},
};
}
type Awaited<T> = T extends PromiseLike<infer U> ? U : T;
let marineInstance: Awaited<ReturnType<typeof init>> | 'not-set' | 'terminated' = 'not-set';
const tryLoadFromUrl = async (baseUrl: string, url: string): Promise<WebAssembly.Module> => {
const fullUrl = baseUrl + '/' + url;
try {
return await WebAssembly.compileStreaming(fetch(fullUrl));
} catch (e) {
throw new Error(
`Failed to load ${fullUrl}. This usually means that the web server is not serving wasm files correctly. Original error: ${e.toString()}`,
);
}
};
const tryLoadFromFs = async (path: string): Promise<WebAssembly.Module> => {
try {
// webpack will complain about missing dependencies for web target
// to fix this we have to use eval('require')
const fs = eval('require')('fs');
const file = fs.readFileSync(path);
return await WebAssembly.compile(file);
} catch (e) {
throw new Error(`Failed to load ${path}. ${e.toString()}`);
}
};
const decoder = new TextDecoder();
const toExpose: RunnerScriptInterface = {
init: async (logLevel: LogLevel, loadMethod: wasmLoadingMethod) => {
let module: WebAssembly.Module;
let avmModule: WebAssembly.Module;
let marineModule: WebAssembly.Module;
if (isBrowser || isWebWorker) {
if (loadMethod.method !== 'fetch-from-url') {
throw new Error("Only 'fetch-from-url' is supported for browsers");
}
const url = loadMethod.baseUrl + '/' + loadMethod.filePath;
try {
module = await WebAssembly.compileStreaming(fetch(url));
} catch (e) {
throw new Error(
`Failed to load ${url}. This usually means that the web server is not serving avm file correctly. Original error: ${e.toString()}`,
);
}
avmModule = await tryLoadFromUrl(loadMethod.baseUrl, loadMethod.filePaths.avm);
marineModule = await tryLoadFromUrl(loadMethod.baseUrl, loadMethod.filePaths.marine);
} else if (isNode) {
if (loadMethod.method !== 'read-from-fs') {
throw new Error("Only 'read-from-fs' is supported for nodejs");
}
try {
// webpack will complain about missing dependencies for web target
// to fix this we have to use eval('require')
const fs = eval('require')('fs');
const file = fs.readFileSync(loadMethod.filePath);
module = await WebAssembly.compile(file);
} catch (e) {
throw new Error(
`Failed to load ${
loadMethod.filePath
}. Did you forget to install @fluencelabs/avm? Original error: ${e.toString()}`,
);
}
avmModule = await tryLoadFromFs(loadMethod.filePaths.avm);
marineModule = await tryLoadFromFs(loadMethod.filePaths.marine);
} else {
throw new Error('Environment not supported');
}
airInterpreter = await AirInterpreter.create(module, logLevel, logFunction);
// wasi is needed to run AVM with marine-js
const wasmFs = new WasmFs();
const wasi = new WASI({
args: [],
env: {},
bindings: {
...bindings,
fs: wasmFs.fs,
},
});
const cfg = {
exports: undefined,
};
const avmInstance = await WebAssembly.instantiate(avmModule, {
...wasi.getImports(avmModule),
...newImportObject(cfg)
});
wasi.start(avmInstance);
cfg.exports = avmInstance.exports;
marineInstance = await init(marineModule);
const customSections = WebAssembly.Module.customSections(avmModule, 'interface-types');
const itCustomSections = new Uint8Array(customSections[0]);
let rawResult = marineInstance.register_module('avm', itCustomSections, avmInstance);
let result: any;
try {
result = JSON.parse(rawResult);
} catch (ex) {
throw "register_module result parsing error: " + ex + ", original text: " + rawResult;
}
},
terminate: async () => {
airInterpreter = 'not-set';
marineInstance = 'not-set';
},
run: async (
@ -79,15 +191,107 @@ const toExpose: RunnerScriptInterface = {
},
callResults: CallResultsArray,
): Promise<InterpreterResult> => {
if (airInterpreter === 'not-set') {
if (marineInstance === 'not-set') {
throw new Error('Interpreter is not initialized');
}
if (airInterpreter === 'terminated') {
if (marineInstance === 'terminated') {
throw new Error('Interpreter is terminated');
}
return airInterpreter.invoke(air, prevData, data, params, callResults);
try {
const callResultsToPass: any = {};
for (let [k, v] of callResults) {
callResultsToPass[k] = {
ret_code: v.retCode,
result: v.result,
};
}
const paramsToPass = {
init_peer_id: params.initPeerId,
current_peer_id: params.currentPeerId,
};
const avmArg = JSON.stringify([
air,
Array.from(prevData),
Array.from(data),
paramsToPass,
Array.from(Buffer.from(JSON.stringify(callResultsToPass))),
]);
const rawResult = marineInstance.call_module('avm', 'invoke', avmArg);
let result: any;
try {
result = JSON.parse(rawResult);
} catch (ex) {
throw "call_module result parsing error: " + ex + ", original text: " + rawResult;
}
if (result.error !== "") {
throw "call_module returned error: " + result.error;
}
result = result.result;
const callRequestsStr = decoder.decode(new Uint8Array(result.call_requests));
let parsedCallRequests;
try {
if (callRequestsStr.length === 0) {
parsedCallRequests = {};
} else {
parsedCallRequests = JSON.parse(callRequestsStr);
}
} catch (e) {
throw "Couldn't parse call requests: " + e + '. Original string is: ' + callRequestsStr;
}
let resultCallRequests: Array<[key: number, callRequest: CallRequest]> = [];
for (const k in parsedCallRequests) {
const v = parsedCallRequests[k];
let arguments_;
let tetraplets;
try {
arguments_ = JSON.parse(v.arguments);
} catch (e) {
throw "Couldn't parse arguments: " + e + '. Original string is: ' + arguments_;
}
try {
tetraplets = JSON.parse(v.tetraplets);
} catch (e) {
throw "Couldn't parse tetraplets: " + e + '. Original string is: ' + tetraplets;
}
resultCallRequests.push([
k as any,
{
serviceId: v.service_id,
functionName: v.function_name,
arguments: arguments_,
tetraplets: tetraplets,
},
]);
}
return {
retCode: result.ret_code,
errorMessage: result.error_message,
data: result.data,
nextPeerPks: result.next_peer_pks,
callRequests: resultCallRequests,
};
} catch (e) {
return {
retCode: -1,
errorMessage: 'marine-js call failed, ' + e,
data: undefined,
nextPeerPks: undefined,
callRequests: undefined,
};
}
},
};

View File

@ -16,15 +16,20 @@
import { CallResultsArray, InterpreterResult, LogLevel } from '@fluencelabs/avm-runner-interface';
interface FilePaths {
avm: string;
marine: string;
}
export type wasmLoadingMethod =
| {
method: 'fetch-from-url';
baseUrl: string;
filePath: string;
filePaths: FilePaths;
}
| {
method: 'read-from-fs';
filePath: string;
filePaths: FilePaths;
};
export type RunnerScriptInterface = {

View File

@ -2,9 +2,9 @@
const path = require('path');
const isProduction = true;
// const isProduction = true;
// uncomment to debug
// const isProduction = false;
const isProduction = false;
const config = {
entry: './src/index.ts',

View File

@ -15,6 +15,6 @@ describe('NodeJS negative tests', () => {
const res = await testRunner.init('off').catch((e) => e.message);
// assert
expect(res).toMatch('Failed to load avm.wasm. Did you forget to install @fluencelabs/avm?');
expect(res).toMatch('Failed to load wasm file(s).');
});
});

View File

@ -6,7 +6,8 @@
"packages": {
"": {
"dependencies": {
"@fluencelabs/avm": "0.19.6"
"@fluencelabs/avm": "0.20.0-marine-web.3",
"@fluencelabs/marine-js": "0.1.0-web-runtime-experiments.0"
},
"devDependencies": {
"@types/jest": "^27.0.3",
@ -17,6 +18,43 @@
"typescript": "^4.0.0"
}
},
"../../../aquavm/avm/client": {
"name": "@fluencelabs/avm",
"version": "0.0.0",
"extraneous": true,
"license": "Apache 2.0",
"bin": {
"copy-avm": "dist/copyAvm.js"
},
"devDependencies": {
"@types/node": "^14.0.0",
"typescript": "^4.0.0"
}
},
"../../../marine/web-runtime/npm-package": {
"name": "@fluencelabs/marine-js",
"version": "0.0.3",
"extraneous": true,
"license": "Apache 2.0",
"bin": {
"copy-marine": "dist/copyMarine.js"
},
"devDependencies": {
"@fluencelabs/avm": "0.20.0-marine-web-adapted.1",
"@types/jest": "^27.4.0",
"@types/node": "^14.0.0",
"@wasmer/wasi": "^0.12.0",
"@wasmer/wasmfs": "^0.12.0",
"jest": "^27.2.4",
"typescript": "^4.0.0"
}
},
"../../aquavm/avm/client": {
"extraneous": true
},
"../../marine/web-runtime/npm-package": {
"extraneous": true
},
"node_modules/@babel/code-frame": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
@ -578,13 +616,21 @@
"dev": true
},
"node_modules/@fluencelabs/avm": {
"version": "0.19.6",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.19.6.tgz",
"integrity": "sha512-T6UQsIuGVltf13Wc3bFmuCYmQzu/00Y4lPS7atBauQ2R4+BqhRg1dc5reSZ+MbAW3Vy+NmJY1EEYOFRpLCGBwg==",
"version": "0.20.0-marine-web.3",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.20.0-marine-web.3.tgz",
"integrity": "sha512-sYh3CEGPaa3feI1nNbrhNVhqvX+LBoadufRIqL2MUgYD0htoteJZ8l+MsSodieCZeISfIgBQCYXKCVKB7qwyOA==",
"bin": {
"copy-avm": "dist/copyAvm.js"
}
},
"node_modules/@fluencelabs/marine-js": {
"version": "0.1.0-web-runtime-experiments.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.1.0-web-runtime-experiments.0.tgz",
"integrity": "sha512-UQxTtACJLNJcTaD10LQ2hIA1x5/yN6S4XT0Kn8wCYVz/QbD/itb47x8+wA582HNKEbJpHuj0A098UYrt6+WpQA==",
"bin": {
"copy-marine": "dist/copyMarine.js"
}
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@ -4651,9 +4697,14 @@
"dev": true
},
"@fluencelabs/avm": {
"version": "0.19.6",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.19.6.tgz",
"integrity": "sha512-T6UQsIuGVltf13Wc3bFmuCYmQzu/00Y4lPS7atBauQ2R4+BqhRg1dc5reSZ+MbAW3Vy+NmJY1EEYOFRpLCGBwg=="
"version": "0.20.0-marine-web.3",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.20.0-marine-web.3.tgz",
"integrity": "sha512-sYh3CEGPaa3feI1nNbrhNVhqvX+LBoadufRIqL2MUgYD0htoteJZ8l+MsSodieCZeISfIgBQCYXKCVKB7qwyOA=="
},
"@fluencelabs/marine-js": {
"version": "0.1.0-web-runtime-experiments.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.1.0-web-runtime-experiments.0.tgz",
"integrity": "sha512-UQxTtACJLNJcTaD10LQ2hIA1x5/yN6S4XT0Kn8wCYVz/QbD/itb47x8+wA582HNKEbJpHuj0A098UYrt6+WpQA=="
},
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",

View File

@ -13,6 +13,7 @@
"typescript": "^4.0.0"
},
"dependencies": {
"@fluencelabs/avm": "0.19.6"
"@fluencelabs/avm": "0.20.8",
"@fluencelabs/marine-js": "0.1.0"
}
}

View File

@ -26,6 +26,9 @@ describe('Nodejs integration tests', () => {
await testRunner.terminate();
// assert
expect(res).not.toBeUndefined();
expect(res).toMatchObject({
retCode: 0,
errorMessage: '',
});
});
});

View File

@ -1,5 +1,7 @@
#!/bin/sh
set -e
# set current working directory to script directory to run script from everywhere
cd "$(dirname "$0")"

View File

@ -1,6 +1,7 @@
{
"scripts": {
"test": "jest --runInBand"
"test": "jest --runInBand",
"test:verbose": "jest --runInBand --verbose"
},
"devDependencies": {
"@types/jest": "^27.0.3",

View File

@ -13,11 +13,11 @@ let server;
jest.setTimeout(10000);
const startServer = async (modifyConfig?) => {
const loadInBrowserToDebug = true; // set to true to debug
const loadInBrowserToDebug = false; // set to true to debug
modifyConfig = modifyConfig || ((_) => {});
const cfg = webpackConfig();
const cfg: any = webpackConfig();
modifyConfig(cfg);
const compiler = Webpack(cfg);
const devServerOptions = { ...cfg.devServer, open: loadInBrowserToDebug };

View File

@ -9,7 +9,8 @@
"js-base64": "^3.7.2"
},
"devDependencies": {
"@fluencelabs/avm": "0.19.6",
"@fluencelabs/avm": "0.20.0-marine-web.3",
"@fluencelabs/marine-js": "^0.1.0-web-runtime-experiments.0",
"@webpack-cli/generators": "^2.4.1",
"css-loader": "^6.5.1",
"html-webpack-plugin": "^5.5.0",
@ -130,14 +131,23 @@
}
},
"node_modules/@fluencelabs/avm": {
"version": "0.19.6",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.19.6.tgz",
"integrity": "sha512-T6UQsIuGVltf13Wc3bFmuCYmQzu/00Y4lPS7atBauQ2R4+BqhRg1dc5reSZ+MbAW3Vy+NmJY1EEYOFRpLCGBwg==",
"version": "0.20.0-marine-web.3",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.20.0-marine-web.3.tgz",
"integrity": "sha512-sYh3CEGPaa3feI1nNbrhNVhqvX+LBoadufRIqL2MUgYD0htoteJZ8l+MsSodieCZeISfIgBQCYXKCVKB7qwyOA==",
"dev": true,
"bin": {
"copy-avm": "dist/copyAvm.js"
}
},
"node_modules/@fluencelabs/marine-js": {
"version": "0.1.0-web-runtime-experiments.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.1.0-web-runtime-experiments.0.tgz",
"integrity": "sha512-UQxTtACJLNJcTaD10LQ2hIA1x5/yN6S4XT0Kn8wCYVz/QbD/itb47x8+wA582HNKEbJpHuj0A098UYrt6+WpQA==",
"dev": true,
"bin": {
"copy-marine": "dist/copyMarine.js"
}
},
"node_modules/@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@ -9277,9 +9287,15 @@
"dev": true
},
"@fluencelabs/avm": {
"version": "0.19.6",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.19.6.tgz",
"integrity": "sha512-T6UQsIuGVltf13Wc3bFmuCYmQzu/00Y4lPS7atBauQ2R4+BqhRg1dc5reSZ+MbAW3Vy+NmJY1EEYOFRpLCGBwg==",
"version": "0.20.0-marine-web.3",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.20.0-marine-web.3.tgz",
"integrity": "sha512-sYh3CEGPaa3feI1nNbrhNVhqvX+LBoadufRIqL2MUgYD0htoteJZ8l+MsSodieCZeISfIgBQCYXKCVKB7qwyOA==",
"dev": true
},
"@fluencelabs/marine-js": {
"version": "0.1.0-web-runtime-experiments.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/marine-js/-/marine-js-0.1.0-web-runtime-experiments.0.tgz",
"integrity": "sha512-UQxTtACJLNJcTaD10LQ2hIA1x5/yN6S4XT0Kn8wCYVz/QbD/itb47x8+wA582HNKEbJpHuj0A098UYrt6+WpQA==",
"dev": true
},
"@mrmlnc/readdir-enhanced": {

View File

@ -1,7 +1,7 @@
{
"scripts": {
"start": "webpack serve",
"copy-public": "copy-avm public && copy-avm-runner public",
"copy-public": "copy-avm public && copy-marine public && copy-avm-runner public",
"install:local": "install-local ../../../avm-runner-background",
"build": "webpack --mode=production --node-env=production",
"build:dev": "webpack --mode=development",
@ -21,7 +21,8 @@
"webpack": "^5.65.0",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^4.6.0",
"@fluencelabs/avm": "0.19.6"
"@fluencelabs/avm": "0.20.8",
"@fluencelabs/marine-js": "0.1.0"
},
"dependencies": {
"js-base64": "^3.7.2"

File diff suppressed because one or more lines are too long