Ben 11 mesiacov pred
rodič
commit
7414675281
100 zmenil súbory, kde vykonal 10433 pridanie a 0 odobranie
  1. 1 0
      js/node_modules/.bin/acorn
  2. 1 0
      js/node_modules/.bin/atob
  3. 1 0
      js/node_modules/.bin/envinfo
  4. 1 0
      js/node_modules/.bin/errno
  5. 1 0
      js/node_modules/.bin/flat
  6. 1 0
      js/node_modules/.bin/import-local-fixture
  7. 1 0
      js/node_modules/.bin/json5
  8. 1 0
      js/node_modules/.bin/miller-rabin
  9. 1 0
      js/node_modules/.bin/mkdirp
  10. 1 0
      js/node_modules/.bin/node-which
  11. 1 0
      js/node_modules/.bin/resolve
  12. 1 0
      js/node_modules/.bin/rimraf
  13. 1 0
      js/node_modules/.bin/semver
  14. 1 0
      js/node_modules/.bin/sha.js
  15. 1 0
      js/node_modules/.bin/terser
  16. 1 0
      js/node_modules/.bin/uglifyjs
  17. 1 0
      js/node_modules/.bin/webpack
  18. 1 0
      js/node_modules/.bin/webpack-cli
  19. 21 0
      js/node_modules/@discoveryjs/json-ext/LICENSE
  20. 256 0
      js/node_modules/@discoveryjs/json-ext/README.md
  21. 791 0
      js/node_modules/@discoveryjs/json-ext/dist/json-ext.js
  22. 0 0
      js/node_modules/@discoveryjs/json-ext/dist/json-ext.min.js
  23. 1 0
      js/node_modules/@discoveryjs/json-ext/dist/version.js
  24. 31 0
      js/node_modules/@discoveryjs/json-ext/index.d.ts
  25. 93 0
      js/node_modules/@discoveryjs/json-ext/package.json
  26. 6 0
      js/node_modules/@discoveryjs/json-ext/src/index.js
  27. 384 0
      js/node_modules/@discoveryjs/json-ext/src/parse-chunked.js
  28. 231 0
      js/node_modules/@discoveryjs/json-ext/src/stringify-info.js
  29. 3 0
      js/node_modules/@discoveryjs/json-ext/src/stringify-stream-browser.js
  30. 408 0
      js/node_modules/@discoveryjs/json-ext/src/stringify-stream.js
  31. 1 0
      js/node_modules/@discoveryjs/json-ext/src/text-decoder-browser.js
  32. 1 0
      js/node_modules/@discoveryjs/json-ext/src/text-decoder.js
  33. 149 0
      js/node_modules/@discoveryjs/json-ext/src/utils.js
  34. 1 0
      js/node_modules/@discoveryjs/json-ext/src/version.js
  35. 21 0
      js/node_modules/@webassemblyjs/ast/LICENSE
  36. 167 0
      js/node_modules/@webassemblyjs/ast/README.md
  37. 10 0
      js/node_modules/@webassemblyjs/ast/esm/clone.js
  38. 663 0
      js/node_modules/@webassemblyjs/ast/esm/definitions.js
  39. 6 0
      js/node_modules/@webassemblyjs/ast/esm/index.js
  40. 84 0
      js/node_modules/@webassemblyjs/ast/esm/node-helpers.js
  41. 137 0
      js/node_modules/@webassemblyjs/ast/esm/node-path.js
  42. 915 0
      js/node_modules/@webassemblyjs/ast/esm/nodes.js
  43. 199 0
      js/node_modules/@webassemblyjs/ast/esm/signatures.js
  44. 76 0
      js/node_modules/@webassemblyjs/ast/esm/transform/denormalize-type-references/index.js
  45. 216 0
      js/node_modules/@webassemblyjs/ast/esm/transform/wast-identifier-to-index/index.js
  46. 96 0
      js/node_modules/@webassemblyjs/ast/esm/traverse.js
  47. 0 0
      js/node_modules/@webassemblyjs/ast/esm/types/basic.js
  48. 0 0
      js/node_modules/@webassemblyjs/ast/esm/types/nodes.js
  49. 0 0
      js/node_modules/@webassemblyjs/ast/esm/types/traverse.js
  50. 265 0
      js/node_modules/@webassemblyjs/ast/esm/utils.js
  51. 17 0
      js/node_modules/@webassemblyjs/ast/lib/clone.js
  52. 663 0
      js/node_modules/@webassemblyjs/ast/lib/definitions.js
  53. 118 0
      js/node_modules/@webassemblyjs/ast/lib/index.js
  54. 107 0
      js/node_modules/@webassemblyjs/ast/lib/node-helpers.js
  55. 144 0
      js/node_modules/@webassemblyjs/ast/lib/node-path.js
  56. 52 0
      js/node_modules/@webassemblyjs/ast/lib/nodes.js
  57. 207 0
      js/node_modules/@webassemblyjs/ast/lib/signatures.js
  58. 83 0
      js/node_modules/@webassemblyjs/ast/lib/transform/denormalize-type-references/index.js
  59. 225 0
      js/node_modules/@webassemblyjs/ast/lib/transform/wast-identifier-to-index/index.js
  60. 105 0
      js/node_modules/@webassemblyjs/ast/lib/traverse.js
  61. 0 0
      js/node_modules/@webassemblyjs/ast/lib/types/basic.js
  62. 0 0
      js/node_modules/@webassemblyjs/ast/lib/types/nodes.js
  63. 0 0
      js/node_modules/@webassemblyjs/ast/lib/types/traverse.js
  64. 306 0
      js/node_modules/@webassemblyjs/ast/lib/utils.js
  65. 73 0
      js/node_modules/@webassemblyjs/ast/package.json
  66. 219 0
      js/node_modules/@webassemblyjs/ast/scripts/generateNodeUtils.js
  67. 47 0
      js/node_modules/@webassemblyjs/ast/scripts/generateTypeDefinitions.js
  68. 38 0
      js/node_modules/@webassemblyjs/ast/scripts/util.js
  69. 21 0
      js/node_modules/@webassemblyjs/floating-point-hex-parser/LICENSE
  70. 34 0
      js/node_modules/@webassemblyjs/floating-point-hex-parser/README.md
  71. 42 0
      js/node_modules/@webassemblyjs/floating-point-hex-parser/esm/index.js
  72. 49 0
      js/node_modules/@webassemblyjs/floating-point-hex-parser/lib/index.js
  73. 56 0
      js/node_modules/@webassemblyjs/floating-point-hex-parser/package.json
  74. 21 0
      js/node_modules/@webassemblyjs/helper-api-error/LICENSE
  75. 47 0
      js/node_modules/@webassemblyjs/helper-api-error/esm/index.js
  76. 62 0
      js/node_modules/@webassemblyjs/helper-api-error/lib/index.js
  77. 42 0
      js/node_modules/@webassemblyjs/helper-api-error/package.json
  78. 21 0
      js/node_modules/@webassemblyjs/helper-buffer/LICENSE
  79. 65 0
      js/node_modules/@webassemblyjs/helper-buffer/esm/compare.js
  80. 67 0
      js/node_modules/@webassemblyjs/helper-buffer/esm/index.js
  81. 73 0
      js/node_modules/@webassemblyjs/helper-buffer/lib/compare.js
  82. 78 0
      js/node_modules/@webassemblyjs/helper-buffer/lib/index.js
  83. 58 0
      js/node_modules/@webassemblyjs/helper-buffer/package.json
  84. 21 0
      js/node_modules/@webassemblyjs/helper-code-frame/LICENSE
  85. 37 0
      js/node_modules/@webassemblyjs/helper-code-frame/esm/index.js
  86. 47 0
      js/node_modules/@webassemblyjs/helper-code-frame/lib/index.js
  87. 55 0
      js/node_modules/@webassemblyjs/helper-code-frame/package.json
  88. 21 0
      js/node_modules/@webassemblyjs/helper-fsm/LICENSE
  89. 101 0
      js/node_modules/@webassemblyjs/helper-fsm/esm/index.js
  90. 109 0
      js/node_modules/@webassemblyjs/helper-fsm/lib/index.js
  91. 41 0
      js/node_modules/@webassemblyjs/helper-fsm/package.json
  92. 21 0
      js/node_modules/@webassemblyjs/helper-module-context/LICENSE
  93. 378 0
      js/node_modules/@webassemblyjs/helper-module-context/esm/index.js
  94. 389 0
      js/node_modules/@webassemblyjs/helper-module-context/lib/index.js
  95. 60 0
      js/node_modules/@webassemblyjs/helper-module-context/package.json
  96. 287 0
      js/node_modules/@webassemblyjs/helper-module-context/src/index.js
  97. 100 0
      js/node_modules/@webassemblyjs/helper-module-context/test/index.js
  98. 21 0
      js/node_modules/@webassemblyjs/helper-wasm-bytecode/LICENSE
  99. 324 0
      js/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/index.js
  100. 31 0
      js/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/section.js

+ 1 - 0
js/node_modules/.bin/acorn

@@ -0,0 +1 @@
+../acorn/bin/acorn

+ 1 - 0
js/node_modules/.bin/atob

@@ -0,0 +1 @@
+../atob/bin/atob.js

+ 1 - 0
js/node_modules/.bin/envinfo

@@ -0,0 +1 @@
+../envinfo/dist/cli.js

+ 1 - 0
js/node_modules/.bin/errno

@@ -0,0 +1 @@
+../errno/cli.js

+ 1 - 0
js/node_modules/.bin/flat

@@ -0,0 +1 @@
+../flat/cli.js

+ 1 - 0
js/node_modules/.bin/import-local-fixture

@@ -0,0 +1 @@
+../import-local/fixtures/cli.js

+ 1 - 0
js/node_modules/.bin/json5

@@ -0,0 +1 @@
+../json5/lib/cli.js

+ 1 - 0
js/node_modules/.bin/miller-rabin

@@ -0,0 +1 @@
+../miller-rabin/bin/miller-rabin

+ 1 - 0
js/node_modules/.bin/mkdirp

@@ -0,0 +1 @@
+../mkdirp/bin/cmd.js

+ 1 - 0
js/node_modules/.bin/node-which

@@ -0,0 +1 @@
+../which/bin/node-which

+ 1 - 0
js/node_modules/.bin/resolve

@@ -0,0 +1 @@
+../resolve/bin/resolve

+ 1 - 0
js/node_modules/.bin/rimraf

@@ -0,0 +1 @@
+../rimraf/bin.js

+ 1 - 0
js/node_modules/.bin/semver

@@ -0,0 +1 @@
+../semver/bin/semver

+ 1 - 0
js/node_modules/.bin/sha.js

@@ -0,0 +1 @@
+../sha.js/bin.js

+ 1 - 0
js/node_modules/.bin/terser

@@ -0,0 +1 @@
+../terser/bin/terser

+ 1 - 0
js/node_modules/.bin/uglifyjs

@@ -0,0 +1 @@
+../uglify-js/bin/uglifyjs

+ 1 - 0
js/node_modules/.bin/webpack

@@ -0,0 +1 @@
+../webpack/bin/webpack.js

+ 1 - 0
js/node_modules/.bin/webpack-cli

@@ -0,0 +1 @@
+../webpack-cli/bin/cli.js

+ 21 - 0
js/node_modules/@discoveryjs/json-ext/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Roman Dvornov <rdvornov@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 256 - 0
js/node_modules/@discoveryjs/json-ext/README.md

@@ -0,0 +1,256 @@
+# json-ext
+
+[![NPM version](https://img.shields.io/npm/v/@discoveryjs/json-ext.svg)](https://www.npmjs.com/package/@discoveryjs/json-ext)
+[![Build Status](https://github.com/discoveryjs/json-ext/actions/workflows/ci.yml/badge.svg)](https://github.com/discoveryjs/json-ext/actions/workflows/ci.yml)
+[![Coverage Status](https://coveralls.io/repos/github/discoveryjs/json-ext/badge.svg?branch=master)](https://coveralls.io/github/discoveryjs/json-ext?)
+[![NPM Downloads](https://img.shields.io/npm/dm/@discoveryjs/json-ext.svg)](https://www.npmjs.com/package/@discoveryjs/json-ext)
+
+A set of utilities that extend the use of JSON. Designed to be fast and memory efficient
+
+Features:
+
+- [x] `parseChunked()` – Parse JSON that comes by chunks (e.g. FS readable stream or fetch response stream)
+- [x] `stringifyStream()` – Stringify stream (Node.js)
+- [x] `stringifyInfo()` – Get estimated size and other facts of JSON.stringify() without converting a value to string
+- [ ] **TBD** Support for circular references
+- [ ] **TBD** Binary representation [branch](https://github.com/discoveryjs/json-ext/tree/binary)
+- [ ] **TBD** WHATWG [Streams](https://streams.spec.whatwg.org/) support
+
+## Install
+
+```bash
+npm install @discoveryjs/json-ext
+```
+
+## API
+
+- [parseChunked(chunkEmitter)](#parsechunkedchunkemitter)
+- [stringifyStream(value[, replacer[, space]])](#stringifystreamvalue-replacer-space)
+- [stringifyInfo(value[, replacer[, space[, options]]])](#stringifyinfovalue-replacer-space-options)
+    - [Options](#options)
+        - [async](#async)
+        - [continueOnCircular](#continueoncircular)
+- [version](#version)
+
+### parseChunked(chunkEmitter)
+
+Works the same as [`JSON.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) but takes `chunkEmitter` instead of string and returns [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
+
+> NOTE: `reviver` parameter is not supported yet, but will be added in next releases.
+> NOTE: WHATWG streams aren't supported yet
+
+When to use:
+- It's required to avoid freezing the main thread during big JSON parsing, since this process can be distributed in time
+- Huge JSON needs to be parsed (e.g. >500MB on Node.js)
+- Needed to reduce memory pressure. `JSON.parse()` needs to receive the entire JSON before parsing it. With `parseChunked()` you may parse JSON as first bytes of it comes. This approach helps to avoid storing a huge string in the memory at a single time point and following GC.
+
+[Benchmark](https://github.com/discoveryjs/json-ext/tree/master/benchmarks#parse-chunked)
+
+Usage:
+
+```js
+const { parseChunked } = require('@discoveryjs/json-ext');
+
+// as a regular Promise
+parseChunked(chunkEmitter)
+    .then(data => {
+        /* data is parsed JSON */
+    });
+
+// using await (keep in mind that not every runtime has a support for top level await)
+const data = await parseChunked(chunkEmitter);
+```
+
+Parameter `chunkEmitter` can be:
+- [`ReadableStream`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_readable_streams) (Node.js only)
+```js
+const fs = require('fs');
+const { parseChunked } = require('@discoveryjs/json-ext');
+
+parseChunked(fs.createReadStream('path/to/file.json'))
+```
+- Generator, async generator or function that returns iterable (chunks). Chunk might be a `string`, `Uint8Array` or `Buffer` (Node.js only):
+```js
+const { parseChunked } = require('@discoveryjs/json-ext');
+const encoder = new TextEncoder();
+
+// generator
+parseChunked(function*() {
+    yield '{ "hello":';
+    yield Buffer.from(' "wor');    // Node.js only
+    yield encoder.encode('ld" }'); // returns Uint8Array(5) [ 108, 100, 34, 32, 125 ]
+});
+
+// async generator
+parseChunked(async function*() {
+    for await (const chunk of someAsyncSource) {
+        yield chunk;
+    }
+});
+
+// function that returns iterable
+parseChunked(() => ['{ "hello":', ' "world"}'])
+```
+
+Using with [fetch()](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API):
+
+```js
+async function loadData(url) {
+    const response = await fetch(url);
+    const reader = response.body.getReader();
+
+    return parseChunked(async function*() {
+        while (true) {
+            const { done, value } = await reader.read();
+
+            if (done) {
+                break;
+            }
+
+            yield value;
+        }
+    });
+}
+
+loadData('https://example.com/data.json')
+    .then(data => {
+        /* data is parsed JSON */
+    })
+```
+
+### stringifyStream(value[, replacer[, space]])
+
+Works the same as [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), but returns an instance of [`ReadableStream`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_readable_streams) instead of string.
+
+> NOTE: WHATWG Streams aren't supported yet, so function available for Node.js only for now
+
+Departs from JSON.stringify():
+- Outputs `null` when `JSON.stringify()` returns `undefined` (since streams may not emit `undefined`)
+- A promise is resolving and the resulting value is stringifying as a regular one
+- A stream in non-object mode is piping to output as is
+- A stream in object mode is piping to output as an array of objects
+
+When to use:
+- Huge JSON needs to be generated (e.g. >500MB on Node.js)
+- Needed to reduce memory pressure. `JSON.stringify()` needs to generate the entire JSON before send or write it to somewhere. With `stringifyStream()` you may send a result to somewhere as first bytes of the result appears. This approach helps to avoid storing a huge string in the memory at a single time point.
+- The object being serialized contains Promises or Streams (see Usage for examples)
+
+[Benchmark](https://github.com/discoveryjs/json-ext/tree/master/benchmarks#stream-stringifying)
+
+Usage:
+
+```js
+const { stringifyStream } = require('@discoveryjs/json-ext');
+
+// handle events
+stringifyStream(data)
+    .on('data', chunk => console.log(chunk))
+    .on('error', error => consold.error(error))
+    .on('finish', () => console.log('DONE!'));
+
+// pipe into a stream
+stringifyStream(data)
+    .pipe(writableStream);
+```
+
+Using Promise or ReadableStream in serializing object:
+
+```js
+const fs = require('fs');
+const { stringifyStream } = require('@discoveryjs/json-ext');
+
+// output will be
+// {"name":"example","willSerializeResolvedValue":42,"fromFile":[1, 2, 3],"at":{"any":{"level":"promise!"}}}
+stringifyStream({
+    name: 'example',
+    willSerializeResolvedValue: Promise.resolve(42),
+    fromFile: fs.createReadStream('path/to/file.json'), // support file content is "[1, 2, 3]", it'll be inserted as it
+    at: {
+        any: {
+            level: new Promise(resolve => setTimeout(() => resolve('promise!'), 100))
+        }
+    }
+})
+
+// in case several async requests are used in object, it's prefered
+// to put fastest requests first, because in this case
+stringifyStream({
+    foo: fetch('http://example.com/request_takes_2s').then(req => req.json()),
+    bar: fetch('http://example.com/request_takes_5s').then(req => req.json())
+});
+```
+
+Using with [`WritableStream`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_writable_streams) (Node.js only):
+
+```js
+const fs = require('fs');
+const { stringifyStream } = require('@discoveryjs/json-ext');
+
+// pipe into a console
+stringifyStream(data)
+    .pipe(process.stdout);
+
+// pipe into a file
+stringifyStream(data)
+    .pipe(fs.createWriteStream('path/to/file.json'));
+
+// wrapping into a Promise
+new Promise((resolve, reject) => {
+    stringifyStream(data)
+        .on('error', reject)
+        .pipe(stream)
+        .on('error', reject)
+        .on('finish', resolve);
+});
+```
+
+### stringifyInfo(value[, replacer[, space[, options]]])
+
+`value`, `replacer` and `space` arguments are the same as for `JSON.stringify()`.
+
+Result is an object:
+
+```js
+{
+    minLength: Number,  // minimal bytes when values is stringified
+    circular: [...],    // list of circular references
+    duplicate: [...],   // list of objects that occur more than once
+    async: [...]        // list of async values, i.e. promises and streams
+}
+```
+
+Example:
+
+```js
+const { stringifyInfo } = require('@discoveryjs/json-ext');
+
+console.log(
+    stringifyInfo({ test: true }).minLength
+);
+// > 13
+// that equals '{"test":true}'.length
+```
+
+#### Options
+
+##### async
+
+Type: `Boolean`  
+Default: `false`
+
+Collect async values (promises and streams) or not.
+
+##### continueOnCircular
+
+Type: `Boolean`  
+Default: `false`
+
+Stop collecting info for a value or not whenever circular reference is found. Setting option to `true` allows to find all circular references.
+
+### version
+
+The version of library, e.g. `"0.3.1"`.
+
+## License
+
+MIT

+ 791 - 0
js/node_modules/@discoveryjs/json-ext/dist/json-ext.js

@@ -0,0 +1,791 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.jsonExt = factory());
+})(this, (function () { 'use strict';
+
+    var version = "0.5.7";
+
+    const PrimitiveType = 1;
+    const ObjectType = 2;
+    const ArrayType = 3;
+    const PromiseType = 4;
+    const ReadableStringType = 5;
+    const ReadableObjectType = 6;
+    // https://tc39.es/ecma262/#table-json-single-character-escapes
+    const escapableCharCodeSubstitution$1 = { // JSON Single Character Escape Sequences
+        0x08: '\\b',
+        0x09: '\\t',
+        0x0a: '\\n',
+        0x0c: '\\f',
+        0x0d: '\\r',
+        0x22: '\\\"',
+        0x5c: '\\\\'
+    };
+
+    function isLeadingSurrogate$1(code) {
+        return code >= 0xD800 && code <= 0xDBFF;
+    }
+
+    function isTrailingSurrogate$1(code) {
+        return code >= 0xDC00 && code <= 0xDFFF;
+    }
+
+    function isReadableStream$1(value) {
+        return (
+            typeof value.pipe === 'function' &&
+            typeof value._read === 'function' &&
+            typeof value._readableState === 'object' && value._readableState !== null
+        );
+    }
+
+    function replaceValue$1(holder, key, value, replacer) {
+        if (value && typeof value.toJSON === 'function') {
+            value = value.toJSON();
+        }
+
+        if (replacer !== null) {
+            value = replacer.call(holder, String(key), value);
+        }
+
+        switch (typeof value) {
+            case 'function':
+            case 'symbol':
+                value = undefined;
+                break;
+
+            case 'object':
+                if (value !== null) {
+                    const cls = value.constructor;
+                    if (cls === String || cls === Number || cls === Boolean) {
+                        value = value.valueOf();
+                    }
+                }
+                break;
+        }
+
+        return value;
+    }
+
+    function getTypeNative$1(value) {
+        if (value === null || typeof value !== 'object') {
+            return PrimitiveType;
+        }
+
+        if (Array.isArray(value)) {
+            return ArrayType;
+        }
+
+        return ObjectType;
+    }
+
+    function getTypeAsync$1(value) {
+        if (value === null || typeof value !== 'object') {
+            return PrimitiveType;
+        }
+
+        if (typeof value.then === 'function') {
+            return PromiseType;
+        }
+
+        if (isReadableStream$1(value)) {
+            return value._readableState.objectMode ? ReadableObjectType : ReadableStringType;
+        }
+
+        if (Array.isArray(value)) {
+            return ArrayType;
+        }
+
+        return ObjectType;
+    }
+
+    function normalizeReplacer$1(replacer) {
+        if (typeof replacer === 'function') {
+            return replacer;
+        }
+
+        if (Array.isArray(replacer)) {
+            const allowlist = new Set(replacer
+                .map(item => {
+                    const cls = item && item.constructor;
+                    return cls === String || cls === Number ? String(item) : null;
+                })
+                .filter(item => typeof item === 'string')
+            );
+
+            return [...allowlist];
+        }
+
+        return null;
+    }
+
+    function normalizeSpace$1(space) {
+        if (typeof space === 'number') {
+            if (!Number.isFinite(space) || space < 1) {
+                return false;
+            }
+
+            return ' '.repeat(Math.min(space, 10));
+        }
+
+        if (typeof space === 'string') {
+            return space.slice(0, 10) || false;
+        }
+
+        return false;
+    }
+
+    var utils = {
+        escapableCharCodeSubstitution: escapableCharCodeSubstitution$1,
+        isLeadingSurrogate: isLeadingSurrogate$1,
+        isTrailingSurrogate: isTrailingSurrogate$1,
+        type: {
+            PRIMITIVE: PrimitiveType,
+            PROMISE: PromiseType,
+            ARRAY: ArrayType,
+            OBJECT: ObjectType,
+            STRING_STREAM: ReadableStringType,
+            OBJECT_STREAM: ReadableObjectType
+        },
+
+        isReadableStream: isReadableStream$1,
+        replaceValue: replaceValue$1,
+        getTypeNative: getTypeNative$1,
+        getTypeAsync: getTypeAsync$1,
+        normalizeReplacer: normalizeReplacer$1,
+        normalizeSpace: normalizeSpace$1
+    };
+
+    const {
+        normalizeReplacer,
+        normalizeSpace,
+        replaceValue,
+        getTypeNative,
+        getTypeAsync,
+        isLeadingSurrogate,
+        isTrailingSurrogate,
+        escapableCharCodeSubstitution,
+        type: {
+            PRIMITIVE,
+            OBJECT,
+            ARRAY,
+            PROMISE,
+            STRING_STREAM,
+            OBJECT_STREAM
+        }
+    } = utils;
+    const charLength2048 = Array.from({ length: 2048 }).map((_, code) => {
+        if (escapableCharCodeSubstitution.hasOwnProperty(code)) {
+            return 2; // \X
+        }
+
+        if (code < 0x20) {
+            return 6; // \uXXXX
+        }
+
+        return code < 128 ? 1 : 2; // UTF8 bytes
+    });
+
+    function stringLength(str) {
+        let len = 0;
+        let prevLeadingSurrogate = false;
+
+        for (let i = 0; i < str.length; i++) {
+            const code = str.charCodeAt(i);
+
+            if (code < 2048) {
+                len += charLength2048[code];
+            } else if (isLeadingSurrogate(code)) {
+                len += 6; // \uXXXX since no pair with trailing surrogate yet
+                prevLeadingSurrogate = true;
+                continue;
+            } else if (isTrailingSurrogate(code)) {
+                len = prevLeadingSurrogate
+                    ? len - 2  // surrogate pair (4 bytes), since we calculate prev leading surrogate as 6 bytes, substruct 2 bytes
+                    : len + 6; // \uXXXX
+            } else {
+                len += 3; // code >= 2048 is 3 bytes length for UTF8
+            }
+
+            prevLeadingSurrogate = false;
+        }
+
+        return len + 2; // +2 for quotes
+    }
+
+    function primitiveLength(value) {
+        switch (typeof value) {
+            case 'string':
+                return stringLength(value);
+
+            case 'number':
+                return Number.isFinite(value) ? String(value).length : 4 /* null */;
+
+            case 'boolean':
+                return value ? 4 /* true */ : 5 /* false */;
+
+            case 'undefined':
+            case 'object':
+                return 4; /* null */
+
+            default:
+                return 0;
+        }
+    }
+
+    function spaceLength(space) {
+        space = normalizeSpace(space);
+        return typeof space === 'string' ? space.length : 0;
+    }
+
+    var stringifyInfo = function jsonStringifyInfo(value, replacer, space, options) {
+        function walk(holder, key, value) {
+            if (stop) {
+                return;
+            }
+
+            value = replaceValue(holder, key, value, replacer);
+
+            let type = getType(value);
+
+            // check for circular structure
+            if (type !== PRIMITIVE && stack.has(value)) {
+                circular.add(value);
+                length += 4; // treat as null
+
+                if (!options.continueOnCircular) {
+                    stop = true;
+                }
+
+                return;
+            }
+
+            switch (type) {
+                case PRIMITIVE:
+                    if (value !== undefined || Array.isArray(holder)) {
+                        length += primitiveLength(value);
+                    } else if (holder === root) {
+                        length += 9; // FIXME: that's the length of undefined, should we normalize behaviour to convert it to null?
+                    }
+                    break;
+
+                case OBJECT: {
+                    if (visited.has(value)) {
+                        duplicate.add(value);
+                        length += visited.get(value);
+                        break;
+                    }
+
+                    const valueLength = length;
+                    let entries = 0;
+
+                    length += 2; // {}
+
+                    stack.add(value);
+
+                    for (const key in value) {
+                        if (hasOwnProperty.call(value, key) && (allowlist === null || allowlist.has(key))) {
+                            const prevLength = length;
+                            walk(value, key, value[key]);
+
+                            if (prevLength !== length) {
+                                // value is printed
+                                length += stringLength(key) + 1; // "key":
+                                entries++;
+                            }
+                        }
+                    }
+
+                    if (entries > 1) {
+                        length += entries - 1; // commas
+                    }
+
+                    stack.delete(value);
+
+                    if (space > 0 && entries > 0) {
+                        length += (1 + (stack.size + 1) * space + 1) * entries; // for each key-value: \n{space}
+                        length += 1 + stack.size * space; // for }
+                    }
+
+                    visited.set(value, length - valueLength);
+
+                    break;
+                }
+
+                case ARRAY: {
+                    if (visited.has(value)) {
+                        duplicate.add(value);
+                        length += visited.get(value);
+                        break;
+                    }
+
+                    const valueLength = length;
+
+                    length += 2; // []
+
+                    stack.add(value);
+
+                    for (let i = 0; i < value.length; i++) {
+                        walk(value, i, value[i]);
+                    }
+
+                    if (value.length > 1) {
+                        length += value.length - 1; // commas
+                    }
+
+                    stack.delete(value);
+
+                    if (space > 0 && value.length > 0) {
+                        length += (1 + (stack.size + 1) * space) * value.length; // for each element: \n{space}
+                        length += 1 + stack.size * space; // for ]
+                    }
+
+                    visited.set(value, length - valueLength);
+
+                    break;
+                }
+
+                case PROMISE:
+                case STRING_STREAM:
+                    async.add(value);
+                    break;
+
+                case OBJECT_STREAM:
+                    length += 2; // []
+                    async.add(value);
+                    break;
+            }
+        }
+
+        let allowlist = null;
+        replacer = normalizeReplacer(replacer);
+
+        if (Array.isArray(replacer)) {
+            allowlist = new Set(replacer);
+            replacer = null;
+        }
+
+        space = spaceLength(space);
+        options = options || {};
+
+        const visited = new Map();
+        const stack = new Set();
+        const duplicate = new Set();
+        const circular = new Set();
+        const async = new Set();
+        const getType = options.async ? getTypeAsync : getTypeNative;
+        const root = { '': value };
+        let stop = false;
+        let length = 0;
+
+        walk(root, '', value);
+
+        return {
+            minLength: isNaN(length) ? Infinity : length,
+            circular: [...circular],
+            duplicate: [...duplicate],
+            async: [...async]
+        };
+    };
+
+    var stringifyStreamBrowser = () => {
+        throw new Error('Method is not supported');
+    };
+
+    var textDecoderBrowser = TextDecoder;
+
+    const { isReadableStream } = utils;
+
+
+    const STACK_OBJECT = 1;
+    const STACK_ARRAY = 2;
+    const decoder = new textDecoderBrowser();
+
+    function isObject(value) {
+        return value !== null && typeof value === 'object';
+    }
+
+    function adjustPosition(error, parser) {
+        if (error.name === 'SyntaxError' && parser.jsonParseOffset) {
+            error.message = error.message.replace(/at position (\d+)/, (_, pos) =>
+                'at position ' + (Number(pos) + parser.jsonParseOffset)
+            );
+        }
+
+        return error;
+    }
+
+    function append(array, elements) {
+        // Note: Avoid to use array.push(...elements) since it may lead to
+        // "RangeError: Maximum call stack size exceeded" for a long arrays
+        const initialLength = array.length;
+        array.length += elements.length;
+
+        for (let i = 0; i < elements.length; i++) {
+            array[initialLength + i] = elements[i];
+        }
+    }
+
+    var parseChunked = function(chunkEmitter) {
+        let parser = new ChunkParser();
+
+        if (isObject(chunkEmitter) && isReadableStream(chunkEmitter)) {
+            return new Promise((resolve, reject) => {
+                chunkEmitter
+                    .on('data', chunk => {
+                        try {
+                            parser.push(chunk);
+                        } catch (e) {
+                            reject(adjustPosition(e, parser));
+                            parser = null;
+                        }
+                    })
+                    .on('error', (e) => {
+                        parser = null;
+                        reject(e);
+                    })
+                    .on('end', () => {
+                        try {
+                            resolve(parser.finish());
+                        } catch (e) {
+                            reject(adjustPosition(e, parser));
+                        } finally {
+                            parser = null;
+                        }
+                    });
+            });
+        }
+
+        if (typeof chunkEmitter === 'function') {
+            const iterator = chunkEmitter();
+
+            if (isObject(iterator) && (Symbol.iterator in iterator || Symbol.asyncIterator in iterator)) {
+                return new Promise(async (resolve, reject) => {
+                    try {
+                        for await (const chunk of iterator) {
+                            parser.push(chunk);
+                        }
+
+                        resolve(parser.finish());
+                    } catch (e) {
+                        reject(adjustPosition(e, parser));
+                    } finally {
+                        parser = null;
+                    }
+                });
+            }
+        }
+
+        throw new Error(
+            'Chunk emitter should be readable stream, generator, ' +
+            'async generator or function returning an iterable object'
+        );
+    };
+
+    class ChunkParser {
+        constructor() {
+            this.value = undefined;
+            this.valueStack = null;
+
+            this.stack = new Array(100);
+            this.lastFlushDepth = 0;
+            this.flushDepth = 0;
+            this.stateString = false;
+            this.stateStringEscape = false;
+            this.pendingByteSeq = null;
+            this.pendingChunk = null;
+            this.chunkOffset = 0;
+            this.jsonParseOffset = 0;
+        }
+
+        parseAndAppend(fragment, wrap) {
+            // Append new entries or elements
+            if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
+                if (wrap) {
+                    this.jsonParseOffset--;
+                    fragment = '{' + fragment + '}';
+                }
+
+                Object.assign(this.valueStack.value, JSON.parse(fragment));
+            } else {
+                if (wrap) {
+                    this.jsonParseOffset--;
+                    fragment = '[' + fragment + ']';
+                }
+
+                append(this.valueStack.value, JSON.parse(fragment));
+            }
+        }
+
+        prepareAddition(fragment) {
+            const { value } = this.valueStack;
+            const expectComma = Array.isArray(value)
+                ? value.length !== 0
+                : Object.keys(value).length !== 0;
+
+            if (expectComma) {
+                // Skip a comma at the beginning of fragment, otherwise it would
+                // fail to parse
+                if (fragment[0] === ',') {
+                    this.jsonParseOffset++;
+                    return fragment.slice(1);
+                }
+
+                // When value (an object or array) is not empty and a fragment
+                // doesn't start with a comma, a single valid fragment starting
+                // is a closing bracket. If it's not, a prefix is adding to fail
+                // parsing. Otherwise, the sequence of chunks can be successfully
+                // parsed, although it should not, e.g. ["[{}", "{}]"]
+                if (fragment[0] !== '}' && fragment[0] !== ']') {
+                    this.jsonParseOffset -= 3;
+                    return '[[]' + fragment;
+                }
+            }
+
+            return fragment;
+        }
+
+        flush(chunk, start, end) {
+            let fragment = chunk.slice(start, end);
+
+            // Save position correction an error in JSON.parse() if any
+            this.jsonParseOffset = this.chunkOffset + start;
+
+            // Prepend pending chunk if any
+            if (this.pendingChunk !== null) {
+                fragment = this.pendingChunk + fragment;
+                this.jsonParseOffset -= this.pendingChunk.length;
+                this.pendingChunk = null;
+            }
+
+            if (this.flushDepth === this.lastFlushDepth) {
+                // Depth didn't changed, so it's a root value or entry/element set
+                if (this.flushDepth > 0) {
+                    this.parseAndAppend(this.prepareAddition(fragment), true);
+                } else {
+                    // That's an entire value on a top level
+                    this.value = JSON.parse(fragment);
+                    this.valueStack = {
+                        value: this.value,
+                        prev: null
+                    };
+                }
+            } else if (this.flushDepth > this.lastFlushDepth) {
+                // Add missed closing brackets/parentheses
+                for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
+                    fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';
+                }
+
+                if (this.lastFlushDepth === 0) {
+                    // That's a root value
+                    this.value = JSON.parse(fragment);
+                    this.valueStack = {
+                        value: this.value,
+                        prev: null
+                    };
+                } else {
+                    this.parseAndAppend(this.prepareAddition(fragment), true);
+                }
+
+                // Move down to the depths to the last object/array, which is current now
+                for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
+                    let value = this.valueStack.value;
+
+                    if (this.stack[i - 1] === STACK_OBJECT) {
+                        // find last entry
+                        let key;
+                        // eslint-disable-next-line curly
+                        for (key in value);
+                        value = value[key];
+                    } else {
+                        // last element
+                        value = value[value.length - 1];
+                    }
+
+                    this.valueStack = {
+                        value,
+                        prev: this.valueStack
+                    };
+                }
+            } else /* this.flushDepth < this.lastFlushDepth */ {
+                fragment = this.prepareAddition(fragment);
+
+                // Add missed opening brackets/parentheses
+                for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
+                    this.jsonParseOffset--;
+                    fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;
+                }
+
+                this.parseAndAppend(fragment, false);
+
+                for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
+                    this.valueStack = this.valueStack.prev;
+                }
+            }
+
+            this.lastFlushDepth = this.flushDepth;
+        }
+
+        push(chunk) {
+            if (typeof chunk !== 'string') {
+                // Suppose chunk is Buffer or Uint8Array
+
+                // Prepend uncompleted byte sequence if any
+                if (this.pendingByteSeq !== null) {
+                    const origRawChunk = chunk;
+                    chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
+                    chunk.set(this.pendingByteSeq);
+                    chunk.set(origRawChunk, this.pendingByteSeq.length);
+                    this.pendingByteSeq = null;
+                }
+
+                // In case Buffer/Uint8Array, an input is encoded in UTF8
+                // Seek for parts of uncompleted UTF8 symbol on the ending
+                // This makes sense only if we expect more chunks and last char is not multi-bytes
+                if (chunk[chunk.length - 1] > 127) {
+                    for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
+                        const byte = chunk[chunk.length - 1 - seqLength];
+
+                        // 10xxxxxx - 2nd, 3rd or 4th byte
+                        // 110xxxxx – first byte of 2-byte sequence
+                        // 1110xxxx - first byte of 3-byte sequence
+                        // 11110xxx - first byte of 4-byte sequence
+                        if (byte >> 6 === 3) {
+                            seqLength++;
+
+                            // If the sequence is really incomplete, then preserve it
+                            // for the future chunk and cut off it from the current chunk
+                            if ((seqLength !== 4 && byte >> 3 === 0b11110) ||
+                                (seqLength !== 3 && byte >> 4 === 0b1110) ||
+                                (seqLength !== 2 && byte >> 5 === 0b110)) {
+                                this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
+                                chunk = chunk.slice(0, -seqLength);
+                            }
+
+                            break;
+                        }
+                    }
+                }
+
+                // Convert chunk to a string, since single decode per chunk
+                // is much effective than decode multiple small substrings
+                chunk = decoder.decode(chunk);
+            }
+
+            const chunkLength = chunk.length;
+            let lastFlushPoint = 0;
+            let flushPoint = 0;
+
+            // Main scan loop
+            scan: for (let i = 0; i < chunkLength; i++) {
+                if (this.stateString) {
+                    for (; i < chunkLength; i++) {
+                        if (this.stateStringEscape) {
+                            this.stateStringEscape = false;
+                        } else {
+                            switch (chunk.charCodeAt(i)) {
+                                case 0x22: /* " */
+                                    this.stateString = false;
+                                    continue scan;
+
+                                case 0x5C: /* \ */
+                                    this.stateStringEscape = true;
+                            }
+                        }
+                    }
+
+                    break;
+                }
+
+                switch (chunk.charCodeAt(i)) {
+                    case 0x22: /* " */
+                        this.stateString = true;
+                        this.stateStringEscape = false;
+                        break;
+
+                    case 0x2C: /* , */
+                        flushPoint = i;
+                        break;
+
+                    case 0x7B: /* { */
+                        // Open an object
+                        flushPoint = i + 1;
+                        this.stack[this.flushDepth++] = STACK_OBJECT;
+                        break;
+
+                    case 0x5B: /* [ */
+                        // Open an array
+                        flushPoint = i + 1;
+                        this.stack[this.flushDepth++] = STACK_ARRAY;
+                        break;
+
+                    case 0x5D: /* ] */
+                    case 0x7D: /* } */
+                        // Close an object or array
+                        flushPoint = i + 1;
+                        this.flushDepth--;
+
+                        if (this.flushDepth < this.lastFlushDepth) {
+                            this.flush(chunk, lastFlushPoint, flushPoint);
+                            lastFlushPoint = flushPoint;
+                        }
+
+                        break;
+
+                    case 0x09: /* \t */
+                    case 0x0A: /* \n */
+                    case 0x0D: /* \r */
+                    case 0x20: /* space */
+                        // Move points forward when they points on current position and it's a whitespace
+                        if (lastFlushPoint === i) {
+                            lastFlushPoint++;
+                        }
+
+                        if (flushPoint === i) {
+                            flushPoint++;
+                        }
+
+                        break;
+                }
+            }
+
+            if (flushPoint > lastFlushPoint) {
+                this.flush(chunk, lastFlushPoint, flushPoint);
+            }
+
+            // Produce pendingChunk if something left
+            if (flushPoint < chunkLength) {
+                if (this.pendingChunk !== null) {
+                    // When there is already a pending chunk then no flush happened,
+                    // appending entire chunk to pending one
+                    this.pendingChunk += chunk;
+                } else {
+                    // Create a pending chunk, it will start with non-whitespace since
+                    // flushPoint was moved forward away from whitespaces on scan
+                    this.pendingChunk = chunk.slice(flushPoint, chunkLength);
+                }
+            }
+
+            this.chunkOffset += chunkLength;
+        }
+
+        finish() {
+            if (this.pendingChunk !== null) {
+                this.flush('', 0, 0);
+                this.pendingChunk = null;
+            }
+
+            return this.value;
+        }
+    }
+
+    var src = {
+        version: version,
+        stringifyInfo: stringifyInfo,
+        stringifyStream: stringifyStreamBrowser,
+        parseChunked: parseChunked
+    };
+
+    return src;
+
+}));

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
js/node_modules/@discoveryjs/json-ext/dist/json-ext.min.js


+ 1 - 0
js/node_modules/@discoveryjs/json-ext/dist/version.js

@@ -0,0 +1 @@
+module.exports = "0.5.7";

+ 31 - 0
js/node_modules/@discoveryjs/json-ext/index.d.ts

@@ -0,0 +1,31 @@
+declare module '@discoveryjs/json-ext' {
+    import { Readable } from 'stream';
+
+    type TReplacer =
+        | ((this: any, key: string, value: any) => any)
+        | string[]
+        | number[]
+        | null;
+    type TSpace = string | number | null;
+    type TChunk = string | Buffer | Uint8Array;
+
+    export function parseChunked(input: Readable): Promise<any>;
+    export function parseChunked(input: () => (Iterable<TChunk> | AsyncIterable<TChunk>)): Promise<any>;
+
+    export function stringifyStream(value: any, replacer?: TReplacer, space?: TSpace): Readable;
+
+    export function stringifyInfo(
+        value: any,
+        replacer?: TReplacer,
+        space?: TSpace,
+        options?: {
+            async?: boolean;
+            continueOnCircular?: boolean;
+        }
+    ): {
+        minLength: number;
+        circular: any[];
+        duplicate: any[];
+        async: any[];
+    };
+}

+ 93 - 0
js/node_modules/@discoveryjs/json-ext/package.json

@@ -0,0 +1,93 @@
+{
+  "_from": "@discoveryjs/json-ext@^0.5.0",
+  "_id": "@discoveryjs/json-ext@0.5.7",
+  "_inBundle": false,
+  "_integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
+  "_location": "/@discoveryjs/json-ext",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@discoveryjs/json-ext@^0.5.0",
+    "name": "@discoveryjs/json-ext",
+    "escapedName": "@discoveryjs%2fjson-ext",
+    "scope": "@discoveryjs",
+    "rawSpec": "^0.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^0.5.0"
+  },
+  "_requiredBy": [
+    "/webpack-cli"
+  ],
+  "_resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
+  "_shasum": "1d572bfbbe14b7704e0ba0f39b74815b84870d70",
+  "_spec": "@discoveryjs/json-ext@^0.5.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/webpack-cli",
+  "author": {
+    "name": "Roman Dvornov",
+    "email": "rdvornov@gmail.com",
+    "url": "https://github.com/lahmatiy"
+  },
+  "browser": {
+    "./src/stringify-stream.js": "./src/stringify-stream-browser.js",
+    "./src/text-decoder.js": "./src/text-decoder-browser.js",
+    "./src/version.js": "./dist/version.js"
+  },
+  "bugs": {
+    "url": "https://github.com/discoveryjs/json-ext/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A set of utilities that extend the use of JSON",
+  "devDependencies": {
+    "@rollup/plugin-commonjs": "^15.1.0",
+    "@rollup/plugin-json": "^4.1.0",
+    "@rollup/plugin-node-resolve": "^9.0.0",
+    "c8": "^7.10.0",
+    "chalk": "^4.1.0",
+    "cross-env": "^7.0.3",
+    "eslint": "^8.10.0",
+    "mocha": "^8.4.0",
+    "rollup": "^2.28.2",
+    "rollup-plugin-terser": "^7.0.2"
+  },
+  "engines": {
+    "node": ">=10.0.0"
+  },
+  "files": [
+    "dist",
+    "src",
+    "index.d.ts"
+  ],
+  "homepage": "https://github.com/discoveryjs/json-ext#readme",
+  "keywords": [
+    "json",
+    "utils",
+    "stream",
+    "async",
+    "promise",
+    "stringify",
+    "info"
+  ],
+  "license": "MIT",
+  "main": "./src/index",
+  "name": "@discoveryjs/json-ext",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/discoveryjs/json-ext.git"
+  },
+  "scripts": {
+    "build": "rollup --config",
+    "build-and-test": "npm run build && npm run test:dist",
+    "coverage": "c8 --reporter=lcovonly npm test",
+    "lint": "eslint src test",
+    "lint-and-test": "npm run lint && npm test",
+    "prepublishOnly": "npm run lint && npm test && npm run build-and-test",
+    "test": "mocha --reporter progress",
+    "test:all": "npm run test:src && npm run test:dist",
+    "test:dist": "cross-env MODE=dist npm test && cross-env MODE=dist-min npm test",
+    "test:src": "npm test"
+  },
+  "types": "./index.d.ts",
+  "version": "0.5.7"
+}

+ 6 - 0
js/node_modules/@discoveryjs/json-ext/src/index.js

@@ -0,0 +1,6 @@
+module.exports = {
+    version: require('./version'),
+    stringifyInfo: require('./stringify-info'),
+    stringifyStream: require('./stringify-stream'),
+    parseChunked: require('./parse-chunked')
+};

+ 384 - 0
js/node_modules/@discoveryjs/json-ext/src/parse-chunked.js

@@ -0,0 +1,384 @@
+const { isReadableStream } = require('./utils');
+const TextDecoder = require('./text-decoder');
+
+const STACK_OBJECT = 1;
+const STACK_ARRAY = 2;
+const decoder = new TextDecoder();
+
+function isObject(value) {
+    return value !== null && typeof value === 'object';
+}
+
+function adjustPosition(error, parser) {
+    if (error.name === 'SyntaxError' && parser.jsonParseOffset) {
+        error.message = error.message.replace(/at position (\d+)/, (_, pos) =>
+            'at position ' + (Number(pos) + parser.jsonParseOffset)
+        );
+    }
+
+    return error;
+}
+
+function append(array, elements) {
+    // Note: Avoid to use array.push(...elements) since it may lead to
+    // "RangeError: Maximum call stack size exceeded" for a long arrays
+    const initialLength = array.length;
+    array.length += elements.length;
+
+    for (let i = 0; i < elements.length; i++) {
+        array[initialLength + i] = elements[i];
+    }
+}
+
+module.exports = function(chunkEmitter) {
+    let parser = new ChunkParser();
+
+    if (isObject(chunkEmitter) && isReadableStream(chunkEmitter)) {
+        return new Promise((resolve, reject) => {
+            chunkEmitter
+                .on('data', chunk => {
+                    try {
+                        parser.push(chunk);
+                    } catch (e) {
+                        reject(adjustPosition(e, parser));
+                        parser = null;
+                    }
+                })
+                .on('error', (e) => {
+                    parser = null;
+                    reject(e);
+                })
+                .on('end', () => {
+                    try {
+                        resolve(parser.finish());
+                    } catch (e) {
+                        reject(adjustPosition(e, parser));
+                    } finally {
+                        parser = null;
+                    }
+                });
+        });
+    }
+
+    if (typeof chunkEmitter === 'function') {
+        const iterator = chunkEmitter();
+
+        if (isObject(iterator) && (Symbol.iterator in iterator || Symbol.asyncIterator in iterator)) {
+            return new Promise(async (resolve, reject) => {
+                try {
+                    for await (const chunk of iterator) {
+                        parser.push(chunk);
+                    }
+
+                    resolve(parser.finish());
+                } catch (e) {
+                    reject(adjustPosition(e, parser));
+                } finally {
+                    parser = null;
+                }
+            });
+        }
+    }
+
+    throw new Error(
+        'Chunk emitter should be readable stream, generator, ' +
+        'async generator or function returning an iterable object'
+    );
+};
+
+class ChunkParser {
+    constructor() {
+        this.value = undefined;
+        this.valueStack = null;
+
+        this.stack = new Array(100);
+        this.lastFlushDepth = 0;
+        this.flushDepth = 0;
+        this.stateString = false;
+        this.stateStringEscape = false;
+        this.pendingByteSeq = null;
+        this.pendingChunk = null;
+        this.chunkOffset = 0;
+        this.jsonParseOffset = 0;
+    }
+
+    parseAndAppend(fragment, wrap) {
+        // Append new entries or elements
+        if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
+            if (wrap) {
+                this.jsonParseOffset--;
+                fragment = '{' + fragment + '}';
+            }
+
+            Object.assign(this.valueStack.value, JSON.parse(fragment));
+        } else {
+            if (wrap) {
+                this.jsonParseOffset--;
+                fragment = '[' + fragment + ']';
+            }
+
+            append(this.valueStack.value, JSON.parse(fragment));
+        }
+    }
+
+    prepareAddition(fragment) {
+        const { value } = this.valueStack;
+        const expectComma = Array.isArray(value)
+            ? value.length !== 0
+            : Object.keys(value).length !== 0;
+
+        if (expectComma) {
+            // Skip a comma at the beginning of fragment, otherwise it would
+            // fail to parse
+            if (fragment[0] === ',') {
+                this.jsonParseOffset++;
+                return fragment.slice(1);
+            }
+
+            // When value (an object or array) is not empty and a fragment
+            // doesn't start with a comma, a single valid fragment starting
+            // is a closing bracket. If it's not, a prefix is adding to fail
+            // parsing. Otherwise, the sequence of chunks can be successfully
+            // parsed, although it should not, e.g. ["[{}", "{}]"]
+            if (fragment[0] !== '}' && fragment[0] !== ']') {
+                this.jsonParseOffset -= 3;
+                return '[[]' + fragment;
+            }
+        }
+
+        return fragment;
+    }
+
+    flush(chunk, start, end) {
+        let fragment = chunk.slice(start, end);
+
+        // Save position correction an error in JSON.parse() if any
+        this.jsonParseOffset = this.chunkOffset + start;
+
+        // Prepend pending chunk if any
+        if (this.pendingChunk !== null) {
+            fragment = this.pendingChunk + fragment;
+            this.jsonParseOffset -= this.pendingChunk.length;
+            this.pendingChunk = null;
+        }
+
+        if (this.flushDepth === this.lastFlushDepth) {
+            // Depth didn't changed, so it's a root value or entry/element set
+            if (this.flushDepth > 0) {
+                this.parseAndAppend(this.prepareAddition(fragment), true);
+            } else {
+                // That's an entire value on a top level
+                this.value = JSON.parse(fragment);
+                this.valueStack = {
+                    value: this.value,
+                    prev: null
+                };
+            }
+        } else if (this.flushDepth > this.lastFlushDepth) {
+            // Add missed closing brackets/parentheses
+            for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
+                fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';
+            }
+
+            if (this.lastFlushDepth === 0) {
+                // That's a root value
+                this.value = JSON.parse(fragment);
+                this.valueStack = {
+                    value: this.value,
+                    prev: null
+                };
+            } else {
+                this.parseAndAppend(this.prepareAddition(fragment), true);
+            }
+
+            // Move down to the depths to the last object/array, which is current now
+            for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
+                let value = this.valueStack.value;
+
+                if (this.stack[i - 1] === STACK_OBJECT) {
+                    // find last entry
+                    let key;
+                    // eslint-disable-next-line curly
+                    for (key in value);
+                    value = value[key];
+                } else {
+                    // last element
+                    value = value[value.length - 1];
+                }
+
+                this.valueStack = {
+                    value,
+                    prev: this.valueStack
+                };
+            }
+        } else /* this.flushDepth < this.lastFlushDepth */ {
+            fragment = this.prepareAddition(fragment);
+
+            // Add missed opening brackets/parentheses
+            for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
+                this.jsonParseOffset--;
+                fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;
+            }
+
+            this.parseAndAppend(fragment, false);
+
+            for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
+                this.valueStack = this.valueStack.prev;
+            }
+        }
+
+        this.lastFlushDepth = this.flushDepth;
+    }
+
+    push(chunk) {
+        if (typeof chunk !== 'string') {
+            // Suppose chunk is Buffer or Uint8Array
+
+            // Prepend uncompleted byte sequence if any
+            if (this.pendingByteSeq !== null) {
+                const origRawChunk = chunk;
+                chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
+                chunk.set(this.pendingByteSeq);
+                chunk.set(origRawChunk, this.pendingByteSeq.length);
+                this.pendingByteSeq = null;
+            }
+
+            // In case Buffer/Uint8Array, an input is encoded in UTF8
+            // Seek for parts of uncompleted UTF8 symbol on the ending
+            // This makes sense only if we expect more chunks and last char is not multi-bytes
+            if (chunk[chunk.length - 1] > 127) {
+                for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
+                    const byte = chunk[chunk.length - 1 - seqLength];
+
+                    // 10xxxxxx - 2nd, 3rd or 4th byte
+                    // 110xxxxx – first byte of 2-byte sequence
+                    // 1110xxxx - first byte of 3-byte sequence
+                    // 11110xxx - first byte of 4-byte sequence
+                    if (byte >> 6 === 3) {
+                        seqLength++;
+
+                        // If the sequence is really incomplete, then preserve it
+                        // for the future chunk and cut off it from the current chunk
+                        if ((seqLength !== 4 && byte >> 3 === 0b11110) ||
+                            (seqLength !== 3 && byte >> 4 === 0b1110) ||
+                            (seqLength !== 2 && byte >> 5 === 0b110)) {
+                            this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
+                            chunk = chunk.slice(0, -seqLength);
+                        }
+
+                        break;
+                    }
+                }
+            }
+
+            // Convert chunk to a string, since single decode per chunk
+            // is much effective than decode multiple small substrings
+            chunk = decoder.decode(chunk);
+        }
+
+        const chunkLength = chunk.length;
+        let lastFlushPoint = 0;
+        let flushPoint = 0;
+
+        // Main scan loop
+        scan: for (let i = 0; i < chunkLength; i++) {
+            if (this.stateString) {
+                for (; i < chunkLength; i++) {
+                    if (this.stateStringEscape) {
+                        this.stateStringEscape = false;
+                    } else {
+                        switch (chunk.charCodeAt(i)) {
+                            case 0x22: /* " */
+                                this.stateString = false;
+                                continue scan;
+
+                            case 0x5C: /* \ */
+                                this.stateStringEscape = true;
+                        }
+                    }
+                }
+
+                break;
+            }
+
+            switch (chunk.charCodeAt(i)) {
+                case 0x22: /* " */
+                    this.stateString = true;
+                    this.stateStringEscape = false;
+                    break;
+
+                case 0x2C: /* , */
+                    flushPoint = i;
+                    break;
+
+                case 0x7B: /* { */
+                    // Open an object
+                    flushPoint = i + 1;
+                    this.stack[this.flushDepth++] = STACK_OBJECT;
+                    break;
+
+                case 0x5B: /* [ */
+                    // Open an array
+                    flushPoint = i + 1;
+                    this.stack[this.flushDepth++] = STACK_ARRAY;
+                    break;
+
+                case 0x5D: /* ] */
+                case 0x7D: /* } */
+                    // Close an object or array
+                    flushPoint = i + 1;
+                    this.flushDepth--;
+
+                    if (this.flushDepth < this.lastFlushDepth) {
+                        this.flush(chunk, lastFlushPoint, flushPoint);
+                        lastFlushPoint = flushPoint;
+                    }
+
+                    break;
+
+                case 0x09: /* \t */
+                case 0x0A: /* \n */
+                case 0x0D: /* \r */
+                case 0x20: /* space */
+                    // Move points forward when they points on current position and it's a whitespace
+                    if (lastFlushPoint === i) {
+                        lastFlushPoint++;
+                    }
+
+                    if (flushPoint === i) {
+                        flushPoint++;
+                    }
+
+                    break;
+            }
+        }
+
+        if (flushPoint > lastFlushPoint) {
+            this.flush(chunk, lastFlushPoint, flushPoint);
+        }
+
+        // Produce pendingChunk if something left
+        if (flushPoint < chunkLength) {
+            if (this.pendingChunk !== null) {
+                // When there is already a pending chunk then no flush happened,
+                // appending entire chunk to pending one
+                this.pendingChunk += chunk;
+            } else {
+                // Create a pending chunk, it will start with non-whitespace since
+                // flushPoint was moved forward away from whitespaces on scan
+                this.pendingChunk = chunk.slice(flushPoint, chunkLength);
+            }
+        }
+
+        this.chunkOffset += chunkLength;
+    }
+
+    finish() {
+        if (this.pendingChunk !== null) {
+            this.flush('', 0, 0);
+            this.pendingChunk = null;
+        }
+
+        return this.value;
+    }
+};

+ 231 - 0
js/node_modules/@discoveryjs/json-ext/src/stringify-info.js

@@ -0,0 +1,231 @@
+const {
+    normalizeReplacer,
+    normalizeSpace,
+    replaceValue,
+    getTypeNative,
+    getTypeAsync,
+    isLeadingSurrogate,
+    isTrailingSurrogate,
+    escapableCharCodeSubstitution,
+    type: {
+        PRIMITIVE,
+        OBJECT,
+        ARRAY,
+        PROMISE,
+        STRING_STREAM,
+        OBJECT_STREAM
+    }
+} = require('./utils');
+const charLength2048 = Array.from({ length: 2048 }).map((_, code) => {
+    if (escapableCharCodeSubstitution.hasOwnProperty(code)) {
+        return 2; // \X
+    }
+
+    if (code < 0x20) {
+        return 6; // \uXXXX
+    }
+
+    return code < 128 ? 1 : 2; // UTF8 bytes
+});
+
+function stringLength(str) {
+    let len = 0;
+    let prevLeadingSurrogate = false;
+
+    for (let i = 0; i < str.length; i++) {
+        const code = str.charCodeAt(i);
+
+        if (code < 2048) {
+            len += charLength2048[code];
+        } else if (isLeadingSurrogate(code)) {
+            len += 6; // \uXXXX since no pair with trailing surrogate yet
+            prevLeadingSurrogate = true;
+            continue;
+        } else if (isTrailingSurrogate(code)) {
+            len = prevLeadingSurrogate
+                ? len - 2  // surrogate pair (4 bytes), since we calculate prev leading surrogate as 6 bytes, substruct 2 bytes
+                : len + 6; // \uXXXX
+        } else {
+            len += 3; // code >= 2048 is 3 bytes length for UTF8
+        }
+
+        prevLeadingSurrogate = false;
+    }
+
+    return len + 2; // +2 for quotes
+}
+
+function primitiveLength(value) {
+    switch (typeof value) {
+        case 'string':
+            return stringLength(value);
+
+        case 'number':
+            return Number.isFinite(value) ? String(value).length : 4 /* null */;
+
+        case 'boolean':
+            return value ? 4 /* true */ : 5 /* false */;
+
+        case 'undefined':
+        case 'object':
+            return 4; /* null */
+
+        default:
+            return 0;
+    }
+}
+
+function spaceLength(space) {
+    space = normalizeSpace(space);
+    return typeof space === 'string' ? space.length : 0;
+}
+
+module.exports = function jsonStringifyInfo(value, replacer, space, options) {
+    function walk(holder, key, value) {
+        if (stop) {
+            return;
+        }
+
+        value = replaceValue(holder, key, value, replacer);
+
+        let type = getType(value);
+
+        // check for circular structure
+        if (type !== PRIMITIVE && stack.has(value)) {
+            circular.add(value);
+            length += 4; // treat as null
+
+            if (!options.continueOnCircular) {
+                stop = true;
+            }
+
+            return;
+        }
+
+        switch (type) {
+            case PRIMITIVE:
+                if (value !== undefined || Array.isArray(holder)) {
+                    length += primitiveLength(value);
+                } else if (holder === root) {
+                    length += 9; // FIXME: that's the length of undefined, should we normalize behaviour to convert it to null?
+                }
+                break;
+
+            case OBJECT: {
+                if (visited.has(value)) {
+                    duplicate.add(value);
+                    length += visited.get(value);
+                    break;
+                }
+
+                const valueLength = length;
+                let entries = 0;
+
+                length += 2; // {}
+
+                stack.add(value);
+
+                for (const key in value) {
+                    if (hasOwnProperty.call(value, key) && (allowlist === null || allowlist.has(key))) {
+                        const prevLength = length;
+                        walk(value, key, value[key]);
+
+                        if (prevLength !== length) {
+                            // value is printed
+                            length += stringLength(key) + 1; // "key":
+                            entries++;
+                        }
+                    }
+                }
+
+                if (entries > 1) {
+                    length += entries - 1; // commas
+                }
+
+                stack.delete(value);
+
+                if (space > 0 && entries > 0) {
+                    length += (1 + (stack.size + 1) * space + 1) * entries; // for each key-value: \n{space}
+                    length += 1 + stack.size * space; // for }
+                }
+
+                visited.set(value, length - valueLength);
+
+                break;
+            }
+
+            case ARRAY: {
+                if (visited.has(value)) {
+                    duplicate.add(value);
+                    length += visited.get(value);
+                    break;
+                }
+
+                const valueLength = length;
+
+                length += 2; // []
+
+                stack.add(value);
+
+                for (let i = 0; i < value.length; i++) {
+                    walk(value, i, value[i]);
+                }
+
+                if (value.length > 1) {
+                    length += value.length - 1; // commas
+                }
+
+                stack.delete(value);
+
+                if (space > 0 && value.length > 0) {
+                    length += (1 + (stack.size + 1) * space) * value.length; // for each element: \n{space}
+                    length += 1 + stack.size * space; // for ]
+                }
+
+                visited.set(value, length - valueLength);
+
+                break;
+            }
+
+            case PROMISE:
+            case STRING_STREAM:
+                async.add(value);
+                break;
+
+            case OBJECT_STREAM:
+                length += 2; // []
+                async.add(value);
+                break;
+        }
+    }
+
+    let allowlist = null;
+    replacer = normalizeReplacer(replacer);
+
+    if (Array.isArray(replacer)) {
+        allowlist = new Set(replacer);
+        replacer = null;
+    }
+
+    space = spaceLength(space);
+    options = options || {};
+
+    const visited = new Map();
+    const stack = new Set();
+    const duplicate = new Set();
+    const circular = new Set();
+    const async = new Set();
+    const getType = options.async ? getTypeAsync : getTypeNative;
+    const root = { '': value };
+    let stop = false;
+    let length = 0;
+
+    walk(root, '', value);
+
+    return {
+        minLength: isNaN(length) ? Infinity : length,
+        circular: [...circular],
+        duplicate: [...duplicate],
+        async: [...async]
+    };
+};

+ 3 - 0
js/node_modules/@discoveryjs/json-ext/src/stringify-stream-browser.js

@@ -0,0 +1,3 @@
+module.exports = () => {
+    throw new Error('Method is not supported');
+};

+ 408 - 0
js/node_modules/@discoveryjs/json-ext/src/stringify-stream.js

@@ -0,0 +1,408 @@
+const { Readable } = require('stream');
+const {
+    normalizeReplacer,
+    normalizeSpace,
+    replaceValue,
+    getTypeAsync,
+    type: {
+        PRIMITIVE,
+        OBJECT,
+        ARRAY,
+        PROMISE,
+        STRING_STREAM,
+        OBJECT_STREAM
+    }
+} = require('./utils');
+const noop = () => {};
+const hasOwnProperty = Object.prototype.hasOwnProperty;
+
+// TODO: Remove when drop support for Node.js 10
+// Node.js 10 has no well-formed JSON.stringify()
+// https://github.com/tc39/proposal-well-formed-stringify
+// Adopted code from https://bugs.chromium.org/p/v8/issues/detail?id=7782#c12
+const wellformedStringStringify = JSON.stringify('\ud800') === '"\\ud800"'
+    ? JSON.stringify
+    : s => JSON.stringify(s).replace(
+        /\p{Surrogate}/gu,
+        m => `\\u${m.charCodeAt(0).toString(16)}`
+    );
+
+function push() {
+    this.push(this._stack.value);
+    this.popStack();
+}
+
+function pushPrimitive(value) {
+    switch (typeof value) {
+        case 'string':
+            this.push(this.encodeString(value));
+            break;
+
+        case 'number':
+            this.push(Number.isFinite(value) ? this.encodeNumber(value) : 'null');
+            break;
+
+        case 'boolean':
+            this.push(value ? 'true' : 'false');
+            break;
+
+        case 'undefined':
+        case 'object': // typeof null === 'object'
+            this.push('null');
+            break;
+
+        default:
+            this.destroy(new TypeError(`Do not know how to serialize a ${value.constructor && value.constructor.name || typeof value}`));
+    }
+}
+
+function processObjectEntry(key) {
+    const current = this._stack;
+
+    if (!current.first) {
+        current.first = true;
+    } else {
+        this.push(',');
+    }
+
+    if (this.space) {
+        this.push(`\n${this.space.repeat(this._depth)}${this.encodeString(key)}: `);
+    } else {
+        this.push(this.encodeString(key) + ':');
+    }
+}
+
+function processObject() {
+    const current = this._stack;
+
+    // when no keys left, remove obj from stack
+    if (current.index === current.keys.length) {
+        if (this.space && current.first) {
+            this.push(`\n${this.space.repeat(this._depth - 1)}}`);
+        } else {
+            this.push('}');
+        }
+
+        this.popStack();
+        return;
+    }
+
+    const key = current.keys[current.index];
+
+    this.processValue(current.value, key, current.value[key], processObjectEntry);
+    current.index++;
+}
+
+function processArrayItem(index) {
+    if (index !== 0) {
+        this.push(',');
+    }
+
+    if (this.space) {
+        this.push(`\n${this.space.repeat(this._depth)}`);
+    }
+}
+
+function processArray() {
+    const current = this._stack;
+
+    if (current.index === current.value.length) {
+        if (this.space && current.index > 0) {
+            this.push(`\n${this.space.repeat(this._depth - 1)}]`);
+        } else {
+            this.push(']');
+        }
+
+        this.popStack();
+        return;
+    }
+
+    this.processValue(current.value, current.index, current.value[current.index], processArrayItem);
+    current.index++;
+}
+
+function createStreamReader(fn) {
+    return function() {
+        const current = this._stack;
+        const data = current.value.read(this._readSize);
+
+        if (data !== null) {
+            current.first = false;
+            fn.call(this, data, current);
+        } else {
+            if ((current.first && !current.value._readableState.reading) || current.ended) {
+                this.popStack();
+            } else {
+                current.first = true;
+                current.awaiting = true;
+            }
+        }
+    };
+}
+
+const processReadableObject = createStreamReader(function(data, current) {
+    this.processValue(current.value, current.index, data, processArrayItem);
+    current.index++;
+});
+
+const processReadableString = createStreamReader(function(data) {
+    this.push(data);
+});
+
+class JsonStringifyStream extends Readable {
+    constructor(value, replacer, space) {
+        super({
+            autoDestroy: true
+        });
+
+        this.getKeys = Object.keys;
+        this.replacer = normalizeReplacer(replacer);
+
+        if (Array.isArray(this.replacer)) {
+            const allowlist = this.replacer;
+
+            this.getKeys = (value) => allowlist.filter(key => hasOwnProperty.call(value, key));
+            this.replacer = null;
+        }
+
+        this.space = normalizeSpace(space);
+        this._depth = 0;
+
+        this.error = null;
+        this._processing = false;
+        this._ended = false;
+
+        this._readSize = 0;
+        this._buffer = '';
+
+        this._stack = null;
+        this._visited = new WeakSet();
+
+        this.pushStack({
+            handler: () => {
+                this.popStack();
+                this.processValue({ '': value }, '', value, noop);
+            }
+        });
+    }
+
+    encodeString(value) {
+        if (/[^\x20-\uD799]|[\x22\x5c]/.test(value)) {
+            return wellformedStringStringify(value);
+        }
+
+        return '"' + value + '"';
+    }
+
+    encodeNumber(value) {
+        return value;
+    }
+
+    processValue(holder, key, value, callback) {
+        value = replaceValue(holder, key, value, this.replacer);
+
+        let type = getTypeAsync(value);
+
+        switch (type) {
+            case PRIMITIVE:
+                if (callback !== processObjectEntry || value !== undefined) {
+                    callback.call(this, key);
+                    pushPrimitive.call(this, value);
+                }
+                break;
+
+            case OBJECT:
+                callback.call(this, key);
+
+                // check for circular structure
+                if (this._visited.has(value)) {
+                    return this.destroy(new TypeError('Converting circular structure to JSON'));
+                }
+
+                this._visited.add(value);
+                this._depth++;
+                this.push('{');
+                this.pushStack({
+                    handler: processObject,
+                    value,
+                    index: 0,
+                    first: false,
+                    keys: this.getKeys(value)
+                });
+                break;
+
+            case ARRAY:
+                callback.call(this, key);
+
+                // check for circular structure
+                if (this._visited.has(value)) {
+                    return this.destroy(new TypeError('Converting circular structure to JSON'));
+                }
+
+                this._visited.add(value);
+
+                this.push('[');
+                this.pushStack({
+                    handler: processArray,
+                    value,
+                    index: 0
+                });
+                this._depth++;
+                break;
+
+            case PROMISE:
+                this.pushStack({
+                    handler: noop,
+                    awaiting: true
+                });
+
+                Promise.resolve(value)
+                    .then(resolved => {
+                        this.popStack();
+                        this.processValue(holder, key, resolved, callback);
+                        this.processStack();
+                    })
+                    .catch(error => {
+                        this.destroy(error);
+                    });
+                break;
+
+            case STRING_STREAM:
+            case OBJECT_STREAM:
+                callback.call(this, key);
+
+                // TODO: Remove when drop support for Node.js 10
+                // Used `_readableState.endEmitted` as fallback, since Node.js 10 has no `readableEnded` getter
+                if (value.readableEnded || value._readableState.endEmitted) {
+                    return this.destroy(new Error('Readable Stream has ended before it was serialized. All stream data have been lost'));
+                }
+
+                if (value.readableFlowing) {
+                    return this.destroy(new Error('Readable Stream is in flowing mode, data may have been lost. Trying to pause stream.'));
+                }
+
+                if (type === OBJECT_STREAM) {
+                    this.push('[');
+                    this.pushStack({
+                        handler: push,
+                        value: this.space ? '\n' + this.space.repeat(this._depth) + ']' : ']'
+                    });
+                    this._depth++;
+                }
+
+                const self = this.pushStack({
+                    handler: type === OBJECT_STREAM ? processReadableObject : processReadableString,
+                    value,
+                    index: 0,
+                    first: false,
+                    ended: false,
+                    awaiting: !value.readable || value.readableLength === 0
+                });
+                const continueProcessing = () => {
+                    if (self.awaiting) {
+                        self.awaiting = false;
+                        this.processStack();
+                    }
+                };
+
+                value.once('error', error => this.destroy(error));
+                value.once('end', () => {
+                    self.ended = true;
+                    continueProcessing();
+                });
+                value.on('readable', continueProcessing);
+                break;
+        }
+    }
+
+    pushStack(node) {
+        node.prev = this._stack;
+        return this._stack = node;
+    }
+
+    popStack() {
+        const { handler, value } = this._stack;
+
+        if (handler === processObject || handler === processArray || handler === processReadableObject) {
+            this._visited.delete(value);
+            this._depth--;
+        }
+
+        this._stack = this._stack.prev;
+    }
+
+    processStack() {
+        if (this._processing || this._ended) {
+            return;
+        }
+
+        try {
+            this._processing = true;
+
+            while (this._stack !== null && !this._stack.awaiting) {
+                this._stack.handler.call(this);
+
+                if (!this._processing) {
+                    return;
+                }
+            }
+
+            this._processing = false;
+        } catch (error) {
+            this.destroy(error);
+            return;
+        }
+
+        if (this._stack === null && !this._ended) {
+            this._finish();
+            this.push(null);
+        }
+    }
+
+    push(data) {
+        if (data !== null) {
+            this._buffer += data;
+
+            // check buffer overflow
+            if (this._buffer.length < this._readSize) {
+                return;
+            }
+
+            // flush buffer
+            data = this._buffer;
+            this._buffer = '';
+            this._processing = false;
+        }
+
+        super.push(data);
+    }
+
+    _read(size) {
+        // start processing
+        this._readSize = size || this.readableHighWaterMark;
+        this.processStack();
+    }
+
+    _finish() {
+        this._ended = true;
+        this._processing = false;
+        this._stack = null;
+        this._visited = null;
+
+        if (this._buffer && this._buffer.length) {
+            super.push(this._buffer); // flush buffer
+        }
+
+        this._buffer = '';
+    }
+
+    _destroy(error, cb) {
+        this.error = this.error || error;
+        this._finish();
+        cb(error);
+    }
+}
+
+module.exports = function createJsonStringifyStream(value, replacer, space) {
+    return new JsonStringifyStream(value, replacer, space);
+};

+ 1 - 0
js/node_modules/@discoveryjs/json-ext/src/text-decoder-browser.js

@@ -0,0 +1 @@
+module.exports = TextDecoder;

+ 1 - 0
js/node_modules/@discoveryjs/json-ext/src/text-decoder.js

@@ -0,0 +1 @@
+module.exports = require('util').TextDecoder;

+ 149 - 0
js/node_modules/@discoveryjs/json-ext/src/utils.js

@@ -0,0 +1,149 @@
+const PrimitiveType = 1;
+const ObjectType = 2;
+const ArrayType = 3;
+const PromiseType = 4;
+const ReadableStringType = 5;
+const ReadableObjectType = 6;
+// https://tc39.es/ecma262/#table-json-single-character-escapes
+const escapableCharCodeSubstitution = { // JSON Single Character Escape Sequences
+    0x08: '\\b',
+    0x09: '\\t',
+    0x0a: '\\n',
+    0x0c: '\\f',
+    0x0d: '\\r',
+    0x22: '\\\"',
+    0x5c: '\\\\'
+};
+
+function isLeadingSurrogate(code) {
+    return code >= 0xD800 && code <= 0xDBFF;
+}
+
+function isTrailingSurrogate(code) {
+    return code >= 0xDC00 && code <= 0xDFFF;
+}
+
+function isReadableStream(value) {
+    return (
+        typeof value.pipe === 'function' &&
+        typeof value._read === 'function' &&
+        typeof value._readableState === 'object' && value._readableState !== null
+    );
+}
+
+function replaceValue(holder, key, value, replacer) {
+    if (value && typeof value.toJSON === 'function') {
+        value = value.toJSON();
+    }
+
+    if (replacer !== null) {
+        value = replacer.call(holder, String(key), value);
+    }
+
+    switch (typeof value) {
+        case 'function':
+        case 'symbol':
+            value = undefined;
+            break;
+
+        case 'object':
+            if (value !== null) {
+                const cls = value.constructor;
+                if (cls === String || cls === Number || cls === Boolean) {
+                    value = value.valueOf();
+                }
+            }
+            break;
+    }
+
+    return value;
+}
+
+function getTypeNative(value) {
+    if (value === null || typeof value !== 'object') {
+        return PrimitiveType;
+    }
+
+    if (Array.isArray(value)) {
+        return ArrayType;
+    }
+
+    return ObjectType;
+}
+
+function getTypeAsync(value) {
+    if (value === null || typeof value !== 'object') {
+        return PrimitiveType;
+    }
+
+    if (typeof value.then === 'function') {
+        return PromiseType;
+    }
+
+    if (isReadableStream(value)) {
+        return value._readableState.objectMode ? ReadableObjectType : ReadableStringType;
+    }
+
+    if (Array.isArray(value)) {
+        return ArrayType;
+    }
+
+    return ObjectType;
+}
+
+function normalizeReplacer(replacer) {
+    if (typeof replacer === 'function') {
+        return replacer;
+    }
+
+    if (Array.isArray(replacer)) {
+        const allowlist = new Set(replacer
+            .map(item => {
+                const cls = item && item.constructor;
+                return cls === String || cls === Number ? String(item) : null;
+            })
+            .filter(item => typeof item === 'string')
+        );
+
+        return [...allowlist];
+    }
+
+    return null;
+}
+
+function normalizeSpace(space) {
+    if (typeof space === 'number') {
+        if (!Number.isFinite(space) || space < 1) {
+            return false;
+        }
+
+        return ' '.repeat(Math.min(space, 10));
+    }
+
+    if (typeof space === 'string') {
+        return space.slice(0, 10) || false;
+    }
+
+    return false;
+}
+
+module.exports = {
+    escapableCharCodeSubstitution,
+    isLeadingSurrogate,
+    isTrailingSurrogate,
+    type: {
+        PRIMITIVE: PrimitiveType,
+        PROMISE: PromiseType,
+        ARRAY: ArrayType,
+        OBJECT: ObjectType,
+        STRING_STREAM: ReadableStringType,
+        OBJECT_STREAM: ReadableObjectType
+    },
+
+    isReadableStream,
+    replaceValue,
+    getTypeNative,
+    getTypeAsync,
+    normalizeReplacer,
+    normalizeSpace
+};

+ 1 - 0
js/node_modules/@discoveryjs/json-ext/src/version.js

@@ -0,0 +1 @@
+module.exports = require('../package.json').version;

+ 21 - 0
js/node_modules/@webassemblyjs/ast/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 167 - 0
js/node_modules/@webassemblyjs/ast/README.md

@@ -0,0 +1,167 @@
+# @webassemblyjs/ast
+
+> AST utils for webassemblyjs
+
+## Installation
+
+```sh
+yarn add @webassemblyjs/ast
+```
+
+## Usage
+
+### Traverse
+
+```js
+import { traverse } from "@webassemblyjs/ast";
+
+traverse(ast, {
+  Module(path) {
+    console.log(path.node);
+  }
+});
+```
+
+### Instruction signatures
+
+```js
+import { signatures } from "@webassemblyjs/ast";
+
+console.log(signatures);
+```
+
+### Path methods
+
+- `findParent: NodeLocator`
+- `replaceWith: Node => void`
+- `remove: () => void`
+- `insertBefore: Node => void`
+- `insertAfter: Node => void`
+- `stop: () => void`
+
+### AST utils
+
+- function `module(id, fields, metadata)`
+- function `moduleMetadata(sections, functionNames, localNames)`
+- function `moduleNameMetadata(value)`
+- function `functionNameMetadata(value, index)`
+- function `localNameMetadata(value, localIndex, functionIndex)`
+- function `binaryModule(id, blob)`
+- function `quoteModule(id, string)`
+- function `sectionMetadata(section, startOffset, size, vectorOfSize)`
+- function `loopInstruction(label, resulttype, instr)`
+- function `instruction(id, args, namedArgs)`
+- function `objectInstruction(id, object, args, namedArgs)`
+- function `ifInstruction(testLabel, test, result, consequent, alternate)`
+- function `stringLiteral(value)`
+- function `numberLiteralFromRaw(value, raw)`
+- function `longNumberLiteral(value, raw)`
+- function `floatLiteral(value, nan, inf, raw)`
+- function `elem(table, offset, funcs)`
+- function `indexInFuncSection(index)`
+- function `valtypeLiteral(name)`
+- function `typeInstruction(id, functype)`
+- function `start(index)`
+- function `globalType(valtype, mutability)`
+- function `leadingComment(value)`
+- function `blockComment(value)`
+- function `data(memoryIndex, offset, init)`
+- function `global(globalType, init, name)`
+- function `table(elementType, limits, name, elements)`
+- function `memory(limits, id)`
+- function `funcImportDescr(id, signature)`
+- function `moduleImport(module, name, descr)`
+- function `moduleExportDescr(exportType, id)`
+- function `moduleExport(name, descr)`
+- function `limit(min, max)`
+- function `signature(params, results)`
+- function `program(body)`
+- function `identifier(value, raw)`
+- function `blockInstruction(label, instr, result)`
+- function `callInstruction(index, instrArgs)`
+- function `callIndirectInstruction(signature, intrs)`
+- function `byteArray(values)`
+- function `func(name, signature, body, isExternal, metadata)`
+- Constant`isModule`
+- Constant`isModuleMetadata`
+- Constant`isModuleNameMetadata`
+- Constant`isFunctionNameMetadata`
+- Constant`isLocalNameMetadata`
+- Constant`isBinaryModule`
+- Constant`isQuoteModule`
+- Constant`isSectionMetadata`
+- Constant`isLoopInstruction`
+- Constant`isInstruction`
+- Constant`isObjectInstruction`
+- Constant`isIfInstruction`
+- Constant`isStringLiteral`
+- Constant`isNumberLiteral`
+- Constant`isLongNumberLiteral`
+- Constant`isFloatLiteral`
+- Constant`isElem`
+- Constant`isIndexInFuncSection`
+- Constant`isValtypeLiteral`
+- Constant`isTypeInstruction`
+- Constant`isStart`
+- Constant`isGlobalType`
+- Constant`isLeadingComment`
+- Constant`isBlockComment`
+- Constant`isData`
+- Constant`isGlobal`
+- Constant`isTable`
+- Constant`isMemory`
+- Constant`isFuncImportDescr`
+- Constant`isModuleImport`
+- Constant`isModuleExportDescr`
+- Constant`isModuleExport`
+- Constant`isLimit`
+- Constant`isSignature`
+- Constant`isProgram`
+- Constant`isIdentifier`
+- Constant`isBlockInstruction`
+- Constant`isCallInstruction`
+- Constant`isCallIndirectInstruction`
+- Constant`isByteArray`
+- Constant`isFunc`
+- Constant`assertModule`
+- Constant`assertModuleMetadata`
+- Constant`assertModuleNameMetadata`
+- Constant`assertFunctionNameMetadata`
+- Constant`assertLocalNameMetadata`
+- Constant`assertBinaryModule`
+- Constant`assertQuoteModule`
+- Constant`assertSectionMetadata`
+- Constant`assertLoopInstruction`
+- Constant`assertInstruction`
+- Constant`assertObjectInstruction`
+- Constant`assertIfInstruction`
+- Constant`assertStringLiteral`
+- Constant`assertNumberLiteral`
+- Constant`assertLongNumberLiteral`
+- Constant`assertFloatLiteral`
+- Constant`assertElem`
+- Constant`assertIndexInFuncSection`
+- Constant`assertValtypeLiteral`
+- Constant`assertTypeInstruction`
+- Constant`assertStart`
+- Constant`assertGlobalType`
+- Constant`assertLeadingComment`
+- Constant`assertBlockComment`
+- Constant`assertData`
+- Constant`assertGlobal`
+- Constant`assertTable`
+- Constant`assertMemory`
+- Constant`assertFuncImportDescr`
+- Constant`assertModuleImport`
+- Constant`assertModuleExportDescr`
+- Constant`assertModuleExport`
+- Constant`assertLimit`
+- Constant`assertSignature`
+- Constant`assertProgram`
+- Constant`assertIdentifier`
+- Constant`assertBlockInstruction`
+- Constant`assertCallInstruction`
+- Constant`assertCallIndirectInstruction`
+- Constant`assertByteArray`
+- Constant`assertFunc`
+

+ 10 - 0
js/node_modules/@webassemblyjs/ast/esm/clone.js

@@ -0,0 +1,10 @@
+export function cloneNode(n) {
+  // $FlowIgnore
+  var newObj = {};
+
+  for (var k in n) {
+    newObj[k] = n[k];
+  }
+
+  return newObj;
+}

+ 663 - 0
js/node_modules/@webassemblyjs/ast/esm/definitions.js

@@ -0,0 +1,663 @@
+var definitions = {};
+
+function defineType(typeName, metadata) {
+  definitions[typeName] = metadata;
+}
+
+defineType("Module", {
+  spec: {
+    wasm: "https://webassembly.github.io/spec/core/binary/modules.html#binary-module",
+    wat: "https://webassembly.github.io/spec/core/text/modules.html#text-module"
+  },
+  doc: "A module consists of a sequence of sections (termed fields in the text format).",
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    fields: {
+      array: true,
+      type: "Node"
+    },
+    metadata: {
+      optional: true,
+      type: "ModuleMetadata"
+    }
+  }
+});
+defineType("ModuleMetadata", {
+  unionType: ["Node"],
+  fields: {
+    sections: {
+      array: true,
+      type: "SectionMetadata"
+    },
+    functionNames: {
+      optional: true,
+      array: true,
+      type: "FunctionNameMetadata"
+    },
+    localNames: {
+      optional: true,
+      array: true,
+      type: "ModuleMetadata"
+    },
+    producers: {
+      optional: true,
+      array: true,
+      type: "ProducersSectionMetadata"
+    }
+  }
+});
+defineType("ModuleNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("FunctionNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    index: {
+      type: "number"
+    }
+  }
+});
+defineType("LocalNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    localIndex: {
+      type: "number"
+    },
+    functionIndex: {
+      type: "number"
+    }
+  }
+});
+defineType("BinaryModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    blob: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("QuoteModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    string: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("SectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    section: {
+      type: "SectionName"
+    },
+    startOffset: {
+      type: "number"
+    },
+    size: {
+      type: "NumberLiteral"
+    },
+    vectorOfSize: {
+      comment: "Size of the vector in the section (if any)",
+      type: "NumberLiteral"
+    }
+  }
+});
+defineType("ProducersSectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    producers: {
+      array: true,
+      type: "ProducerMetadata"
+    }
+  }
+});
+defineType("ProducerMetadata", {
+  unionType: ["Node"],
+  fields: {
+    language: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    processedBy: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    sdk: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    }
+  }
+});
+defineType("ProducerMetadataVersionedName", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    version: {
+      type: "string"
+    }
+  }
+});
+/*
+Instructions
+*/
+
+defineType("LoopInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "loop"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    resulttype: {
+      maybe: true,
+      type: "Valtype"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+defineType("Instr", {
+  unionType: ["Node", "Expression", "Instruction"],
+  fields: {
+    id: {
+      type: "string"
+    },
+    object: {
+      optional: true,
+      type: "Valtype"
+    },
+    args: {
+      array: true,
+      type: "Expression"
+    },
+    namedArgs: {
+      optional: true,
+      type: "Object"
+    }
+  }
+});
+defineType("IfInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "if"
+    },
+    testLabel: {
+      comment: "only for WAST",
+      type: "Identifier"
+    },
+    test: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    },
+    consequent: {
+      array: true,
+      type: "Instruction"
+    },
+    alternate: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+/* 
+Concrete value types
+*/
+
+defineType("StringLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("NumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("LongNumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "LongNumber"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("FloatLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    nan: {
+      optional: true,
+      type: "boolean"
+    },
+    inf: {
+      optional: true,
+      type: "boolean"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("Elem", {
+  unionType: ["Node"],
+  fields: {
+    table: {
+      type: "Index"
+    },
+    offset: {
+      array: true,
+      type: "Instruction"
+    },
+    funcs: {
+      array: true,
+      type: "Index"
+    }
+  }
+});
+defineType("IndexInFuncSection", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("ValtypeLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    name: {
+      type: "Valtype"
+    }
+  }
+});
+defineType("TypeInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "Index"
+    },
+    functype: {
+      type: "Signature"
+    }
+  }
+});
+defineType("Start", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("GlobalType", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    valtype: {
+      type: "Valtype"
+    },
+    mutability: {
+      type: "Mutability"
+    }
+  }
+});
+defineType("LeadingComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("BlockComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("Data", {
+  unionType: ["Node"],
+  fields: {
+    memoryIndex: {
+      type: "Memidx"
+    },
+    offset: {
+      type: "Instruction"
+    },
+    init: {
+      type: "ByteArray"
+    }
+  }
+});
+defineType("Global", {
+  unionType: ["Node"],
+  fields: {
+    globalType: {
+      type: "GlobalType"
+    },
+    init: {
+      array: true,
+      type: "Instruction"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    }
+  }
+});
+defineType("Table", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    elementType: {
+      type: "TableElementType"
+    },
+    limits: {
+      assertNodeType: true,
+      type: "Limit"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    },
+    elements: {
+      array: true,
+      optional: true,
+      type: "Index"
+    }
+  }
+});
+defineType("Memory", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    limits: {
+      type: "Limit"
+    },
+    id: {
+      maybe: true,
+      type: "Index"
+    }
+  }
+});
+defineType("FuncImportDescr", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    id: {
+      type: "Identifier"
+    },
+    signature: {
+      type: "Signature"
+    }
+  }
+});
+defineType("ModuleImport", {
+  unionType: ["Node"],
+  fields: {
+    module: {
+      type: "string"
+    },
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ImportDescr"
+    }
+  }
+});
+defineType("ModuleExportDescr", {
+  unionType: ["Node"],
+  fields: {
+    exportType: {
+      type: "ExportDescrType"
+    },
+    id: {
+      type: "Index"
+    }
+  }
+});
+defineType("ModuleExport", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ModuleExportDescr"
+    }
+  }
+});
+defineType("Limit", {
+  unionType: ["Node"],
+  fields: {
+    min: {
+      type: "number"
+    },
+    max: {
+      optional: true,
+      type: "number"
+    }
+  }
+});
+defineType("Signature", {
+  unionType: ["Node"],
+  fields: {
+    params: {
+      array: true,
+      type: "FuncParam"
+    },
+    results: {
+      array: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("Program", {
+  unionType: ["Node"],
+  fields: {
+    body: {
+      array: true,
+      type: "Node"
+    }
+  }
+});
+defineType("Identifier", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    raw: {
+      optional: true,
+      type: "string"
+    }
+  }
+});
+defineType("BlockInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "block"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("CallInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call"
+    },
+    index: {
+      type: "Index"
+    },
+    instrArgs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    },
+    numeric: {
+      type: "Index",
+      optional: true
+    }
+  }
+});
+defineType("CallIndirectInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call_indirect"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    intrs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    }
+  }
+});
+defineType("ByteArray", {
+  unionType: ["Node"],
+  fields: {
+    values: {
+      array: true,
+      type: "Byte"
+    }
+  }
+});
+defineType("Func", {
+  unionType: ["Node", "Block"],
+  fields: {
+    name: {
+      maybe: true,
+      type: "Index"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    body: {
+      array: true,
+      type: "Instruction"
+    },
+    isExternal: {
+      comment: "means that it has been imported from the outside js",
+      optional: true,
+      type: "boolean"
+    },
+    metadata: {
+      optional: true,
+      type: "FuncMetadata"
+    }
+  }
+});
+/**
+ * Intrinsics
+ */
+
+defineType("InternalBrUnless", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalGoto", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalCallExtern", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+}); // function bodies are terminated by an `end` instruction but are missing a
+// return instruction
+//
+// Since we can't inject a new instruction we are injecting a new instruction.
+
+defineType("InternalEndAndReturn", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {}
+});
+module.exports = definitions;

+ 6 - 0
js/node_modules/@webassemblyjs/ast/esm/index.js

@@ -0,0 +1,6 @@
+export * from "./nodes";
+export { numberLiteralFromRaw, withLoc, withRaw, funcParam, indexLiteral, memIndexLiteral, instruction, objectInstruction } from "./node-helpers.js";
+export { traverse } from "./traverse";
+export { signatures } from "./signatures";
+export * from "./utils";
+export { cloneNode } from "./clone";

+ 84 - 0
js/node_modules/@webassemblyjs/ast/esm/node-helpers.js

@@ -0,0 +1,84 @@
+import { parse32F, parse64F, parse32I, parse64I, parseU32, isNanLiteral, isInfLiteral } from "@webassemblyjs/wast-parser";
+import { longNumberLiteral, floatLiteral, numberLiteral, instr } from "./nodes";
+export function numberLiteralFromRaw(rawValue) {
+  var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32";
+  var original = rawValue; // Remove numeric separators _
+
+  if (typeof rawValue === "string") {
+    rawValue = rawValue.replace(/_/g, "");
+  }
+
+  if (typeof rawValue === "number") {
+    return numberLiteral(rawValue, String(original));
+  } else {
+    switch (instructionType) {
+      case "i32":
+        {
+          return numberLiteral(parse32I(rawValue), String(original));
+        }
+
+      case "u32":
+        {
+          return numberLiteral(parseU32(rawValue), String(original));
+        }
+
+      case "i64":
+        {
+          return longNumberLiteral(parse64I(rawValue), String(original));
+        }
+
+      case "f32":
+        {
+          return floatLiteral(parse32F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original));
+        }
+      // f64
+
+      default:
+        {
+          return floatLiteral(parse64F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original));
+        }
+    }
+  }
+}
+export function instruction(id) {
+  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+  var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+  return instr(id, undefined, args, namedArgs);
+}
+export function objectInstruction(id, object) {
+  var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
+  var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+  return instr(id, object, args, namedArgs);
+}
+/**
+ * Decorators
+ */
+
+export function withLoc(n, end, start) {
+  var loc = {
+    start: start,
+    end: end
+  };
+  n.loc = loc;
+  return n;
+}
+export function withRaw(n, raw) {
+  n.raw = raw;
+  return n;
+}
+export function funcParam(valtype, id) {
+  return {
+    id: id,
+    valtype: valtype
+  };
+}
+export function indexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}
+export function memIndexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}

+ 137 - 0
js/node_modules/@webassemblyjs/ast/esm/node-path.js

@@ -0,0 +1,137 @@
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+function findParent(_ref, cb) {
+  var parentPath = _ref.parentPath;
+
+  if (parentPath == null) {
+    throw new Error("node is root");
+  }
+
+  var currentPath = parentPath;
+
+  while (cb(currentPath) !== false) {
+    // Hit the root node, stop
+    // $FlowIgnore
+    if (currentPath.parentPath == null) {
+      return null;
+    } // $FlowIgnore
+
+
+    currentPath = currentPath.parentPath;
+  }
+
+  return currentPath.node;
+}
+
+function insertBefore(context, newNode) {
+  return insert(context, newNode);
+}
+
+function insertAfter(context, newNode) {
+  return insert(context, newNode, 1);
+}
+
+function insert(_ref2, newNode) {
+  var node = _ref2.node,
+      inList = _ref2.inList,
+      parentPath = _ref2.parentPath,
+      parentKey = _ref2.parentKey;
+  var indexOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+  if (!inList) {
+    throw new Error('inList' + " error: " + ("insert can only be used for nodes that are within lists" || "unknown"));
+  }
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentList = parentPath.node[parentKey];
+  var indexInList = parentList.findIndex(function (n) {
+    return n === node;
+  });
+  parentList.splice(indexInList + indexOffset, 0, newNode);
+}
+
+function remove(_ref3) {
+  var node = _ref3.node,
+      parentKey = _ref3.parentKey,
+      parentPath = _ref3.parentPath;
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentNode = parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    // $FlowIgnore
+    parentNode[parentKey] = parentProperty.filter(function (n) {
+      return n !== node;
+    });
+  } else {
+    // $FlowIgnore
+    delete parentNode[parentKey];
+  }
+
+  node._deleted = true;
+}
+
+function stop(context) {
+  context.shouldStop = true;
+}
+
+function replaceWith(context, newNode) {
+  // $FlowIgnore
+  var parentNode = context.parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[context.parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    var indexInList = parentProperty.findIndex(function (n) {
+      return n === context.node;
+    });
+    parentProperty.splice(indexInList, 1, newNode);
+  } else {
+    // $FlowIgnore
+    parentNode[context.parentKey] = newNode;
+  }
+
+  context.node._deleted = true;
+  context.node = newNode;
+} // bind the context to the first argument of node operations
+
+
+function bindNodeOperations(operations, context) {
+  var keys = Object.keys(operations);
+  var boundOperations = {};
+  keys.forEach(function (key) {
+    boundOperations[key] = operations[key].bind(null, context);
+  });
+  return boundOperations;
+}
+
+function createPathOperations(context) {
+  // $FlowIgnore
+  return bindNodeOperations({
+    findParent: findParent,
+    replaceWith: replaceWith,
+    remove: remove,
+    insertBefore: insertBefore,
+    insertAfter: insertAfter,
+    stop: stop
+  }, context);
+}
+
+export function createPath(context) {
+  var path = _extends({}, context); // $FlowIgnore
+
+
+  Object.assign(path, createPathOperations(path)); // $FlowIgnore
+
+  return path;
+}

+ 915 - 0
js/node_modules/@webassemblyjs/ast/esm/nodes.js

@@ -0,0 +1,915 @@
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+// THIS FILE IS AUTOGENERATED
+// see scripts/generateNodeUtils.js
+function isTypeOf(t) {
+  return function (n) {
+    return n.type === t;
+  };
+}
+
+function assertTypeOf(t) {
+  return function (n) {
+    return function () {
+      if (!(n.type === t)) {
+        throw new Error('n.type === t' + " error: " + (undefined || "unknown"));
+      }
+    }();
+  };
+}
+
+export function module(id, fields, metadata) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(fields) === "object" && typeof fields.length !== "undefined")) {
+    throw new Error('typeof fields === "object" && typeof fields.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Module",
+    id: id,
+    fields: fields
+  };
+
+  if (typeof metadata !== "undefined") {
+    node.metadata = metadata;
+  }
+
+  return node;
+}
+export function moduleMetadata(sections, functionNames, localNames, producers) {
+  if (!(_typeof(sections) === "object" && typeof sections.length !== "undefined")) {
+    throw new Error('typeof sections === "object" && typeof sections.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (functionNames !== null && functionNames !== undefined) {
+    if (!(_typeof(functionNames) === "object" && typeof functionNames.length !== "undefined")) {
+      throw new Error('typeof functionNames === "object" && typeof functionNames.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  if (localNames !== null && localNames !== undefined) {
+    if (!(_typeof(localNames) === "object" && typeof localNames.length !== "undefined")) {
+      throw new Error('typeof localNames === "object" && typeof localNames.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  if (producers !== null && producers !== undefined) {
+    if (!(_typeof(producers) === "object" && typeof producers.length !== "undefined")) {
+      throw new Error('typeof producers === "object" && typeof producers.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "ModuleMetadata",
+    sections: sections
+  };
+
+  if (typeof functionNames !== "undefined" && functionNames.length > 0) {
+    node.functionNames = functionNames;
+  }
+
+  if (typeof localNames !== "undefined" && localNames.length > 0) {
+    node.localNames = localNames;
+  }
+
+  if (typeof producers !== "undefined" && producers.length > 0) {
+    node.producers = producers;
+  }
+
+  return node;
+}
+export function moduleNameMetadata(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleNameMetadata",
+    value: value
+  };
+  return node;
+}
+export function functionNameMetadata(value, index) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof index === "number")) {
+    throw new Error('typeof index === "number"' + " error: " + ("Argument index must be of type number, given: " + _typeof(index) || "unknown"));
+  }
+
+  var node = {
+    type: "FunctionNameMetadata",
+    value: value,
+    index: index
+  };
+  return node;
+}
+export function localNameMetadata(value, localIndex, functionIndex) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof localIndex === "number")) {
+    throw new Error('typeof localIndex === "number"' + " error: " + ("Argument localIndex must be of type number, given: " + _typeof(localIndex) || "unknown"));
+  }
+
+  if (!(typeof functionIndex === "number")) {
+    throw new Error('typeof functionIndex === "number"' + " error: " + ("Argument functionIndex must be of type number, given: " + _typeof(functionIndex) || "unknown"));
+  }
+
+  var node = {
+    type: "LocalNameMetadata",
+    value: value,
+    localIndex: localIndex,
+    functionIndex: functionIndex
+  };
+  return node;
+}
+export function binaryModule(id, blob) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(blob) === "object" && typeof blob.length !== "undefined")) {
+    throw new Error('typeof blob === "object" && typeof blob.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "BinaryModule",
+    id: id,
+    blob: blob
+  };
+  return node;
+}
+export function quoteModule(id, string) {
+  if (id !== null && id !== undefined) {
+    if (!(typeof id === "string")) {
+      throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+    }
+  }
+
+  if (!(_typeof(string) === "object" && typeof string.length !== "undefined")) {
+    throw new Error('typeof string === "object" && typeof string.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "QuoteModule",
+    id: id,
+    string: string
+  };
+  return node;
+}
+export function sectionMetadata(section, startOffset, size, vectorOfSize) {
+  if (!(typeof startOffset === "number")) {
+    throw new Error('typeof startOffset === "number"' + " error: " + ("Argument startOffset must be of type number, given: " + _typeof(startOffset) || "unknown"));
+  }
+
+  var node = {
+    type: "SectionMetadata",
+    section: section,
+    startOffset: startOffset,
+    size: size,
+    vectorOfSize: vectorOfSize
+  };
+  return node;
+}
+export function producersSectionMetadata(producers) {
+  if (!(_typeof(producers) === "object" && typeof producers.length !== "undefined")) {
+    throw new Error('typeof producers === "object" && typeof producers.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ProducersSectionMetadata",
+    producers: producers
+  };
+  return node;
+}
+export function producerMetadata(language, processedBy, sdk) {
+  if (!(_typeof(language) === "object" && typeof language.length !== "undefined")) {
+    throw new Error('typeof language === "object" && typeof language.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(processedBy) === "object" && typeof processedBy.length !== "undefined")) {
+    throw new Error('typeof processedBy === "object" && typeof processedBy.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(sdk) === "object" && typeof sdk.length !== "undefined")) {
+    throw new Error('typeof sdk === "object" && typeof sdk.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ProducerMetadata",
+    language: language,
+    processedBy: processedBy,
+    sdk: sdk
+  };
+  return node;
+}
+export function producerMetadataVersionedName(name, version) {
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  if (!(typeof version === "string")) {
+    throw new Error('typeof version === "string"' + " error: " + ("Argument version must be of type string, given: " + _typeof(version) || "unknown"));
+  }
+
+  var node = {
+    type: "ProducerMetadataVersionedName",
+    name: name,
+    version: version
+  };
+  return node;
+}
+export function loopInstruction(label, resulttype, instr) {
+  if (!(_typeof(instr) === "object" && typeof instr.length !== "undefined")) {
+    throw new Error('typeof instr === "object" && typeof instr.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "LoopInstruction",
+    id: "loop",
+    label: label,
+    resulttype: resulttype,
+    instr: instr
+  };
+  return node;
+}
+export function instr(id, object, args, namedArgs) {
+  if (!(typeof id === "string")) {
+    throw new Error('typeof id === "string"' + " error: " + ("Argument id must be of type string, given: " + _typeof(id) || "unknown"));
+  }
+
+  if (!(_typeof(args) === "object" && typeof args.length !== "undefined")) {
+    throw new Error('typeof args === "object" && typeof args.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Instr",
+    id: id,
+    args: args
+  };
+
+  if (typeof object !== "undefined") {
+    node.object = object;
+  }
+
+  if (typeof namedArgs !== "undefined" && Object.keys(namedArgs).length !== 0) {
+    node.namedArgs = namedArgs;
+  }
+
+  return node;
+}
+export function ifInstruction(testLabel, test, result, consequent, alternate) {
+  if (!(_typeof(test) === "object" && typeof test.length !== "undefined")) {
+    throw new Error('typeof test === "object" && typeof test.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(consequent) === "object" && typeof consequent.length !== "undefined")) {
+    throw new Error('typeof consequent === "object" && typeof consequent.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(alternate) === "object" && typeof alternate.length !== "undefined")) {
+    throw new Error('typeof alternate === "object" && typeof alternate.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "IfInstruction",
+    id: "if",
+    testLabel: testLabel,
+    test: test,
+    result: result,
+    consequent: consequent,
+    alternate: alternate
+  };
+  return node;
+}
+export function stringLiteral(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "StringLiteral",
+    value: value
+  };
+  return node;
+}
+export function numberLiteral(value, raw) {
+  if (!(typeof value === "number")) {
+    throw new Error('typeof value === "number"' + " error: " + ("Argument value must be of type number, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "NumberLiteral",
+    value: value,
+    raw: raw
+  };
+  return node;
+}
+export function longNumberLiteral(value, raw) {
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "LongNumberLiteral",
+    value: value,
+    raw: raw
+  };
+  return node;
+}
+export function floatLiteral(value, nan, inf, raw) {
+  if (!(typeof value === "number")) {
+    throw new Error('typeof value === "number"' + " error: " + ("Argument value must be of type number, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (nan !== null && nan !== undefined) {
+    if (!(typeof nan === "boolean")) {
+      throw new Error('typeof nan === "boolean"' + " error: " + ("Argument nan must be of type boolean, given: " + _typeof(nan) || "unknown"));
+    }
+  }
+
+  if (inf !== null && inf !== undefined) {
+    if (!(typeof inf === "boolean")) {
+      throw new Error('typeof inf === "boolean"' + " error: " + ("Argument inf must be of type boolean, given: " + _typeof(inf) || "unknown"));
+    }
+  }
+
+  if (!(typeof raw === "string")) {
+    throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+  }
+
+  var node = {
+    type: "FloatLiteral",
+    value: value,
+    raw: raw
+  };
+
+  if (nan === true) {
+    node.nan = true;
+  }
+
+  if (inf === true) {
+    node.inf = true;
+  }
+
+  return node;
+}
+export function elem(table, offset, funcs) {
+  if (!(_typeof(offset) === "object" && typeof offset.length !== "undefined")) {
+    throw new Error('typeof offset === "object" && typeof offset.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(funcs) === "object" && typeof funcs.length !== "undefined")) {
+    throw new Error('typeof funcs === "object" && typeof funcs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Elem",
+    table: table,
+    offset: offset,
+    funcs: funcs
+  };
+  return node;
+}
+export function indexInFuncSection(index) {
+  var node = {
+    type: "IndexInFuncSection",
+    index: index
+  };
+  return node;
+}
+export function valtypeLiteral(name) {
+  var node = {
+    type: "ValtypeLiteral",
+    name: name
+  };
+  return node;
+}
+export function typeInstruction(id, functype) {
+  var node = {
+    type: "TypeInstruction",
+    id: id,
+    functype: functype
+  };
+  return node;
+}
+export function start(index) {
+  var node = {
+    type: "Start",
+    index: index
+  };
+  return node;
+}
+export function globalType(valtype, mutability) {
+  var node = {
+    type: "GlobalType",
+    valtype: valtype,
+    mutability: mutability
+  };
+  return node;
+}
+export function leadingComment(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "LeadingComment",
+    value: value
+  };
+  return node;
+}
+export function blockComment(value) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  var node = {
+    type: "BlockComment",
+    value: value
+  };
+  return node;
+}
+export function data(memoryIndex, offset, init) {
+  var node = {
+    type: "Data",
+    memoryIndex: memoryIndex,
+    offset: offset,
+    init: init
+  };
+  return node;
+}
+export function global(globalType, init, name) {
+  if (!(_typeof(init) === "object" && typeof init.length !== "undefined")) {
+    throw new Error('typeof init === "object" && typeof init.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Global",
+    globalType: globalType,
+    init: init,
+    name: name
+  };
+  return node;
+}
+export function table(elementType, limits, name, elements) {
+  if (!(limits.type === "Limit")) {
+    throw new Error('limits.type === "Limit"' + " error: " + ("Argument limits must be of type Limit, given: " + limits.type || "unknown"));
+  }
+
+  if (elements !== null && elements !== undefined) {
+    if (!(_typeof(elements) === "object" && typeof elements.length !== "undefined")) {
+      throw new Error('typeof elements === "object" && typeof elements.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Table",
+    elementType: elementType,
+    limits: limits,
+    name: name
+  };
+
+  if (typeof elements !== "undefined" && elements.length > 0) {
+    node.elements = elements;
+  }
+
+  return node;
+}
+export function memory(limits, id) {
+  var node = {
+    type: "Memory",
+    limits: limits,
+    id: id
+  };
+  return node;
+}
+export function funcImportDescr(id, signature) {
+  var node = {
+    type: "FuncImportDescr",
+    id: id,
+    signature: signature
+  };
+  return node;
+}
+export function moduleImport(module, name, descr) {
+  if (!(typeof module === "string")) {
+    throw new Error('typeof module === "string"' + " error: " + ("Argument module must be of type string, given: " + _typeof(module) || "unknown"));
+  }
+
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleImport",
+    module: module,
+    name: name,
+    descr: descr
+  };
+  return node;
+}
+export function moduleExportDescr(exportType, id) {
+  var node = {
+    type: "ModuleExportDescr",
+    exportType: exportType,
+    id: id
+  };
+  return node;
+}
+export function moduleExport(name, descr) {
+  if (!(typeof name === "string")) {
+    throw new Error('typeof name === "string"' + " error: " + ("Argument name must be of type string, given: " + _typeof(name) || "unknown"));
+  }
+
+  var node = {
+    type: "ModuleExport",
+    name: name,
+    descr: descr
+  };
+  return node;
+}
+export function limit(min, max) {
+  if (!(typeof min === "number")) {
+    throw new Error('typeof min === "number"' + " error: " + ("Argument min must be of type number, given: " + _typeof(min) || "unknown"));
+  }
+
+  if (max !== null && max !== undefined) {
+    if (!(typeof max === "number")) {
+      throw new Error('typeof max === "number"' + " error: " + ("Argument max must be of type number, given: " + _typeof(max) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Limit",
+    min: min
+  };
+
+  if (typeof max !== "undefined") {
+    node.max = max;
+  }
+
+  return node;
+}
+export function signature(params, results) {
+  if (!(_typeof(params) === "object" && typeof params.length !== "undefined")) {
+    throw new Error('typeof params === "object" && typeof params.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (!(_typeof(results) === "object" && typeof results.length !== "undefined")) {
+    throw new Error('typeof results === "object" && typeof results.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Signature",
+    params: params,
+    results: results
+  };
+  return node;
+}
+export function program(body) {
+  if (!(_typeof(body) === "object" && typeof body.length !== "undefined")) {
+    throw new Error('typeof body === "object" && typeof body.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "Program",
+    body: body
+  };
+  return node;
+}
+export function identifier(value, raw) {
+  if (!(typeof value === "string")) {
+    throw new Error('typeof value === "string"' + " error: " + ("Argument value must be of type string, given: " + _typeof(value) || "unknown"));
+  }
+
+  if (raw !== null && raw !== undefined) {
+    if (!(typeof raw === "string")) {
+      throw new Error('typeof raw === "string"' + " error: " + ("Argument raw must be of type string, given: " + _typeof(raw) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Identifier",
+    value: value
+  };
+
+  if (typeof raw !== "undefined") {
+    node.raw = raw;
+  }
+
+  return node;
+}
+export function blockInstruction(label, instr, result) {
+  if (!(_typeof(instr) === "object" && typeof instr.length !== "undefined")) {
+    throw new Error('typeof instr === "object" && typeof instr.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "BlockInstruction",
+    id: "block",
+    label: label,
+    instr: instr,
+    result: result
+  };
+  return node;
+}
+export function callInstruction(index, instrArgs, numeric) {
+  if (instrArgs !== null && instrArgs !== undefined) {
+    if (!(_typeof(instrArgs) === "object" && typeof instrArgs.length !== "undefined")) {
+      throw new Error('typeof instrArgs === "object" && typeof instrArgs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "CallInstruction",
+    id: "call",
+    index: index
+  };
+
+  if (typeof instrArgs !== "undefined" && instrArgs.length > 0) {
+    node.instrArgs = instrArgs;
+  }
+
+  if (typeof numeric !== "undefined") {
+    node.numeric = numeric;
+  }
+
+  return node;
+}
+export function callIndirectInstruction(signature, intrs) {
+  if (intrs !== null && intrs !== undefined) {
+    if (!(_typeof(intrs) === "object" && typeof intrs.length !== "undefined")) {
+      throw new Error('typeof intrs === "object" && typeof intrs.length !== "undefined"' + " error: " + (undefined || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "CallIndirectInstruction",
+    id: "call_indirect",
+    signature: signature
+  };
+
+  if (typeof intrs !== "undefined" && intrs.length > 0) {
+    node.intrs = intrs;
+  }
+
+  return node;
+}
+export function byteArray(values) {
+  if (!(_typeof(values) === "object" && typeof values.length !== "undefined")) {
+    throw new Error('typeof values === "object" && typeof values.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  var node = {
+    type: "ByteArray",
+    values: values
+  };
+  return node;
+}
+export function func(name, signature, body, isExternal, metadata) {
+  if (!(_typeof(body) === "object" && typeof body.length !== "undefined")) {
+    throw new Error('typeof body === "object" && typeof body.length !== "undefined"' + " error: " + (undefined || "unknown"));
+  }
+
+  if (isExternal !== null && isExternal !== undefined) {
+    if (!(typeof isExternal === "boolean")) {
+      throw new Error('typeof isExternal === "boolean"' + " error: " + ("Argument isExternal must be of type boolean, given: " + _typeof(isExternal) || "unknown"));
+    }
+  }
+
+  var node = {
+    type: "Func",
+    name: name,
+    signature: signature,
+    body: body
+  };
+
+  if (isExternal === true) {
+    node.isExternal = true;
+  }
+
+  if (typeof metadata !== "undefined") {
+    node.metadata = metadata;
+  }
+
+  return node;
+}
+export function internalBrUnless(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalBrUnless",
+    target: target
+  };
+  return node;
+}
+export function internalGoto(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalGoto",
+    target: target
+  };
+  return node;
+}
+export function internalCallExtern(target) {
+  if (!(typeof target === "number")) {
+    throw new Error('typeof target === "number"' + " error: " + ("Argument target must be of type number, given: " + _typeof(target) || "unknown"));
+  }
+
+  var node = {
+    type: "InternalCallExtern",
+    target: target
+  };
+  return node;
+}
+export function internalEndAndReturn() {
+  var node = {
+    type: "InternalEndAndReturn"
+  };
+  return node;
+}
+export var isModule = isTypeOf("Module");
+export var isModuleMetadata = isTypeOf("ModuleMetadata");
+export var isModuleNameMetadata = isTypeOf("ModuleNameMetadata");
+export var isFunctionNameMetadata = isTypeOf("FunctionNameMetadata");
+export var isLocalNameMetadata = isTypeOf("LocalNameMetadata");
+export var isBinaryModule = isTypeOf("BinaryModule");
+export var isQuoteModule = isTypeOf("QuoteModule");
+export var isSectionMetadata = isTypeOf("SectionMetadata");
+export var isProducersSectionMetadata = isTypeOf("ProducersSectionMetadata");
+export var isProducerMetadata = isTypeOf("ProducerMetadata");
+export var isProducerMetadataVersionedName = isTypeOf("ProducerMetadataVersionedName");
+export var isLoopInstruction = isTypeOf("LoopInstruction");
+export var isInstr = isTypeOf("Instr");
+export var isIfInstruction = isTypeOf("IfInstruction");
+export var isStringLiteral = isTypeOf("StringLiteral");
+export var isNumberLiteral = isTypeOf("NumberLiteral");
+export var isLongNumberLiteral = isTypeOf("LongNumberLiteral");
+export var isFloatLiteral = isTypeOf("FloatLiteral");
+export var isElem = isTypeOf("Elem");
+export var isIndexInFuncSection = isTypeOf("IndexInFuncSection");
+export var isValtypeLiteral = isTypeOf("ValtypeLiteral");
+export var isTypeInstruction = isTypeOf("TypeInstruction");
+export var isStart = isTypeOf("Start");
+export var isGlobalType = isTypeOf("GlobalType");
+export var isLeadingComment = isTypeOf("LeadingComment");
+export var isBlockComment = isTypeOf("BlockComment");
+export var isData = isTypeOf("Data");
+export var isGlobal = isTypeOf("Global");
+export var isTable = isTypeOf("Table");
+export var isMemory = isTypeOf("Memory");
+export var isFuncImportDescr = isTypeOf("FuncImportDescr");
+export var isModuleImport = isTypeOf("ModuleImport");
+export var isModuleExportDescr = isTypeOf("ModuleExportDescr");
+export var isModuleExport = isTypeOf("ModuleExport");
+export var isLimit = isTypeOf("Limit");
+export var isSignature = isTypeOf("Signature");
+export var isProgram = isTypeOf("Program");
+export var isIdentifier = isTypeOf("Identifier");
+export var isBlockInstruction = isTypeOf("BlockInstruction");
+export var isCallInstruction = isTypeOf("CallInstruction");
+export var isCallIndirectInstruction = isTypeOf("CallIndirectInstruction");
+export var isByteArray = isTypeOf("ByteArray");
+export var isFunc = isTypeOf("Func");
+export var isInternalBrUnless = isTypeOf("InternalBrUnless");
+export var isInternalGoto = isTypeOf("InternalGoto");
+export var isInternalCallExtern = isTypeOf("InternalCallExtern");
+export var isInternalEndAndReturn = isTypeOf("InternalEndAndReturn");
+export var isNode = function isNode(node) {
+  return isModule(node) || isModuleMetadata(node) || isModuleNameMetadata(node) || isFunctionNameMetadata(node) || isLocalNameMetadata(node) || isBinaryModule(node) || isQuoteModule(node) || isSectionMetadata(node) || isProducersSectionMetadata(node) || isProducerMetadata(node) || isProducerMetadataVersionedName(node) || isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isElem(node) || isIndexInFuncSection(node) || isValtypeLiteral(node) || isTypeInstruction(node) || isStart(node) || isGlobalType(node) || isLeadingComment(node) || isBlockComment(node) || isData(node) || isGlobal(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node) || isModuleImport(node) || isModuleExportDescr(node) || isModuleExport(node) || isLimit(node) || isSignature(node) || isProgram(node) || isIdentifier(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node) || isByteArray(node) || isFunc(node) || isInternalBrUnless(node) || isInternalGoto(node) || isInternalCallExtern(node) || isInternalEndAndReturn(node);
+};
+export var isBlock = function isBlock(node) {
+  return isLoopInstruction(node) || isBlockInstruction(node) || isFunc(node);
+};
+export var isInstruction = function isInstruction(node) {
+  return isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isTypeInstruction(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node);
+};
+export var isExpression = function isExpression(node) {
+  return isInstr(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isValtypeLiteral(node) || isIdentifier(node);
+};
+export var isNumericLiteral = function isNumericLiteral(node) {
+  return isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node);
+};
+export var isImportDescr = function isImportDescr(node) {
+  return isGlobalType(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node);
+};
+export var isIntrinsic = function isIntrinsic(node) {
+  return isInternalBrUnless(node) || isInternalGoto(node) || isInternalCallExtern(node) || isInternalEndAndReturn(node);
+};
+export var assertModule = assertTypeOf("Module");
+export var assertModuleMetadata = assertTypeOf("ModuleMetadata");
+export var assertModuleNameMetadata = assertTypeOf("ModuleNameMetadata");
+export var assertFunctionNameMetadata = assertTypeOf("FunctionNameMetadata");
+export var assertLocalNameMetadata = assertTypeOf("LocalNameMetadata");
+export var assertBinaryModule = assertTypeOf("BinaryModule");
+export var assertQuoteModule = assertTypeOf("QuoteModule");
+export var assertSectionMetadata = assertTypeOf("SectionMetadata");
+export var assertProducersSectionMetadata = assertTypeOf("ProducersSectionMetadata");
+export var assertProducerMetadata = assertTypeOf("ProducerMetadata");
+export var assertProducerMetadataVersionedName = assertTypeOf("ProducerMetadataVersionedName");
+export var assertLoopInstruction = assertTypeOf("LoopInstruction");
+export var assertInstr = assertTypeOf("Instr");
+export var assertIfInstruction = assertTypeOf("IfInstruction");
+export var assertStringLiteral = assertTypeOf("StringLiteral");
+export var assertNumberLiteral = assertTypeOf("NumberLiteral");
+export var assertLongNumberLiteral = assertTypeOf("LongNumberLiteral");
+export var assertFloatLiteral = assertTypeOf("FloatLiteral");
+export var assertElem = assertTypeOf("Elem");
+export var assertIndexInFuncSection = assertTypeOf("IndexInFuncSection");
+export var assertValtypeLiteral = assertTypeOf("ValtypeLiteral");
+export var assertTypeInstruction = assertTypeOf("TypeInstruction");
+export var assertStart = assertTypeOf("Start");
+export var assertGlobalType = assertTypeOf("GlobalType");
+export var assertLeadingComment = assertTypeOf("LeadingComment");
+export var assertBlockComment = assertTypeOf("BlockComment");
+export var assertData = assertTypeOf("Data");
+export var assertGlobal = assertTypeOf("Global");
+export var assertTable = assertTypeOf("Table");
+export var assertMemory = assertTypeOf("Memory");
+export var assertFuncImportDescr = assertTypeOf("FuncImportDescr");
+export var assertModuleImport = assertTypeOf("ModuleImport");
+export var assertModuleExportDescr = assertTypeOf("ModuleExportDescr");
+export var assertModuleExport = assertTypeOf("ModuleExport");
+export var assertLimit = assertTypeOf("Limit");
+export var assertSignature = assertTypeOf("Signature");
+export var assertProgram = assertTypeOf("Program");
+export var assertIdentifier = assertTypeOf("Identifier");
+export var assertBlockInstruction = assertTypeOf("BlockInstruction");
+export var assertCallInstruction = assertTypeOf("CallInstruction");
+export var assertCallIndirectInstruction = assertTypeOf("CallIndirectInstruction");
+export var assertByteArray = assertTypeOf("ByteArray");
+export var assertFunc = assertTypeOf("Func");
+export var assertInternalBrUnless = assertTypeOf("InternalBrUnless");
+export var assertInternalGoto = assertTypeOf("InternalGoto");
+export var assertInternalCallExtern = assertTypeOf("InternalCallExtern");
+export var assertInternalEndAndReturn = assertTypeOf("InternalEndAndReturn");
+export var unionTypesMap = {
+  Module: ["Node"],
+  ModuleMetadata: ["Node"],
+  ModuleNameMetadata: ["Node"],
+  FunctionNameMetadata: ["Node"],
+  LocalNameMetadata: ["Node"],
+  BinaryModule: ["Node"],
+  QuoteModule: ["Node"],
+  SectionMetadata: ["Node"],
+  ProducersSectionMetadata: ["Node"],
+  ProducerMetadata: ["Node"],
+  ProducerMetadataVersionedName: ["Node"],
+  LoopInstruction: ["Node", "Block", "Instruction"],
+  Instr: ["Node", "Expression", "Instruction"],
+  IfInstruction: ["Node", "Instruction"],
+  StringLiteral: ["Node", "Expression"],
+  NumberLiteral: ["Node", "NumericLiteral", "Expression"],
+  LongNumberLiteral: ["Node", "NumericLiteral", "Expression"],
+  FloatLiteral: ["Node", "NumericLiteral", "Expression"],
+  Elem: ["Node"],
+  IndexInFuncSection: ["Node"],
+  ValtypeLiteral: ["Node", "Expression"],
+  TypeInstruction: ["Node", "Instruction"],
+  Start: ["Node"],
+  GlobalType: ["Node", "ImportDescr"],
+  LeadingComment: ["Node"],
+  BlockComment: ["Node"],
+  Data: ["Node"],
+  Global: ["Node"],
+  Table: ["Node", "ImportDescr"],
+  Memory: ["Node", "ImportDescr"],
+  FuncImportDescr: ["Node", "ImportDescr"],
+  ModuleImport: ["Node"],
+  ModuleExportDescr: ["Node"],
+  ModuleExport: ["Node"],
+  Limit: ["Node"],
+  Signature: ["Node"],
+  Program: ["Node"],
+  Identifier: ["Node", "Expression"],
+  BlockInstruction: ["Node", "Block", "Instruction"],
+  CallInstruction: ["Node", "Instruction"],
+  CallIndirectInstruction: ["Node", "Instruction"],
+  ByteArray: ["Node"],
+  Func: ["Node", "Block"],
+  InternalBrUnless: ["Node", "Intrinsic"],
+  InternalGoto: ["Node", "Intrinsic"],
+  InternalCallExtern: ["Node", "Intrinsic"],
+  InternalEndAndReturn: ["Node", "Intrinsic"]
+};
+export var nodeAndUnionTypes = ["Module", "ModuleMetadata", "ModuleNameMetadata", "FunctionNameMetadata", "LocalNameMetadata", "BinaryModule", "QuoteModule", "SectionMetadata", "ProducersSectionMetadata", "ProducerMetadata", "ProducerMetadataVersionedName", "LoopInstruction", "Instr", "IfInstruction", "StringLiteral", "NumberLiteral", "LongNumberLiteral", "FloatLiteral", "Elem", "IndexInFuncSection", "ValtypeLiteral", "TypeInstruction", "Start", "GlobalType", "LeadingComment", "BlockComment", "Data", "Global", "Table", "Memory", "FuncImportDescr", "ModuleImport", "ModuleExportDescr", "ModuleExport", "Limit", "Signature", "Program", "Identifier", "BlockInstruction", "CallInstruction", "CallIndirectInstruction", "ByteArray", "Func", "InternalBrUnless", "InternalGoto", "InternalCallExtern", "InternalEndAndReturn", "Node", "Block", "Instruction", "Expression", "NumericLiteral", "ImportDescr", "Intrinsic"];

+ 199 - 0
js/node_modules/@webassemblyjs/ast/esm/signatures.js

@@ -0,0 +1,199 @@
+function sign(input, output) {
+  return [input, output];
+}
+
+var u32 = "u32";
+var i32 = "i32";
+var i64 = "i64";
+var f32 = "f32";
+var f64 = "f64";
+
+var vector = function vector(t) {
+  var vecType = [t]; // $FlowIgnore
+
+  vecType.vector = true;
+  return vecType;
+};
+
+var controlInstructions = {
+  unreachable: sign([], []),
+  nop: sign([], []),
+  // block ?
+  // loop ?
+  // if ?
+  // if else ?
+  br: sign([u32], []),
+  br_if: sign([u32], []),
+  br_table: sign(vector(u32), []),
+  return: sign([], []),
+  call: sign([u32], []),
+  call_indirect: sign([u32], [])
+};
+var parametricInstructions = {
+  drop: sign([], []),
+  select: sign([], [])
+};
+var variableInstructions = {
+  get_local: sign([u32], []),
+  set_local: sign([u32], []),
+  tee_local: sign([u32], []),
+  get_global: sign([u32], []),
+  set_global: sign([u32], [])
+};
+var memoryInstructions = {
+  "i32.load": sign([u32, u32], [i32]),
+  "i64.load": sign([u32, u32], []),
+  "f32.load": sign([u32, u32], []),
+  "f64.load": sign([u32, u32], []),
+  "i32.load8_s": sign([u32, u32], [i32]),
+  "i32.load8_u": sign([u32, u32], [i32]),
+  "i32.load16_s": sign([u32, u32], [i32]),
+  "i32.load16_u": sign([u32, u32], [i32]),
+  "i64.load8_s": sign([u32, u32], [i64]),
+  "i64.load8_u": sign([u32, u32], [i64]),
+  "i64.load16_s": sign([u32, u32], [i64]),
+  "i64.load16_u": sign([u32, u32], [i64]),
+  "i64.load32_s": sign([u32, u32], [i64]),
+  "i64.load32_u": sign([u32, u32], [i64]),
+  "i32.store": sign([u32, u32], []),
+  "i64.store": sign([u32, u32], []),
+  "f32.store": sign([u32, u32], []),
+  "f64.store": sign([u32, u32], []),
+  "i32.store8": sign([u32, u32], []),
+  "i32.store16": sign([u32, u32], []),
+  "i64.store8": sign([u32, u32], []),
+  "i64.store16": sign([u32, u32], []),
+  "i64.store32": sign([u32, u32], []),
+  current_memory: sign([], []),
+  grow_memory: sign([], [])
+};
+var numericInstructions = {
+  "i32.const": sign([i32], [i32]),
+  "i64.const": sign([i64], [i64]),
+  "f32.const": sign([f32], [f32]),
+  "f64.const": sign([f64], [f64]),
+  "i32.eqz": sign([i32], [i32]),
+  "i32.eq": sign([i32, i32], [i32]),
+  "i32.ne": sign([i32, i32], [i32]),
+  "i32.lt_s": sign([i32, i32], [i32]),
+  "i32.lt_u": sign([i32, i32], [i32]),
+  "i32.gt_s": sign([i32, i32], [i32]),
+  "i32.gt_u": sign([i32, i32], [i32]),
+  "i32.le_s": sign([i32, i32], [i32]),
+  "i32.le_u": sign([i32, i32], [i32]),
+  "i32.ge_s": sign([i32, i32], [i32]),
+  "i32.ge_u": sign([i32, i32], [i32]),
+  "i64.eqz": sign([i64], [i64]),
+  "i64.eq": sign([i64, i64], [i32]),
+  "i64.ne": sign([i64, i64], [i32]),
+  "i64.lt_s": sign([i64, i64], [i32]),
+  "i64.lt_u": sign([i64, i64], [i32]),
+  "i64.gt_s": sign([i64, i64], [i32]),
+  "i64.gt_u": sign([i64, i64], [i32]),
+  "i64.le_s": sign([i64, i64], [i32]),
+  "i64.le_u": sign([i64, i64], [i32]),
+  "i64.ge_s": sign([i64, i64], [i32]),
+  "i64.ge_u": sign([i64, i64], [i32]),
+  "f32.eq": sign([f32, f32], [i32]),
+  "f32.ne": sign([f32, f32], [i32]),
+  "f32.lt": sign([f32, f32], [i32]),
+  "f32.gt": sign([f32, f32], [i32]),
+  "f32.le": sign([f32, f32], [i32]),
+  "f32.ge": sign([f32, f32], [i32]),
+  "f64.eq": sign([f64, f64], [i32]),
+  "f64.ne": sign([f64, f64], [i32]),
+  "f64.lt": sign([f64, f64], [i32]),
+  "f64.gt": sign([f64, f64], [i32]),
+  "f64.le": sign([f64, f64], [i32]),
+  "f64.ge": sign([f64, f64], [i32]),
+  "i32.clz": sign([i32], [i32]),
+  "i32.ctz": sign([i32], [i32]),
+  "i32.popcnt": sign([i32], [i32]),
+  "i32.add": sign([i32, i32], [i32]),
+  "i32.sub": sign([i32, i32], [i32]),
+  "i32.mul": sign([i32, i32], [i32]),
+  "i32.div_s": sign([i32, i32], [i32]),
+  "i32.div_u": sign([i32, i32], [i32]),
+  "i32.rem_s": sign([i32, i32], [i32]),
+  "i32.rem_u": sign([i32, i32], [i32]),
+  "i32.and": sign([i32, i32], [i32]),
+  "i32.or": sign([i32, i32], [i32]),
+  "i32.xor": sign([i32, i32], [i32]),
+  "i32.shl": sign([i32, i32], [i32]),
+  "i32.shr_s": sign([i32, i32], [i32]),
+  "i32.shr_u": sign([i32, i32], [i32]),
+  "i32.rotl": sign([i32, i32], [i32]),
+  "i32.rotr": sign([i32, i32], [i32]),
+  "i64.clz": sign([i64], [i64]),
+  "i64.ctz": sign([i64], [i64]),
+  "i64.popcnt": sign([i64], [i64]),
+  "i64.add": sign([i64, i64], [i64]),
+  "i64.sub": sign([i64, i64], [i64]),
+  "i64.mul": sign([i64, i64], [i64]),
+  "i64.div_s": sign([i64, i64], [i64]),
+  "i64.div_u": sign([i64, i64], [i64]),
+  "i64.rem_s": sign([i64, i64], [i64]),
+  "i64.rem_u": sign([i64, i64], [i64]),
+  "i64.and": sign([i64, i64], [i64]),
+  "i64.or": sign([i64, i64], [i64]),
+  "i64.xor": sign([i64, i64], [i64]),
+  "i64.shl": sign([i64, i64], [i64]),
+  "i64.shr_s": sign([i64, i64], [i64]),
+  "i64.shr_u": sign([i64, i64], [i64]),
+  "i64.rotl": sign([i64, i64], [i64]),
+  "i64.rotr": sign([i64, i64], [i64]),
+  "f32.abs": sign([f32], [f32]),
+  "f32.neg": sign([f32], [f32]),
+  "f32.ceil": sign([f32], [f32]),
+  "f32.floor": sign([f32], [f32]),
+  "f32.trunc": sign([f32], [f32]),
+  "f32.nearest": sign([f32], [f32]),
+  "f32.sqrt": sign([f32], [f32]),
+  "f32.add": sign([f32, f32], [f32]),
+  "f32.sub": sign([f32, f32], [f32]),
+  "f32.mul": sign([f32, f32], [f32]),
+  "f32.div": sign([f32, f32], [f32]),
+  "f32.min": sign([f32, f32], [f32]),
+  "f32.max": sign([f32, f32], [f32]),
+  "f32.copysign": sign([f32, f32], [f32]),
+  "f64.abs": sign([f64], [f64]),
+  "f64.neg": sign([f64], [f64]),
+  "f64.ceil": sign([f64], [f64]),
+  "f64.floor": sign([f64], [f64]),
+  "f64.trunc": sign([f64], [f64]),
+  "f64.nearest": sign([f64], [f64]),
+  "f64.sqrt": sign([f64], [f64]),
+  "f64.add": sign([f64, f64], [f64]),
+  "f64.sub": sign([f64, f64], [f64]),
+  "f64.mul": sign([f64, f64], [f64]),
+  "f64.div": sign([f64, f64], [f64]),
+  "f64.min": sign([f64, f64], [f64]),
+  "f64.max": sign([f64, f64], [f64]),
+  "f64.copysign": sign([f64, f64], [f64]),
+  "i32.wrap/i64": sign([i64], [i32]),
+  "i32.trunc_s/f32": sign([f32], [i32]),
+  "i32.trunc_u/f32": sign([f32], [i32]),
+  "i32.trunc_s/f64": sign([f32], [i32]),
+  "i32.trunc_u/f64": sign([f64], [i32]),
+  "i64.extend_s/i32": sign([i32], [i64]),
+  "i64.extend_u/i32": sign([i32], [i64]),
+  "i64.trunc_s/f32": sign([f32], [i64]),
+  "i64.trunc_u/f32": sign([f32], [i64]),
+  "i64.trunc_s/f64": sign([f64], [i64]),
+  "i64.trunc_u/f64": sign([f64], [i64]),
+  "f32.convert_s/i32": sign([i32], [f32]),
+  "f32.convert_u/i32": sign([i32], [f32]),
+  "f32.convert_s/i64": sign([i64], [f32]),
+  "f32.convert_u/i64": sign([i64], [f32]),
+  "f32.demote/f64": sign([f64], [f32]),
+  "f64.convert_s/i32": sign([i32], [f64]),
+  "f64.convert_u/i32": sign([i32], [f64]),
+  "f64.convert_s/i64": sign([i64], [f64]),
+  "f64.convert_u/i64": sign([i64], [f64]),
+  "f64.promote/f32": sign([f32], [f64]),
+  "i32.reinterpret/f32": sign([f32], [i32]),
+  "i64.reinterpret/f64": sign([f64], [i64]),
+  "f32.reinterpret/i32": sign([i32], [f32]),
+  "f64.reinterpret/i64": sign([i64], [f64])
+};
+export var signatures = Object.assign({}, controlInstructions, parametricInstructions, variableInstructions, memoryInstructions, numericInstructions);

+ 76 - 0
js/node_modules/@webassemblyjs/ast/esm/transform/denormalize-type-references/index.js

@@ -0,0 +1,76 @@
+var t = require("../../index"); // func and call_indirect instructions can either define a signature inline, or
+// reference a signature, e.g.
+//
+// ;; inline signature
+// (func (result i64)
+//   (i64.const 2)
+// )
+// ;; signature reference
+// (type (func (result i64)))
+// (func (type 0)
+//   (i64.const 2))
+// )
+//
+// this AST transform denormalises the type references, making all signatures within the module
+// inline.
+
+
+export function transform(ast) {
+  var typeInstructions = [];
+  t.traverse(ast, {
+    TypeInstruction: function TypeInstruction(_ref) {
+      var node = _ref.node;
+      typeInstructions.push(node);
+    }
+  });
+
+  if (!typeInstructions.length) {
+    return;
+  }
+
+  function denormalizeSignature(signature) {
+    // signature referenced by identifier
+    if (signature.type === "Identifier") {
+      var identifier = signature;
+      var typeInstruction = typeInstructions.find(function (t) {
+        return t.id.type === identifier.type && t.id.value === identifier.value;
+      });
+
+      if (!typeInstruction) {
+        throw new Error("A type instruction reference was not found ".concat(JSON.stringify(signature)));
+      }
+
+      return typeInstruction.functype;
+    } // signature referenced by index
+
+
+    if (signature.type === "NumberLiteral") {
+      var signatureRef = signature;
+      var _typeInstruction = typeInstructions[signatureRef.value];
+      return _typeInstruction.functype;
+    }
+
+    return signature;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (_ref2) {
+      var node = _ref2.node;
+      node.signature = denormalizeSignature(node.signature);
+    }),
+    CallIndirectInstruction: function CallIndirectInstruction(_ref3) {
+      var node = _ref3.node;
+      node.signature = denormalizeSignature(node.signature);
+    }
+  });
+}

+ 216 - 0
js/node_modules/@webassemblyjs/ast/esm/transform/wast-identifier-to-index/index.js

@@ -0,0 +1,216 @@
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+import { isBlock, isFunc, isIdentifier, numberLiteralFromRaw, traverse } from "../../index";
+import { moduleContextFromModuleAST } from "@webassemblyjs/helper-module-context"; // FIXME(sven): do the same with all block instructions, must be more generic here
+
+function newUnexpectedFunction(i) {
+  return new Error("unknown function at offset: " + i);
+}
+
+export function transform(ast) {
+  var module;
+  traverse(ast, {
+    Module: function (_Module) {
+      function Module(_x) {
+        return _Module.apply(this, arguments);
+      }
+
+      Module.toString = function () {
+        return _Module.toString();
+      };
+
+      return Module;
+    }(function (path) {
+      module = path.node;
+    })
+  });
+  var moduleContext = moduleContextFromModuleAST(module); // Transform the actual instruction in function bodies
+
+  traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x2) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (path) {
+      transformFuncPath(path, moduleContext);
+    }),
+    Start: function (_Start) {
+      function Start(_x3) {
+        return _Start.apply(this, arguments);
+      }
+
+      Start.toString = function () {
+        return _Start.toString();
+      };
+
+      return Start;
+    }(function (path) {
+      var index = path.node.index;
+
+      if (isIdentifier(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        path.node.index = numberLiteralFromRaw(offsetInModule);
+      }
+    })
+  });
+}
+
+function transformFuncPath(funcPath, moduleContext) {
+  var funcNode = funcPath.node;
+  var signature = funcNode.signature;
+
+  if (signature.type !== "Signature") {
+    throw new Error("Function signatures must be denormalised before execution");
+  }
+
+  var params = signature.params; // Add func locals in the context
+
+  params.forEach(function (p) {
+    return moduleContext.addLocal(p.valtype);
+  });
+  traverse(funcNode, {
+    Instr: function (_Instr) {
+      function Instr(_x4) {
+        return _Instr.apply(this, arguments);
+      }
+
+      Instr.toString = function () {
+        return _Instr.toString();
+      };
+
+      return Instr;
+    }(function (instrPath) {
+      var instrNode = instrPath.node;
+      /**
+       * Local access
+       */
+
+      if (instrNode.id === "get_local" || instrNode.id === "set_local" || instrNode.id === "tee_local") {
+        var _instrNode$args = _slicedToArray(instrNode.args, 1),
+            firstArg = _instrNode$args[0];
+
+        if (firstArg.type === "Identifier") {
+          var offsetInParams = params.findIndex(function (_ref) {
+            var id = _ref.id;
+            return id === firstArg.value;
+          });
+
+          if (offsetInParams === -1) {
+            throw new Error("".concat(firstArg.value, " not found in ").concat(instrNode.id, ": not declared in func params"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = numberLiteralFromRaw(offsetInParams);
+        }
+      }
+      /**
+       * Global access
+       */
+
+
+      if (instrNode.id === "get_global" || instrNode.id === "set_global") {
+        var _instrNode$args2 = _slicedToArray(instrNode.args, 1),
+            _firstArg = _instrNode$args2[0];
+
+        if (isIdentifier(_firstArg) === true) {
+          var globalOffset = moduleContext.getGlobalOffsetByIdentifier( // $FlowIgnore: reference?
+          _firstArg.value);
+
+          if (typeof globalOffset === "undefined") {
+            // $FlowIgnore: reference?
+            throw new Error("global ".concat(_firstArg.value, " not found in module"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = numberLiteralFromRaw(globalOffset);
+        }
+      }
+      /**
+       * Labels lookup
+       */
+
+
+      if (instrNode.id === "br") {
+        var _instrNode$args3 = _slicedToArray(instrNode.args, 1),
+            _firstArg2 = _instrNode$args3[0];
+
+        if (isIdentifier(_firstArg2) === true) {
+          // if the labels is not found it is going to be replaced with -1
+          // which is invalid.
+          var relativeBlockCount = -1; // $FlowIgnore: reference?
+
+          instrPath.findParent(function (_ref2) {
+            var node = _ref2.node;
+
+            if (isBlock(node)) {
+              relativeBlockCount++; // $FlowIgnore: reference?
+
+              var name = node.label || node.name;
+
+              if (_typeof(name) === "object") {
+                // $FlowIgnore: isIdentifier ensures that
+                if (name.value === _firstArg2.value) {
+                  // Found it
+                  return false;
+                }
+              }
+            }
+
+            if (isFunc(node)) {
+              return false;
+            }
+          }); // Replace the Identifer node by our new NumberLiteral node
+
+          instrNode.args[0] = numberLiteralFromRaw(relativeBlockCount);
+        }
+      }
+    }),
+
+    /**
+     * Func lookup
+     */
+    CallInstruction: function (_CallInstruction) {
+      function CallInstruction(_x5) {
+        return _CallInstruction.apply(this, arguments);
+      }
+
+      CallInstruction.toString = function () {
+        return _CallInstruction.toString();
+      };
+
+      return CallInstruction;
+    }(function (_ref3) {
+      var node = _ref3.node;
+      var index = node.index;
+
+      if (isIdentifier(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        node.index = numberLiteralFromRaw(offsetInModule);
+      }
+    })
+  });
+}

+ 96 - 0
js/node_modules/@webassemblyjs/ast/esm/traverse.js

@@ -0,0 +1,96 @@
+import { createPath } from "./node-path";
+import { unionTypesMap, nodeAndUnionTypes } from "./nodes"; // recursively walks the AST starting at the given node. The callback is invoked for
+// and object that has a 'type' property.
+
+function walk(context, callback) {
+  var stop = false;
+
+  function innerWalk(context, callback) {
+    if (stop) {
+      return;
+    }
+
+    var node = context.node;
+
+    if (node === undefined) {
+      console.warn("traversing with an empty context");
+      return;
+    }
+
+    if (node._deleted === true) {
+      return;
+    }
+
+    var path = createPath(context);
+    callback(node.type, path);
+
+    if (path.shouldStop) {
+      stop = true;
+      return;
+    }
+
+    Object.keys(node).forEach(function (prop) {
+      var value = node[prop];
+
+      if (value === null || value === undefined) {
+        return;
+      }
+
+      var valueAsArray = Array.isArray(value) ? value : [value];
+      valueAsArray.forEach(function (childNode) {
+        if (typeof childNode.type === "string") {
+          var childContext = {
+            node: childNode,
+            parentKey: prop,
+            parentPath: path,
+            shouldStop: false,
+            inList: Array.isArray(value)
+          };
+          innerWalk(childContext, callback);
+        }
+      });
+    });
+  }
+
+  innerWalk(context, callback);
+}
+
+var noop = function noop() {};
+
+export function traverse(node, visitors) {
+  var before = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;
+  var after = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;
+  Object.keys(visitors).forEach(function (visitor) {
+    if (!nodeAndUnionTypes.includes(visitor)) {
+      throw new Error("Unexpected visitor ".concat(visitor));
+    }
+  });
+  var context = {
+    node: node,
+    inList: false,
+    shouldStop: false,
+    parentPath: null,
+    parentKey: null
+  };
+  walk(context, function (type, path) {
+    if (typeof visitors[type] === "function") {
+      before(type, path);
+      visitors[type](path);
+      after(type, path);
+    }
+
+    var unionTypes = unionTypesMap[type];
+
+    if (!unionTypes) {
+      throw new Error("Unexpected node type ".concat(type));
+    }
+
+    unionTypes.forEach(function (unionType) {
+      if (typeof visitors[unionType] === "function") {
+        before(unionType, path);
+        visitors[unionType](path);
+        after(unionType, path);
+      }
+    });
+  });
+}

+ 0 - 0
js/node_modules/@webassemblyjs/ast/esm/types/basic.js


+ 0 - 0
js/node_modules/@webassemblyjs/ast/esm/types/nodes.js


+ 0 - 0
js/node_modules/@webassemblyjs/ast/esm/types/traverse.js


+ 265 - 0
js/node_modules/@webassemblyjs/ast/esm/utils.js

@@ -0,0 +1,265 @@
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+import { signatures } from "./signatures";
+import { traverse } from "./traverse";
+import constants from "@webassemblyjs/helper-wasm-bytecode";
+import { getSectionForNode } from "@webassemblyjs/helper-wasm-bytecode";
+export function isAnonymous(ident) {
+  return ident.raw === "";
+}
+export function getSectionMetadata(ast, name) {
+  var section;
+  traverse(ast, {
+    SectionMetadata: function (_SectionMetadata) {
+      function SectionMetadata(_x) {
+        return _SectionMetadata.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref) {
+      var node = _ref.node;
+
+      if (node.section === name) {
+        section = node;
+      }
+    })
+  });
+  return section;
+}
+export function getSectionMetadatas(ast, name) {
+  var sections = [];
+  traverse(ast, {
+    SectionMetadata: function (_SectionMetadata2) {
+      function SectionMetadata(_x2) {
+        return _SectionMetadata2.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata2.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref2) {
+      var node = _ref2.node;
+
+      if (node.section === name) {
+        sections.push(node);
+      }
+    })
+  });
+  return sections;
+}
+export function sortSectionMetadata(m) {
+  if (m.metadata == null) {
+    console.warn("sortSectionMetadata: no metadata to sort");
+    return;
+  } // $FlowIgnore
+
+
+  m.metadata.sections.sort(function (a, b) {
+    var aId = constants.sections[a.section];
+    var bId = constants.sections[b.section];
+
+    if (typeof aId !== "number" || typeof bId !== "number") {
+      throw new Error("Section id not found");
+    }
+
+    return aId - bId;
+  });
+}
+export function orderedInsertNode(m, n) {
+  assertHasLoc(n);
+  var didInsert = false;
+
+  if (n.type === "ModuleExport") {
+    m.fields.push(n);
+    return;
+  }
+
+  m.fields = m.fields.reduce(function (acc, field) {
+    var fieldEndCol = Infinity;
+
+    if (field.loc != null) {
+      // $FlowIgnore
+      fieldEndCol = field.loc.end.column;
+    } // $FlowIgnore: assertHasLoc ensures that
+
+
+    if (didInsert === false && n.loc.start.column < fieldEndCol) {
+      didInsert = true;
+      acc.push(n);
+    }
+
+    acc.push(field);
+    return acc;
+  }, []); // Handles empty modules or n is the last element
+
+  if (didInsert === false) {
+    m.fields.push(n);
+  }
+}
+export function assertHasLoc(n) {
+  if (n.loc == null || n.loc.start == null || n.loc.end == null) {
+    throw new Error("Internal failure: node (".concat(JSON.stringify(n.type), ") has no location information"));
+  }
+}
+export function getEndOfSection(s) {
+  assertHasLoc(s.size);
+  return s.startOffset + s.size.value + ( // $FlowIgnore
+  s.size.loc.end.column - s.size.loc.start.column);
+}
+export function shiftLoc(node, delta) {
+  // $FlowIgnore
+  node.loc.start.column += delta; // $FlowIgnore
+
+  node.loc.end.column += delta;
+}
+export function shiftSection(ast, node, delta) {
+  if (node.type !== "SectionMetadata") {
+    throw new Error("Can not shift node " + JSON.stringify(node.type));
+  }
+
+  node.startOffset += delta;
+
+  if (_typeof(node.size.loc) === "object") {
+    shiftLoc(node.size, delta);
+  } // Custom sections doesn't have vectorOfSize
+
+
+  if (_typeof(node.vectorOfSize) === "object" && _typeof(node.vectorOfSize.loc) === "object") {
+    shiftLoc(node.vectorOfSize, delta);
+  }
+
+  var sectionName = node.section; // shift node locations within that section
+
+  traverse(ast, {
+    Node: function Node(_ref3) {
+      var node = _ref3.node;
+      var section = getSectionForNode(node);
+
+      if (section === sectionName && _typeof(node.loc) === "object") {
+        shiftLoc(node, delta);
+      }
+    }
+  });
+}
+export function signatureForOpcode(object, name) {
+  var opcodeName = name;
+
+  if (object !== undefined && object !== "") {
+    opcodeName = object + "." + name;
+  }
+
+  var sign = signatures[opcodeName];
+
+  if (sign == undefined) {
+    // TODO: Uncomment this when br_table and others has been done
+    //throw new Error("Invalid opcode: "+opcodeName);
+    return [object, object];
+  }
+
+  return sign[0];
+}
+export function getUniqueNameGenerator() {
+  var inc = {};
+  return function () {
+    var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp";
+
+    if (!(prefix in inc)) {
+      inc[prefix] = 0;
+    } else {
+      inc[prefix] = inc[prefix] + 1;
+    }
+
+    return prefix + "_" + inc[prefix];
+  };
+}
+export function getStartByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.start === "undefined") {
+    throw new Error( // $FlowIgnore
+    "Can not get byte offset without loc informations, node: " + String(n.id));
+  }
+
+  return n.loc.start.column;
+}
+export function getEndByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.end === "undefined") {
+    throw new Error("Can not get byte offset without loc informations, node: " + n.type);
+  }
+
+  return n.loc.end.column;
+}
+export function getFunctionBeginingByteOffset(n) {
+  if (!(n.body.length > 0)) {
+    throw new Error('n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var _n$body = _slicedToArray(n.body, 1),
+      firstInstruction = _n$body[0];
+
+  return getStartByteOffset(firstInstruction);
+}
+export function getEndBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var lastInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    lastInstruction = n.instr[n.instr.length - 1];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    lastInstruction = n.body[n.body.length - 1];
+  }
+
+  if (!(_typeof(lastInstruction) === "object")) {
+    throw new Error('typeof lastInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(lastInstruction);
+}
+export function getStartBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var fistInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    var _n$instr = _slicedToArray(n.instr, 1);
+
+    fistInstruction = _n$instr[0];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    var _n$body2 = _slicedToArray(n.body, 1);
+
+    fistInstruction = _n$body2[0];
+  }
+
+  if (!(_typeof(fistInstruction) === "object")) {
+    throw new Error('typeof fistInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(fistInstruction);
+}

+ 17 - 0
js/node_modules/@webassemblyjs/ast/lib/clone.js

@@ -0,0 +1,17 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.cloneNode = cloneNode;
+
+function cloneNode(n) {
+  // $FlowIgnore
+  var newObj = {};
+
+  for (var k in n) {
+    newObj[k] = n[k];
+  }
+
+  return newObj;
+}

+ 663 - 0
js/node_modules/@webassemblyjs/ast/lib/definitions.js

@@ -0,0 +1,663 @@
+var definitions = {};
+
+function defineType(typeName, metadata) {
+  definitions[typeName] = metadata;
+}
+
+defineType("Module", {
+  spec: {
+    wasm: "https://webassembly.github.io/spec/core/binary/modules.html#binary-module",
+    wat: "https://webassembly.github.io/spec/core/text/modules.html#text-module"
+  },
+  doc: "A module consists of a sequence of sections (termed fields in the text format).",
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    fields: {
+      array: true,
+      type: "Node"
+    },
+    metadata: {
+      optional: true,
+      type: "ModuleMetadata"
+    }
+  }
+});
+defineType("ModuleMetadata", {
+  unionType: ["Node"],
+  fields: {
+    sections: {
+      array: true,
+      type: "SectionMetadata"
+    },
+    functionNames: {
+      optional: true,
+      array: true,
+      type: "FunctionNameMetadata"
+    },
+    localNames: {
+      optional: true,
+      array: true,
+      type: "ModuleMetadata"
+    },
+    producers: {
+      optional: true,
+      array: true,
+      type: "ProducersSectionMetadata"
+    }
+  }
+});
+defineType("ModuleNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("FunctionNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    index: {
+      type: "number"
+    }
+  }
+});
+defineType("LocalNameMetadata", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    localIndex: {
+      type: "number"
+    },
+    functionIndex: {
+      type: "number"
+    }
+  }
+});
+defineType("BinaryModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    blob: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("QuoteModule", {
+  unionType: ["Node"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "string"
+    },
+    string: {
+      array: true,
+      type: "string"
+    }
+  }
+});
+defineType("SectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    section: {
+      type: "SectionName"
+    },
+    startOffset: {
+      type: "number"
+    },
+    size: {
+      type: "NumberLiteral"
+    },
+    vectorOfSize: {
+      comment: "Size of the vector in the section (if any)",
+      type: "NumberLiteral"
+    }
+  }
+});
+defineType("ProducersSectionMetadata", {
+  unionType: ["Node"],
+  fields: {
+    producers: {
+      array: true,
+      type: "ProducerMetadata"
+    }
+  }
+});
+defineType("ProducerMetadata", {
+  unionType: ["Node"],
+  fields: {
+    language: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    processedBy: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    },
+    sdk: {
+      type: "ProducerMetadataVersionedName",
+      array: true
+    }
+  }
+});
+defineType("ProducerMetadataVersionedName", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    version: {
+      type: "string"
+    }
+  }
+});
+/*
+Instructions
+*/
+
+defineType("LoopInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "loop"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    resulttype: {
+      maybe: true,
+      type: "Valtype"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+defineType("Instr", {
+  unionType: ["Node", "Expression", "Instruction"],
+  fields: {
+    id: {
+      type: "string"
+    },
+    object: {
+      optional: true,
+      type: "Valtype"
+    },
+    args: {
+      array: true,
+      type: "Expression"
+    },
+    namedArgs: {
+      optional: true,
+      type: "Object"
+    }
+  }
+});
+defineType("IfInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "if"
+    },
+    testLabel: {
+      comment: "only for WAST",
+      type: "Identifier"
+    },
+    test: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    },
+    consequent: {
+      array: true,
+      type: "Instruction"
+    },
+    alternate: {
+      array: true,
+      type: "Instruction"
+    }
+  }
+});
+/* 
+Concrete value types
+*/
+
+defineType("StringLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("NumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("LongNumberLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "LongNumber"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("FloatLiteral", {
+  unionType: ["Node", "NumericLiteral", "Expression"],
+  fields: {
+    value: {
+      type: "number"
+    },
+    nan: {
+      optional: true,
+      type: "boolean"
+    },
+    inf: {
+      optional: true,
+      type: "boolean"
+    },
+    raw: {
+      type: "string"
+    }
+  }
+});
+defineType("Elem", {
+  unionType: ["Node"],
+  fields: {
+    table: {
+      type: "Index"
+    },
+    offset: {
+      array: true,
+      type: "Instruction"
+    },
+    funcs: {
+      array: true,
+      type: "Index"
+    }
+  }
+});
+defineType("IndexInFuncSection", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("ValtypeLiteral", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    name: {
+      type: "Valtype"
+    }
+  }
+});
+defineType("TypeInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      maybe: true,
+      type: "Index"
+    },
+    functype: {
+      type: "Signature"
+    }
+  }
+});
+defineType("Start", {
+  unionType: ["Node"],
+  fields: {
+    index: {
+      type: "Index"
+    }
+  }
+});
+defineType("GlobalType", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    valtype: {
+      type: "Valtype"
+    },
+    mutability: {
+      type: "Mutability"
+    }
+  }
+});
+defineType("LeadingComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("BlockComment", {
+  unionType: ["Node"],
+  fields: {
+    value: {
+      type: "string"
+    }
+  }
+});
+defineType("Data", {
+  unionType: ["Node"],
+  fields: {
+    memoryIndex: {
+      type: "Memidx"
+    },
+    offset: {
+      type: "Instruction"
+    },
+    init: {
+      type: "ByteArray"
+    }
+  }
+});
+defineType("Global", {
+  unionType: ["Node"],
+  fields: {
+    globalType: {
+      type: "GlobalType"
+    },
+    init: {
+      array: true,
+      type: "Instruction"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    }
+  }
+});
+defineType("Table", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    elementType: {
+      type: "TableElementType"
+    },
+    limits: {
+      assertNodeType: true,
+      type: "Limit"
+    },
+    name: {
+      maybe: true,
+      type: "Identifier"
+    },
+    elements: {
+      array: true,
+      optional: true,
+      type: "Index"
+    }
+  }
+});
+defineType("Memory", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    limits: {
+      type: "Limit"
+    },
+    id: {
+      maybe: true,
+      type: "Index"
+    }
+  }
+});
+defineType("FuncImportDescr", {
+  unionType: ["Node", "ImportDescr"],
+  fields: {
+    id: {
+      type: "Identifier"
+    },
+    signature: {
+      type: "Signature"
+    }
+  }
+});
+defineType("ModuleImport", {
+  unionType: ["Node"],
+  fields: {
+    module: {
+      type: "string"
+    },
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ImportDescr"
+    }
+  }
+});
+defineType("ModuleExportDescr", {
+  unionType: ["Node"],
+  fields: {
+    exportType: {
+      type: "ExportDescrType"
+    },
+    id: {
+      type: "Index"
+    }
+  }
+});
+defineType("ModuleExport", {
+  unionType: ["Node"],
+  fields: {
+    name: {
+      type: "string"
+    },
+    descr: {
+      type: "ModuleExportDescr"
+    }
+  }
+});
+defineType("Limit", {
+  unionType: ["Node"],
+  fields: {
+    min: {
+      type: "number"
+    },
+    max: {
+      optional: true,
+      type: "number"
+    }
+  }
+});
+defineType("Signature", {
+  unionType: ["Node"],
+  fields: {
+    params: {
+      array: true,
+      type: "FuncParam"
+    },
+    results: {
+      array: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("Program", {
+  unionType: ["Node"],
+  fields: {
+    body: {
+      array: true,
+      type: "Node"
+    }
+  }
+});
+defineType("Identifier", {
+  unionType: ["Node", "Expression"],
+  fields: {
+    value: {
+      type: "string"
+    },
+    raw: {
+      optional: true,
+      type: "string"
+    }
+  }
+});
+defineType("BlockInstruction", {
+  unionType: ["Node", "Block", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "block"
+    },
+    label: {
+      maybe: true,
+      type: "Identifier"
+    },
+    instr: {
+      array: true,
+      type: "Instruction"
+    },
+    result: {
+      maybe: true,
+      type: "Valtype"
+    }
+  }
+});
+defineType("CallInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call"
+    },
+    index: {
+      type: "Index"
+    },
+    instrArgs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    },
+    numeric: {
+      type: "Index",
+      optional: true
+    }
+  }
+});
+defineType("CallIndirectInstruction", {
+  unionType: ["Node", "Instruction"],
+  fields: {
+    id: {
+      constant: true,
+      type: "string",
+      value: "call_indirect"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    intrs: {
+      array: true,
+      optional: true,
+      type: "Expression"
+    }
+  }
+});
+defineType("ByteArray", {
+  unionType: ["Node"],
+  fields: {
+    values: {
+      array: true,
+      type: "Byte"
+    }
+  }
+});
+defineType("Func", {
+  unionType: ["Node", "Block"],
+  fields: {
+    name: {
+      maybe: true,
+      type: "Index"
+    },
+    signature: {
+      type: "SignatureOrTypeRef"
+    },
+    body: {
+      array: true,
+      type: "Instruction"
+    },
+    isExternal: {
+      comment: "means that it has been imported from the outside js",
+      optional: true,
+      type: "boolean"
+    },
+    metadata: {
+      optional: true,
+      type: "FuncMetadata"
+    }
+  }
+});
+/**
+ * Intrinsics
+ */
+
+defineType("InternalBrUnless", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalGoto", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+});
+defineType("InternalCallExtern", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {
+    target: {
+      type: "number"
+    }
+  }
+}); // function bodies are terminated by an `end` instruction but are missing a
+// return instruction
+//
+// Since we can't inject a new instruction we are injecting a new instruction.
+
+defineType("InternalEndAndReturn", {
+  unionType: ["Node", "Intrinsic"],
+  fields: {}
+});
+module.exports = definitions;

+ 118 - 0
js/node_modules/@webassemblyjs/ast/lib/index.js

@@ -0,0 +1,118 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var _exportNames = {
+  numberLiteralFromRaw: true,
+  withLoc: true,
+  withRaw: true,
+  funcParam: true,
+  indexLiteral: true,
+  memIndexLiteral: true,
+  instruction: true,
+  objectInstruction: true,
+  traverse: true,
+  signatures: true,
+  cloneNode: true
+};
+Object.defineProperty(exports, "numberLiteralFromRaw", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.numberLiteralFromRaw;
+  }
+});
+Object.defineProperty(exports, "withLoc", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.withLoc;
+  }
+});
+Object.defineProperty(exports, "withRaw", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.withRaw;
+  }
+});
+Object.defineProperty(exports, "funcParam", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.funcParam;
+  }
+});
+Object.defineProperty(exports, "indexLiteral", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.indexLiteral;
+  }
+});
+Object.defineProperty(exports, "memIndexLiteral", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.memIndexLiteral;
+  }
+});
+Object.defineProperty(exports, "instruction", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.instruction;
+  }
+});
+Object.defineProperty(exports, "objectInstruction", {
+  enumerable: true,
+  get: function get() {
+    return _nodeHelpers.objectInstruction;
+  }
+});
+Object.defineProperty(exports, "traverse", {
+  enumerable: true,
+  get: function get() {
+    return _traverse.traverse;
+  }
+});
+Object.defineProperty(exports, "signatures", {
+  enumerable: true,
+  get: function get() {
+    return _signatures.signatures;
+  }
+});
+Object.defineProperty(exports, "cloneNode", {
+  enumerable: true,
+  get: function get() {
+    return _clone.cloneNode;
+  }
+});
+
+var _nodes = require("./nodes");
+
+Object.keys(_nodes).forEach(function (key) {
+  if (key === "default" || key === "__esModule") return;
+  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+  Object.defineProperty(exports, key, {
+    enumerable: true,
+    get: function get() {
+      return _nodes[key];
+    }
+  });
+});
+
+var _nodeHelpers = require("./node-helpers.js");
+
+var _traverse = require("./traverse");
+
+var _signatures = require("./signatures");
+
+var _utils = require("./utils");
+
+Object.keys(_utils).forEach(function (key) {
+  if (key === "default" || key === "__esModule") return;
+  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
+  Object.defineProperty(exports, key, {
+    enumerable: true,
+    get: function get() {
+      return _utils[key];
+    }
+  });
+});
+
+var _clone = require("./clone");

+ 107 - 0
js/node_modules/@webassemblyjs/ast/lib/node-helpers.js

@@ -0,0 +1,107 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.numberLiteralFromRaw = numberLiteralFromRaw;
+exports.instruction = instruction;
+exports.objectInstruction = objectInstruction;
+exports.withLoc = withLoc;
+exports.withRaw = withRaw;
+exports.funcParam = funcParam;
+exports.indexLiteral = indexLiteral;
+exports.memIndexLiteral = memIndexLiteral;
+
+var _wastParser = require("@webassemblyjs/wast-parser");
+
+var _nodes = require("./nodes");
+
+function numberLiteralFromRaw(rawValue) {
+  var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32";
+  var original = rawValue; // Remove numeric separators _
+
+  if (typeof rawValue === "string") {
+    rawValue = rawValue.replace(/_/g, "");
+  }
+
+  if (typeof rawValue === "number") {
+    return (0, _nodes.numberLiteral)(rawValue, String(original));
+  } else {
+    switch (instructionType) {
+      case "i32":
+        {
+          return (0, _nodes.numberLiteral)((0, _wastParser.parse32I)(rawValue), String(original));
+        }
+
+      case "u32":
+        {
+          return (0, _nodes.numberLiteral)((0, _wastParser.parseU32)(rawValue), String(original));
+        }
+
+      case "i64":
+        {
+          return (0, _nodes.longNumberLiteral)((0, _wastParser.parse64I)(rawValue), String(original));
+        }
+
+      case "f32":
+        {
+          return (0, _nodes.floatLiteral)((0, _wastParser.parse32F)(rawValue), (0, _wastParser.isNanLiteral)(rawValue), (0, _wastParser.isInfLiteral)(rawValue), String(original));
+        }
+      // f64
+
+      default:
+        {
+          return (0, _nodes.floatLiteral)((0, _wastParser.parse64F)(rawValue), (0, _wastParser.isNanLiteral)(rawValue), (0, _wastParser.isInfLiteral)(rawValue), String(original));
+        }
+    }
+  }
+}
+
+function instruction(id) {
+  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+  var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+  return (0, _nodes.instr)(id, undefined, args, namedArgs);
+}
+
+function objectInstruction(id, object) {
+  var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
+  var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+  return (0, _nodes.instr)(id, object, args, namedArgs);
+}
+/**
+ * Decorators
+ */
+
+
+function withLoc(n, end, start) {
+  var loc = {
+    start: start,
+    end: end
+  };
+  n.loc = loc;
+  return n;
+}
+
+function withRaw(n, raw) {
+  n.raw = raw;
+  return n;
+}
+
+function funcParam(valtype, id) {
+  return {
+    id: id,
+    valtype: valtype
+  };
+}
+
+function indexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}
+
+function memIndexLiteral(value) {
+  // $FlowIgnore
+  var x = numberLiteralFromRaw(value, "u32");
+  return x;
+}

+ 144 - 0
js/node_modules/@webassemblyjs/ast/lib/node-path.js

@@ -0,0 +1,144 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.createPath = createPath;
+
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+function findParent(_ref, cb) {
+  var parentPath = _ref.parentPath;
+
+  if (parentPath == null) {
+    throw new Error("node is root");
+  }
+
+  var currentPath = parentPath;
+
+  while (cb(currentPath) !== false) {
+    // Hit the root node, stop
+    // $FlowIgnore
+    if (currentPath.parentPath == null) {
+      return null;
+    } // $FlowIgnore
+
+
+    currentPath = currentPath.parentPath;
+  }
+
+  return currentPath.node;
+}
+
+function insertBefore(context, newNode) {
+  return insert(context, newNode);
+}
+
+function insertAfter(context, newNode) {
+  return insert(context, newNode, 1);
+}
+
+function insert(_ref2, newNode) {
+  var node = _ref2.node,
+      inList = _ref2.inList,
+      parentPath = _ref2.parentPath,
+      parentKey = _ref2.parentKey;
+  var indexOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+  if (!inList) {
+    throw new Error('inList' + " error: " + ("insert can only be used for nodes that are within lists" || "unknown"));
+  }
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentList = parentPath.node[parentKey];
+  var indexInList = parentList.findIndex(function (n) {
+    return n === node;
+  });
+  parentList.splice(indexInList + indexOffset, 0, newNode);
+}
+
+function remove(_ref3) {
+  var node = _ref3.node,
+      parentKey = _ref3.parentKey,
+      parentPath = _ref3.parentPath;
+
+  if (!(parentPath != null)) {
+    throw new Error('parentPath != null' + " error: " + ("Can not remove root node" || "unknown"));
+  }
+
+  // $FlowIgnore
+  var parentNode = parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    // $FlowIgnore
+    parentNode[parentKey] = parentProperty.filter(function (n) {
+      return n !== node;
+    });
+  } else {
+    // $FlowIgnore
+    delete parentNode[parentKey];
+  }
+
+  node._deleted = true;
+}
+
+function stop(context) {
+  context.shouldStop = true;
+}
+
+function replaceWith(context, newNode) {
+  // $FlowIgnore
+  var parentNode = context.parentPath.node; // $FlowIgnore
+
+  var parentProperty = parentNode[context.parentKey];
+
+  if (Array.isArray(parentProperty)) {
+    var indexInList = parentProperty.findIndex(function (n) {
+      return n === context.node;
+    });
+    parentProperty.splice(indexInList, 1, newNode);
+  } else {
+    // $FlowIgnore
+    parentNode[context.parentKey] = newNode;
+  }
+
+  context.node._deleted = true;
+  context.node = newNode;
+} // bind the context to the first argument of node operations
+
+
+function bindNodeOperations(operations, context) {
+  var keys = Object.keys(operations);
+  var boundOperations = {};
+  keys.forEach(function (key) {
+    boundOperations[key] = operations[key].bind(null, context);
+  });
+  return boundOperations;
+}
+
+function createPathOperations(context) {
+  // $FlowIgnore
+  return bindNodeOperations({
+    findParent: findParent,
+    replaceWith: replaceWith,
+    remove: remove,
+    insertBefore: insertBefore,
+    insertAfter: insertAfter,
+    stop: stop
+  }, context);
+}
+
+function createPath(context) {
+  var path = _extends({}, context); // $FlowIgnore
+
+
+  Object.assign(path, createPathOperations(path)); // $FlowIgnore
+
+  return path;
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 52 - 0
js/node_modules/@webassemblyjs/ast/lib/nodes.js


+ 207 - 0
js/node_modules/@webassemblyjs/ast/lib/signatures.js

@@ -0,0 +1,207 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.signatures = void 0;
+
+function sign(input, output) {
+  return [input, output];
+}
+
+var u32 = "u32";
+var i32 = "i32";
+var i64 = "i64";
+var f32 = "f32";
+var f64 = "f64";
+
+var vector = function vector(t) {
+  var vecType = [t]; // $FlowIgnore
+
+  vecType.vector = true;
+  return vecType;
+};
+
+var controlInstructions = {
+  unreachable: sign([], []),
+  nop: sign([], []),
+  // block ?
+  // loop ?
+  // if ?
+  // if else ?
+  br: sign([u32], []),
+  br_if: sign([u32], []),
+  br_table: sign(vector(u32), []),
+  return: sign([], []),
+  call: sign([u32], []),
+  call_indirect: sign([u32], [])
+};
+var parametricInstructions = {
+  drop: sign([], []),
+  select: sign([], [])
+};
+var variableInstructions = {
+  get_local: sign([u32], []),
+  set_local: sign([u32], []),
+  tee_local: sign([u32], []),
+  get_global: sign([u32], []),
+  set_global: sign([u32], [])
+};
+var memoryInstructions = {
+  "i32.load": sign([u32, u32], [i32]),
+  "i64.load": sign([u32, u32], []),
+  "f32.load": sign([u32, u32], []),
+  "f64.load": sign([u32, u32], []),
+  "i32.load8_s": sign([u32, u32], [i32]),
+  "i32.load8_u": sign([u32, u32], [i32]),
+  "i32.load16_s": sign([u32, u32], [i32]),
+  "i32.load16_u": sign([u32, u32], [i32]),
+  "i64.load8_s": sign([u32, u32], [i64]),
+  "i64.load8_u": sign([u32, u32], [i64]),
+  "i64.load16_s": sign([u32, u32], [i64]),
+  "i64.load16_u": sign([u32, u32], [i64]),
+  "i64.load32_s": sign([u32, u32], [i64]),
+  "i64.load32_u": sign([u32, u32], [i64]),
+  "i32.store": sign([u32, u32], []),
+  "i64.store": sign([u32, u32], []),
+  "f32.store": sign([u32, u32], []),
+  "f64.store": sign([u32, u32], []),
+  "i32.store8": sign([u32, u32], []),
+  "i32.store16": sign([u32, u32], []),
+  "i64.store8": sign([u32, u32], []),
+  "i64.store16": sign([u32, u32], []),
+  "i64.store32": sign([u32, u32], []),
+  current_memory: sign([], []),
+  grow_memory: sign([], [])
+};
+var numericInstructions = {
+  "i32.const": sign([i32], [i32]),
+  "i64.const": sign([i64], [i64]),
+  "f32.const": sign([f32], [f32]),
+  "f64.const": sign([f64], [f64]),
+  "i32.eqz": sign([i32], [i32]),
+  "i32.eq": sign([i32, i32], [i32]),
+  "i32.ne": sign([i32, i32], [i32]),
+  "i32.lt_s": sign([i32, i32], [i32]),
+  "i32.lt_u": sign([i32, i32], [i32]),
+  "i32.gt_s": sign([i32, i32], [i32]),
+  "i32.gt_u": sign([i32, i32], [i32]),
+  "i32.le_s": sign([i32, i32], [i32]),
+  "i32.le_u": sign([i32, i32], [i32]),
+  "i32.ge_s": sign([i32, i32], [i32]),
+  "i32.ge_u": sign([i32, i32], [i32]),
+  "i64.eqz": sign([i64], [i64]),
+  "i64.eq": sign([i64, i64], [i32]),
+  "i64.ne": sign([i64, i64], [i32]),
+  "i64.lt_s": sign([i64, i64], [i32]),
+  "i64.lt_u": sign([i64, i64], [i32]),
+  "i64.gt_s": sign([i64, i64], [i32]),
+  "i64.gt_u": sign([i64, i64], [i32]),
+  "i64.le_s": sign([i64, i64], [i32]),
+  "i64.le_u": sign([i64, i64], [i32]),
+  "i64.ge_s": sign([i64, i64], [i32]),
+  "i64.ge_u": sign([i64, i64], [i32]),
+  "f32.eq": sign([f32, f32], [i32]),
+  "f32.ne": sign([f32, f32], [i32]),
+  "f32.lt": sign([f32, f32], [i32]),
+  "f32.gt": sign([f32, f32], [i32]),
+  "f32.le": sign([f32, f32], [i32]),
+  "f32.ge": sign([f32, f32], [i32]),
+  "f64.eq": sign([f64, f64], [i32]),
+  "f64.ne": sign([f64, f64], [i32]),
+  "f64.lt": sign([f64, f64], [i32]),
+  "f64.gt": sign([f64, f64], [i32]),
+  "f64.le": sign([f64, f64], [i32]),
+  "f64.ge": sign([f64, f64], [i32]),
+  "i32.clz": sign([i32], [i32]),
+  "i32.ctz": sign([i32], [i32]),
+  "i32.popcnt": sign([i32], [i32]),
+  "i32.add": sign([i32, i32], [i32]),
+  "i32.sub": sign([i32, i32], [i32]),
+  "i32.mul": sign([i32, i32], [i32]),
+  "i32.div_s": sign([i32, i32], [i32]),
+  "i32.div_u": sign([i32, i32], [i32]),
+  "i32.rem_s": sign([i32, i32], [i32]),
+  "i32.rem_u": sign([i32, i32], [i32]),
+  "i32.and": sign([i32, i32], [i32]),
+  "i32.or": sign([i32, i32], [i32]),
+  "i32.xor": sign([i32, i32], [i32]),
+  "i32.shl": sign([i32, i32], [i32]),
+  "i32.shr_s": sign([i32, i32], [i32]),
+  "i32.shr_u": sign([i32, i32], [i32]),
+  "i32.rotl": sign([i32, i32], [i32]),
+  "i32.rotr": sign([i32, i32], [i32]),
+  "i64.clz": sign([i64], [i64]),
+  "i64.ctz": sign([i64], [i64]),
+  "i64.popcnt": sign([i64], [i64]),
+  "i64.add": sign([i64, i64], [i64]),
+  "i64.sub": sign([i64, i64], [i64]),
+  "i64.mul": sign([i64, i64], [i64]),
+  "i64.div_s": sign([i64, i64], [i64]),
+  "i64.div_u": sign([i64, i64], [i64]),
+  "i64.rem_s": sign([i64, i64], [i64]),
+  "i64.rem_u": sign([i64, i64], [i64]),
+  "i64.and": sign([i64, i64], [i64]),
+  "i64.or": sign([i64, i64], [i64]),
+  "i64.xor": sign([i64, i64], [i64]),
+  "i64.shl": sign([i64, i64], [i64]),
+  "i64.shr_s": sign([i64, i64], [i64]),
+  "i64.shr_u": sign([i64, i64], [i64]),
+  "i64.rotl": sign([i64, i64], [i64]),
+  "i64.rotr": sign([i64, i64], [i64]),
+  "f32.abs": sign([f32], [f32]),
+  "f32.neg": sign([f32], [f32]),
+  "f32.ceil": sign([f32], [f32]),
+  "f32.floor": sign([f32], [f32]),
+  "f32.trunc": sign([f32], [f32]),
+  "f32.nearest": sign([f32], [f32]),
+  "f32.sqrt": sign([f32], [f32]),
+  "f32.add": sign([f32, f32], [f32]),
+  "f32.sub": sign([f32, f32], [f32]),
+  "f32.mul": sign([f32, f32], [f32]),
+  "f32.div": sign([f32, f32], [f32]),
+  "f32.min": sign([f32, f32], [f32]),
+  "f32.max": sign([f32, f32], [f32]),
+  "f32.copysign": sign([f32, f32], [f32]),
+  "f64.abs": sign([f64], [f64]),
+  "f64.neg": sign([f64], [f64]),
+  "f64.ceil": sign([f64], [f64]),
+  "f64.floor": sign([f64], [f64]),
+  "f64.trunc": sign([f64], [f64]),
+  "f64.nearest": sign([f64], [f64]),
+  "f64.sqrt": sign([f64], [f64]),
+  "f64.add": sign([f64, f64], [f64]),
+  "f64.sub": sign([f64, f64], [f64]),
+  "f64.mul": sign([f64, f64], [f64]),
+  "f64.div": sign([f64, f64], [f64]),
+  "f64.min": sign([f64, f64], [f64]),
+  "f64.max": sign([f64, f64], [f64]),
+  "f64.copysign": sign([f64, f64], [f64]),
+  "i32.wrap/i64": sign([i64], [i32]),
+  "i32.trunc_s/f32": sign([f32], [i32]),
+  "i32.trunc_u/f32": sign([f32], [i32]),
+  "i32.trunc_s/f64": sign([f32], [i32]),
+  "i32.trunc_u/f64": sign([f64], [i32]),
+  "i64.extend_s/i32": sign([i32], [i64]),
+  "i64.extend_u/i32": sign([i32], [i64]),
+  "i64.trunc_s/f32": sign([f32], [i64]),
+  "i64.trunc_u/f32": sign([f32], [i64]),
+  "i64.trunc_s/f64": sign([f64], [i64]),
+  "i64.trunc_u/f64": sign([f64], [i64]),
+  "f32.convert_s/i32": sign([i32], [f32]),
+  "f32.convert_u/i32": sign([i32], [f32]),
+  "f32.convert_s/i64": sign([i64], [f32]),
+  "f32.convert_u/i64": sign([i64], [f32]),
+  "f32.demote/f64": sign([f64], [f32]),
+  "f64.convert_s/i32": sign([i32], [f64]),
+  "f64.convert_u/i32": sign([i32], [f64]),
+  "f64.convert_s/i64": sign([i64], [f64]),
+  "f64.convert_u/i64": sign([i64], [f64]),
+  "f64.promote/f32": sign([f32], [f64]),
+  "i32.reinterpret/f32": sign([f32], [i32]),
+  "i64.reinterpret/f64": sign([f64], [i64]),
+  "f32.reinterpret/i32": sign([i32], [f32]),
+  "f64.reinterpret/i64": sign([i64], [f64])
+};
+var signatures = Object.assign({}, controlInstructions, parametricInstructions, variableInstructions, memoryInstructions, numericInstructions);
+exports.signatures = signatures;

+ 83 - 0
js/node_modules/@webassemblyjs/ast/lib/transform/denormalize-type-references/index.js

@@ -0,0 +1,83 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.transform = transform;
+
+var t = require("../../index"); // func and call_indirect instructions can either define a signature inline, or
+// reference a signature, e.g.
+//
+// ;; inline signature
+// (func (result i64)
+//   (i64.const 2)
+// )
+// ;; signature reference
+// (type (func (result i64)))
+// (func (type 0)
+//   (i64.const 2))
+// )
+//
+// this AST transform denormalises the type references, making all signatures within the module
+// inline.
+
+
+function transform(ast) {
+  var typeInstructions = [];
+  t.traverse(ast, {
+    TypeInstruction: function TypeInstruction(_ref) {
+      var node = _ref.node;
+      typeInstructions.push(node);
+    }
+  });
+
+  if (!typeInstructions.length) {
+    return;
+  }
+
+  function denormalizeSignature(signature) {
+    // signature referenced by identifier
+    if (signature.type === "Identifier") {
+      var identifier = signature;
+      var typeInstruction = typeInstructions.find(function (t) {
+        return t.id.type === identifier.type && t.id.value === identifier.value;
+      });
+
+      if (!typeInstruction) {
+        throw new Error("A type instruction reference was not found ".concat(JSON.stringify(signature)));
+      }
+
+      return typeInstruction.functype;
+    } // signature referenced by index
+
+
+    if (signature.type === "NumberLiteral") {
+      var signatureRef = signature;
+      var _typeInstruction = typeInstructions[signatureRef.value];
+      return _typeInstruction.functype;
+    }
+
+    return signature;
+  }
+
+  t.traverse(ast, {
+    Func: function (_Func) {
+      function Func(_x) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (_ref2) {
+      var node = _ref2.node;
+      node.signature = denormalizeSignature(node.signature);
+    }),
+    CallIndirectInstruction: function CallIndirectInstruction(_ref3) {
+      var node = _ref3.node;
+      node.signature = denormalizeSignature(node.signature);
+    }
+  });
+}

+ 225 - 0
js/node_modules/@webassemblyjs/ast/lib/transform/wast-identifier-to-index/index.js

@@ -0,0 +1,225 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.transform = transform;
+
+var _index = require("../../index");
+
+var _helperModuleContext = require("@webassemblyjs/helper-module-context");
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+// FIXME(sven): do the same with all block instructions, must be more generic here
+function newUnexpectedFunction(i) {
+  return new Error("unknown function at offset: " + i);
+}
+
+function transform(ast) {
+  var module;
+  (0, _index.traverse)(ast, {
+    Module: function (_Module) {
+      function Module(_x) {
+        return _Module.apply(this, arguments);
+      }
+
+      Module.toString = function () {
+        return _Module.toString();
+      };
+
+      return Module;
+    }(function (path) {
+      module = path.node;
+    })
+  });
+  var moduleContext = (0, _helperModuleContext.moduleContextFromModuleAST)(module); // Transform the actual instruction in function bodies
+
+  (0, _index.traverse)(ast, {
+    Func: function (_Func) {
+      function Func(_x2) {
+        return _Func.apply(this, arguments);
+      }
+
+      Func.toString = function () {
+        return _Func.toString();
+      };
+
+      return Func;
+    }(function (path) {
+      transformFuncPath(path, moduleContext);
+    }),
+    Start: function (_Start) {
+      function Start(_x3) {
+        return _Start.apply(this, arguments);
+      }
+
+      Start.toString = function () {
+        return _Start.toString();
+      };
+
+      return Start;
+    }(function (path) {
+      var index = path.node.index;
+
+      if ((0, _index.isIdentifier)(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        path.node.index = (0, _index.numberLiteralFromRaw)(offsetInModule);
+      }
+    })
+  });
+}
+
+function transformFuncPath(funcPath, moduleContext) {
+  var funcNode = funcPath.node;
+  var signature = funcNode.signature;
+
+  if (signature.type !== "Signature") {
+    throw new Error("Function signatures must be denormalised before execution");
+  }
+
+  var params = signature.params; // Add func locals in the context
+
+  params.forEach(function (p) {
+    return moduleContext.addLocal(p.valtype);
+  });
+  (0, _index.traverse)(funcNode, {
+    Instr: function (_Instr) {
+      function Instr(_x4) {
+        return _Instr.apply(this, arguments);
+      }
+
+      Instr.toString = function () {
+        return _Instr.toString();
+      };
+
+      return Instr;
+    }(function (instrPath) {
+      var instrNode = instrPath.node;
+      /**
+       * Local access
+       */
+
+      if (instrNode.id === "get_local" || instrNode.id === "set_local" || instrNode.id === "tee_local") {
+        var _instrNode$args = _slicedToArray(instrNode.args, 1),
+            firstArg = _instrNode$args[0];
+
+        if (firstArg.type === "Identifier") {
+          var offsetInParams = params.findIndex(function (_ref) {
+            var id = _ref.id;
+            return id === firstArg.value;
+          });
+
+          if (offsetInParams === -1) {
+            throw new Error("".concat(firstArg.value, " not found in ").concat(instrNode.id, ": not declared in func params"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = (0, _index.numberLiteralFromRaw)(offsetInParams);
+        }
+      }
+      /**
+       * Global access
+       */
+
+
+      if (instrNode.id === "get_global" || instrNode.id === "set_global") {
+        var _instrNode$args2 = _slicedToArray(instrNode.args, 1),
+            _firstArg = _instrNode$args2[0];
+
+        if ((0, _index.isIdentifier)(_firstArg) === true) {
+          var globalOffset = moduleContext.getGlobalOffsetByIdentifier( // $FlowIgnore: reference?
+          _firstArg.value);
+
+          if (typeof globalOffset === "undefined") {
+            // $FlowIgnore: reference?
+            throw new Error("global ".concat(_firstArg.value, " not found in module"));
+          } // Replace the Identifer node by our new NumberLiteral node
+
+
+          instrNode.args[0] = (0, _index.numberLiteralFromRaw)(globalOffset);
+        }
+      }
+      /**
+       * Labels lookup
+       */
+
+
+      if (instrNode.id === "br") {
+        var _instrNode$args3 = _slicedToArray(instrNode.args, 1),
+            _firstArg2 = _instrNode$args3[0];
+
+        if ((0, _index.isIdentifier)(_firstArg2) === true) {
+          // if the labels is not found it is going to be replaced with -1
+          // which is invalid.
+          var relativeBlockCount = -1; // $FlowIgnore: reference?
+
+          instrPath.findParent(function (_ref2) {
+            var node = _ref2.node;
+
+            if ((0, _index.isBlock)(node)) {
+              relativeBlockCount++; // $FlowIgnore: reference?
+
+              var name = node.label || node.name;
+
+              if (_typeof(name) === "object") {
+                // $FlowIgnore: isIdentifier ensures that
+                if (name.value === _firstArg2.value) {
+                  // Found it
+                  return false;
+                }
+              }
+            }
+
+            if ((0, _index.isFunc)(node)) {
+              return false;
+            }
+          }); // Replace the Identifer node by our new NumberLiteral node
+
+          instrNode.args[0] = (0, _index.numberLiteralFromRaw)(relativeBlockCount);
+        }
+      }
+    }),
+
+    /**
+     * Func lookup
+     */
+    CallInstruction: function (_CallInstruction) {
+      function CallInstruction(_x5) {
+        return _CallInstruction.apply(this, arguments);
+      }
+
+      CallInstruction.toString = function () {
+        return _CallInstruction.toString();
+      };
+
+      return CallInstruction;
+    }(function (_ref3) {
+      var node = _ref3.node;
+      var index = node.index;
+
+      if ((0, _index.isIdentifier)(index) === true) {
+        var offsetInModule = moduleContext.getFunctionOffsetByIdentifier(index.value);
+
+        if (typeof offsetInModule === "undefined") {
+          throw newUnexpectedFunction(index.value);
+        } // Replace the index Identifier
+        // $FlowIgnore: reference?
+
+
+        node.index = (0, _index.numberLiteralFromRaw)(offsetInModule);
+      }
+    })
+  });
+}

+ 105 - 0
js/node_modules/@webassemblyjs/ast/lib/traverse.js

@@ -0,0 +1,105 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.traverse = traverse;
+
+var _nodePath = require("./node-path");
+
+var _nodes = require("./nodes");
+
+// recursively walks the AST starting at the given node. The callback is invoked for
+// and object that has a 'type' property.
+function walk(context, callback) {
+  var stop = false;
+
+  function innerWalk(context, callback) {
+    if (stop) {
+      return;
+    }
+
+    var node = context.node;
+
+    if (node === undefined) {
+      console.warn("traversing with an empty context");
+      return;
+    }
+
+    if (node._deleted === true) {
+      return;
+    }
+
+    var path = (0, _nodePath.createPath)(context);
+    callback(node.type, path);
+
+    if (path.shouldStop) {
+      stop = true;
+      return;
+    }
+
+    Object.keys(node).forEach(function (prop) {
+      var value = node[prop];
+
+      if (value === null || value === undefined) {
+        return;
+      }
+
+      var valueAsArray = Array.isArray(value) ? value : [value];
+      valueAsArray.forEach(function (childNode) {
+        if (typeof childNode.type === "string") {
+          var childContext = {
+            node: childNode,
+            parentKey: prop,
+            parentPath: path,
+            shouldStop: false,
+            inList: Array.isArray(value)
+          };
+          innerWalk(childContext, callback);
+        }
+      });
+    });
+  }
+
+  innerWalk(context, callback);
+}
+
+var noop = function noop() {};
+
+function traverse(node, visitors) {
+  var before = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : noop;
+  var after = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;
+  Object.keys(visitors).forEach(function (visitor) {
+    if (!_nodes.nodeAndUnionTypes.includes(visitor)) {
+      throw new Error("Unexpected visitor ".concat(visitor));
+    }
+  });
+  var context = {
+    node: node,
+    inList: false,
+    shouldStop: false,
+    parentPath: null,
+    parentKey: null
+  };
+  walk(context, function (type, path) {
+    if (typeof visitors[type] === "function") {
+      before(type, path);
+      visitors[type](path);
+      after(type, path);
+    }
+
+    var unionTypes = _nodes.unionTypesMap[type];
+
+    if (!unionTypes) {
+      throw new Error("Unexpected node type ".concat(type));
+    }
+
+    unionTypes.forEach(function (unionType) {
+      if (typeof visitors[unionType] === "function") {
+        before(unionType, path);
+        visitors[unionType](path);
+        after(unionType, path);
+      }
+    });
+  });
+}

+ 0 - 0
js/node_modules/@webassemblyjs/ast/lib/types/basic.js


+ 0 - 0
js/node_modules/@webassemblyjs/ast/lib/types/nodes.js


+ 0 - 0
js/node_modules/@webassemblyjs/ast/lib/types/traverse.js


+ 306 - 0
js/node_modules/@webassemblyjs/ast/lib/utils.js

@@ -0,0 +1,306 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isAnonymous = isAnonymous;
+exports.getSectionMetadata = getSectionMetadata;
+exports.getSectionMetadatas = getSectionMetadatas;
+exports.sortSectionMetadata = sortSectionMetadata;
+exports.orderedInsertNode = orderedInsertNode;
+exports.assertHasLoc = assertHasLoc;
+exports.getEndOfSection = getEndOfSection;
+exports.shiftLoc = shiftLoc;
+exports.shiftSection = shiftSection;
+exports.signatureForOpcode = signatureForOpcode;
+exports.getUniqueNameGenerator = getUniqueNameGenerator;
+exports.getStartByteOffset = getStartByteOffset;
+exports.getEndByteOffset = getEndByteOffset;
+exports.getFunctionBeginingByteOffset = getFunctionBeginingByteOffset;
+exports.getEndBlockByteOffset = getEndBlockByteOffset;
+exports.getStartBlockByteOffset = getStartBlockByteOffset;
+
+var _signatures = require("./signatures");
+
+var _traverse = require("./traverse");
+
+var _helperWasmBytecode = _interopRequireWildcard(require("@webassemblyjs/helper-wasm-bytecode"));
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
+
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function isAnonymous(ident) {
+  return ident.raw === "";
+}
+
+function getSectionMetadata(ast, name) {
+  var section;
+  (0, _traverse.traverse)(ast, {
+    SectionMetadata: function (_SectionMetadata) {
+      function SectionMetadata(_x) {
+        return _SectionMetadata.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref) {
+      var node = _ref.node;
+
+      if (node.section === name) {
+        section = node;
+      }
+    })
+  });
+  return section;
+}
+
+function getSectionMetadatas(ast, name) {
+  var sections = [];
+  (0, _traverse.traverse)(ast, {
+    SectionMetadata: function (_SectionMetadata2) {
+      function SectionMetadata(_x2) {
+        return _SectionMetadata2.apply(this, arguments);
+      }
+
+      SectionMetadata.toString = function () {
+        return _SectionMetadata2.toString();
+      };
+
+      return SectionMetadata;
+    }(function (_ref2) {
+      var node = _ref2.node;
+
+      if (node.section === name) {
+        sections.push(node);
+      }
+    })
+  });
+  return sections;
+}
+
+function sortSectionMetadata(m) {
+  if (m.metadata == null) {
+    console.warn("sortSectionMetadata: no metadata to sort");
+    return;
+  } // $FlowIgnore
+
+
+  m.metadata.sections.sort(function (a, b) {
+    var aId = _helperWasmBytecode.default.sections[a.section];
+    var bId = _helperWasmBytecode.default.sections[b.section];
+
+    if (typeof aId !== "number" || typeof bId !== "number") {
+      throw new Error("Section id not found");
+    }
+
+    return aId - bId;
+  });
+}
+
+function orderedInsertNode(m, n) {
+  assertHasLoc(n);
+  var didInsert = false;
+
+  if (n.type === "ModuleExport") {
+    m.fields.push(n);
+    return;
+  }
+
+  m.fields = m.fields.reduce(function (acc, field) {
+    var fieldEndCol = Infinity;
+
+    if (field.loc != null) {
+      // $FlowIgnore
+      fieldEndCol = field.loc.end.column;
+    } // $FlowIgnore: assertHasLoc ensures that
+
+
+    if (didInsert === false && n.loc.start.column < fieldEndCol) {
+      didInsert = true;
+      acc.push(n);
+    }
+
+    acc.push(field);
+    return acc;
+  }, []); // Handles empty modules or n is the last element
+
+  if (didInsert === false) {
+    m.fields.push(n);
+  }
+}
+
+function assertHasLoc(n) {
+  if (n.loc == null || n.loc.start == null || n.loc.end == null) {
+    throw new Error("Internal failure: node (".concat(JSON.stringify(n.type), ") has no location information"));
+  }
+}
+
+function getEndOfSection(s) {
+  assertHasLoc(s.size);
+  return s.startOffset + s.size.value + ( // $FlowIgnore
+  s.size.loc.end.column - s.size.loc.start.column);
+}
+
+function shiftLoc(node, delta) {
+  // $FlowIgnore
+  node.loc.start.column += delta; // $FlowIgnore
+
+  node.loc.end.column += delta;
+}
+
+function shiftSection(ast, node, delta) {
+  if (node.type !== "SectionMetadata") {
+    throw new Error("Can not shift node " + JSON.stringify(node.type));
+  }
+
+  node.startOffset += delta;
+
+  if (_typeof(node.size.loc) === "object") {
+    shiftLoc(node.size, delta);
+  } // Custom sections doesn't have vectorOfSize
+
+
+  if (_typeof(node.vectorOfSize) === "object" && _typeof(node.vectorOfSize.loc) === "object") {
+    shiftLoc(node.vectorOfSize, delta);
+  }
+
+  var sectionName = node.section; // shift node locations within that section
+
+  (0, _traverse.traverse)(ast, {
+    Node: function Node(_ref3) {
+      var node = _ref3.node;
+      var section = (0, _helperWasmBytecode.getSectionForNode)(node);
+
+      if (section === sectionName && _typeof(node.loc) === "object") {
+        shiftLoc(node, delta);
+      }
+    }
+  });
+}
+
+function signatureForOpcode(object, name) {
+  var opcodeName = name;
+
+  if (object !== undefined && object !== "") {
+    opcodeName = object + "." + name;
+  }
+
+  var sign = _signatures.signatures[opcodeName];
+
+  if (sign == undefined) {
+    // TODO: Uncomment this when br_table and others has been done
+    //throw new Error("Invalid opcode: "+opcodeName);
+    return [object, object];
+  }
+
+  return sign[0];
+}
+
+function getUniqueNameGenerator() {
+  var inc = {};
+  return function () {
+    var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp";
+
+    if (!(prefix in inc)) {
+      inc[prefix] = 0;
+    } else {
+      inc[prefix] = inc[prefix] + 1;
+    }
+
+    return prefix + "_" + inc[prefix];
+  };
+}
+
+function getStartByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.start === "undefined") {
+    throw new Error( // $FlowIgnore
+    "Can not get byte offset without loc informations, node: " + String(n.id));
+  }
+
+  return n.loc.start.column;
+}
+
+function getEndByteOffset(n) {
+  // $FlowIgnore
+  if (typeof n.loc === "undefined" || typeof n.loc.end === "undefined") {
+    throw new Error("Can not get byte offset without loc informations, node: " + n.type);
+  }
+
+  return n.loc.end.column;
+}
+
+function getFunctionBeginingByteOffset(n) {
+  if (!(n.body.length > 0)) {
+    throw new Error('n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var _n$body = _slicedToArray(n.body, 1),
+      firstInstruction = _n$body[0];
+
+  return getStartByteOffset(firstInstruction);
+}
+
+function getEndBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var lastInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    lastInstruction = n.instr[n.instr.length - 1];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    lastInstruction = n.body[n.body.length - 1];
+  }
+
+  if (!(_typeof(lastInstruction) === "object")) {
+    throw new Error('typeof lastInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(lastInstruction);
+}
+
+function getStartBlockByteOffset(n) {
+  // $FlowIgnore
+  if (!(n.instr.length > 0 || n.body.length > 0)) {
+    throw new Error('n.instr.length > 0 || n.body.length > 0' + " error: " + (undefined || "unknown"));
+  }
+
+  var fistInstruction;
+
+  if (n.instr) {
+    // $FlowIgnore
+    var _n$instr = _slicedToArray(n.instr, 1);
+
+    fistInstruction = _n$instr[0];
+  }
+
+  if (n.body) {
+    // $FlowIgnore
+    var _n$body2 = _slicedToArray(n.body, 1);
+
+    fistInstruction = _n$body2[0];
+  }
+
+  if (!(_typeof(fistInstruction) === "object")) {
+    throw new Error('typeof fistInstruction === "object"' + " error: " + (undefined || "unknown"));
+  }
+
+  // $FlowIgnore
+  return getStartByteOffset(fistInstruction);
+}

+ 73 - 0
js/node_modules/@webassemblyjs/ast/package.json

@@ -0,0 +1,73 @@
+{
+  "_from": "@webassemblyjs/ast@1.9.0",
+  "_id": "@webassemblyjs/ast@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+  "_location": "/@webassemblyjs/ast",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/ast@1.9.0",
+    "name": "@webassemblyjs/ast",
+    "escapedName": "@webassemblyjs%2fast",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/helper-module-context",
+    "/@webassemblyjs/helper-wasm-section",
+    "/@webassemblyjs/wasm-edit",
+    "/@webassemblyjs/wasm-gen",
+    "/@webassemblyjs/wasm-opt",
+    "/@webassemblyjs/wasm-parser",
+    "/@webassemblyjs/wast-parser",
+    "/@webassemblyjs/wast-printer",
+    "/webpack"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+  "_shasum": "bd850604b4042459a5a41cd7d338cbed695ed964",
+  "_spec": "@webassemblyjs/ast@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/webpack",
+  "author": {
+    "name": "Sven Sauleau"
+  },
+  "bugs": {
+    "url": "https://github.com/xtuc/webassemblyjs/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@webassemblyjs/helper-module-context": "1.9.0",
+    "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+    "@webassemblyjs/wast-parser": "1.9.0"
+  },
+  "deprecated": false,
+  "description": "AST utils for webassemblyjs",
+  "devDependencies": {
+    "@webassemblyjs/helper-test-framework": "1.9.0",
+    "array.prototype.flatmap": "^1.2.1",
+    "dump-exports": "^0.1.0",
+    "mamacro": "^0.0.7"
+  },
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "homepage": "https://github.com/xtuc/webassemblyjs#readme",
+  "keywords": [
+    "webassembly",
+    "javascript",
+    "ast"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/ast",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xtuc/webassemblyjs.git"
+  },
+  "version": "1.9.0"
+}

+ 219 - 0
js/node_modules/@webassemblyjs/ast/scripts/generateNodeUtils.js

@@ -0,0 +1,219 @@
+const definitions = require("../src/definitions");
+const flatMap = require("array.prototype.flatmap");
+const {
+  typeSignature,
+  iterateProps,
+  mapProps,
+  filterProps,
+  unique
+} = require("./util");
+
+const stdout = process.stdout;
+
+const jsTypes = ["string", "number", "boolean"];
+
+const quote = value => `"${value}"`;
+
+function params(fields) {
+  const optionalDefault = field => (field.default ? ` = ${field.default}` : "");
+  return mapProps(fields)
+    .map(field => `${typeSignature(field)}${optionalDefault(field)}`)
+    .join(",");
+}
+
+function assertParamType({ assertNodeType, array, name, type }) {
+  if (array) {
+    // TODO - assert contents of array?
+    return `assert(typeof ${name} === "object" && typeof ${name}.length !== "undefined")\n`;
+  } else {
+    if (jsTypes.includes(type)) {
+      return `assert(
+          typeof ${name} === "${type}",
+          "Argument ${name} must be of type ${type}, given: " + typeof ${name}
+      )`;
+    }
+
+    if (assertNodeType === true) {
+      return `assert(
+        ${name}.type === "${type}",
+        "Argument ${name} must be of type ${type}, given: " + ${name}.type
+      )`;
+    }
+
+    return "";
+  }
+}
+
+function assertParam(meta) {
+  const paramAssertion = assertParamType(meta);
+
+  if (paramAssertion === "") {
+    return "";
+  }
+
+  if (meta.maybe || meta.optional) {
+    return `
+      if (${meta.name} !== null && ${meta.name} !== undefined) {
+        ${paramAssertion};
+      }
+    `;
+  } else {
+    return paramAssertion;
+  }
+}
+
+function assertParams(fields) {
+  return mapProps(fields)
+    .map(assertParam)
+    .join("\n");
+}
+
+function buildObject(typeDef) {
+  const optionalField = meta => {
+    if (meta.array) {
+      // omit optional array properties if the constructor function was supplied
+      // with an empty array
+      return `
+        if (typeof ${meta.name} !== "undefined" && ${meta.name}.length > 0) {
+          node.${meta.name} = ${meta.name};
+        }
+      `;
+    } else if (meta.type === "Object") {
+      // omit optional object properties if they have no keys
+      return `
+        if (typeof ${meta.name} !== "undefined" && Object.keys(${
+        meta.name
+      }).length !== 0) {
+          node.${meta.name} = ${meta.name};
+        }
+      `;
+    } else if (meta.type === "boolean") {
+      // omit optional boolean properties if they are not true
+      return `
+        if (${meta.name} === true) {
+          node.${meta.name} = true;
+        }
+      `;
+    } else {
+      return `
+        if (typeof ${meta.name} !== "undefined") {
+          node.${meta.name} = ${meta.name};
+        }
+      `;
+    }
+  };
+
+  const fields = mapProps(typeDef.fields)
+    .filter(f => !f.optional && !f.constant)
+    .map(f => f.name);
+
+  const constants = mapProps(typeDef.fields)
+    .filter(f => f.constant)
+    .map(f => `${f.name}: "${f.value}"`);
+
+  return `
+    const node: ${typeDef.flowTypeName || typeDef.name} = {
+      type: "${typeDef.name}",
+      ${constants.concat(fields).join(",")}
+    }
+
+    ${mapProps(typeDef.fields)
+      .filter(f => f.optional)
+      .map(optionalField)
+      .join("")}
+  `;
+}
+
+function lowerCamelCase(name) {
+  return name.substring(0, 1).toLowerCase() + name.substring(1);
+}
+
+function generate() {
+  stdout.write(`
+    // @flow
+
+    // THIS FILE IS AUTOGENERATED
+    // see scripts/generateNodeUtils.js
+
+    import { assert } from "mamacro";
+
+    function isTypeOf(t: string) {
+      return (n: Node) => n.type === t;
+    }
+
+    function assertTypeOf(t: string) {
+      return (n: Node) => assert(n.type === t);
+    }
+  `);
+
+  // Node builders
+  iterateProps(definitions, typeDefinition => {
+    stdout.write(`
+      export function ${lowerCamelCase(typeDefinition.name)} (
+        ${params(filterProps(typeDefinition.fields, f => !f.constant))}
+      ): ${typeDefinition.name} {
+
+        ${assertParams(filterProps(typeDefinition.fields, f => !f.constant))}
+        ${buildObject(typeDefinition)} 
+
+        return node;
+      }
+    `);
+  });
+
+  // Node testers
+  iterateProps(definitions, typeDefinition => {
+    stdout.write(`
+      export const is${typeDefinition.name} =
+        isTypeOf("${typeDefinition.name}");
+    `);
+  });
+
+  // Node union type testers
+  const unionTypes = unique(
+    flatMap(mapProps(definitions).filter(d => d.unionType), d => d.unionType)
+  );
+  unionTypes.forEach(unionType => {
+    stdout.write(
+      `
+      export const is${unionType} = (node: Node) => ` +
+        mapProps(definitions)
+          .filter(d => d.unionType && d.unionType.includes(unionType))
+          .map(d => `is${d.name}(node) `)
+          .join("||") +
+        ";\n\n"
+    );
+  });
+
+  // Node assertion
+  iterateProps(definitions, typeDefinition => {
+    stdout.write(`
+      export const assert${typeDefinition.name} =
+        assertTypeOf("${typeDefinition.name}");
+    `);
+  });
+
+  // a map from node type to its set of union types
+  stdout.write(
+    `
+    export const unionTypesMap = {` +
+      mapProps(definitions)
+        .filter(d => d.unionType)
+        .map(t => `"${t.name}": [${t.unionType.map(quote).join(",")}]\n`) +
+      `};
+      `
+  );
+
+  // an array of all node and union types
+  stdout.write(
+    `
+    export const nodeAndUnionTypes = [` +
+      mapProps(definitions)
+        .map(t => `"${t.name}"`)
+        .concat(unionTypes.map(quote))
+        .join(",") +
+      `];`
+  );
+}
+
+generate();

+ 47 - 0
js/node_modules/@webassemblyjs/ast/scripts/generateTypeDefinitions.js

@@ -0,0 +1,47 @@
+const definitions = require("../src/definitions");
+const flatMap = require("array.prototype.flatmap");
+const { typeSignature, mapProps, iterateProps, unique } = require("./util");
+
+const stdout = process.stdout;
+
+function params(fields) {
+  return mapProps(fields)
+    .map(typeSignature)
+    .join(",");
+}
+
+function generate() {
+  stdout.write(`
+    // @flow
+    /* eslint no-unused-vars: off */
+
+    // THIS FILE IS AUTOGENERATED
+    // see scripts/generateTypeDefinitions.js
+  `);
+
+  // generate union types
+  const unionTypes = unique(
+    flatMap(mapProps(definitions).filter(d => d.unionType), d => d.unionType)
+  );
+  unionTypes.forEach(unionType => {
+    stdout.write(
+      `type ${unionType} = ` +
+        mapProps(definitions)
+          .filter(d => d.unionType && d.unionType.includes(unionType))
+          .map(d => d.name)
+          .join("|") +
+        ";\n\n"
+    );
+  });
+
+  // generate the type definitions
+  iterateProps(definitions, typeDef => {
+    stdout.write(`type ${typeDef.name} = {
+        ...BaseNode,
+        type: "${typeDef.name}",
+        ${params(typeDef.fields)}
+      };\n\n`);
+  });
+}
+
+generate();

+ 38 - 0
js/node_modules/@webassemblyjs/ast/scripts/util.js

@@ -0,0 +1,38 @@
+function iterateProps(obj, iterator) {
+  Object.keys(obj).forEach(key => iterator({ ...obj[key], name: key }));
+}
+
+function mapProps(obj) {
+  return Object.keys(obj).map(key => ({ ...obj[key], name: key }));
+}
+
+function filterProps(obj, filter) {
+  const ret = {};
+  Object.keys(obj).forEach(key => {
+    if (filter(obj[key])) {
+      ret[key] = obj[key];
+    }
+  });
+  return ret;
+}
+
+function typeSignature(meta) {
+  const type = meta.array ? `Array<${meta.type}>` : meta.type;
+  if (meta.optional) {
+    return `${meta.name}?: ${type}`;
+  } else if (meta.maybe) {
+    return `${meta.name}: ?${type}`;
+  } else {
+    return `${meta.name}: ${type}`;
+  }
+}
+
+const unique = items => Array.from(new Set(items));
+
+module.exports = {
+  iterateProps,
+  mapProps,
+  filterProps,
+  typeSignature,
+  unique
+};

+ 21 - 0
js/node_modules/@webassemblyjs/floating-point-hex-parser/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Mauro Bringolf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 34 - 0
js/node_modules/@webassemblyjs/floating-point-hex-parser/README.md

@@ -0,0 +1,34 @@
+# Parser function for floating point hexadecimals
+
+[![license](https://img.shields.io/github/license/maurobringolf/@webassemblyjs/floating-point-hex-parser.svg)]()
+[![GitHub last commit](https://img.shields.io/github/last-commit/maurobringolf/@webassemblyjs/floating-point-hex-parser.svg)]()
+[![npm](https://img.shields.io/npm/v/@webassemblyjs/floating-point-hex-parser.svg)]()
+
+> A JavaScript function to parse floating point hexadecimals as defined by the [WebAssembly specification](https://webassembly.github.io/spec/core/text/values.html#text-hexfloat).
+
+## Usage
+
+```javascript
+import parseHexFloat from '@webassemblyjs/floating-point-hex-parser'
+
+parseHexFloat('0x1p-1')               // 0.5
+parseHexFloat('0x1.921fb54442d18p+2') // 6.283185307179586
+```
+
+## Tests
+
+This module is tested in two ways. The first one is through a small set of test cases that can be found in [test/regular.test.js](https://github.com/maurobringolf/@webassemblyjs/floating-point-hex-parser/blob/master/test/regular.test.js). The second one is non-deterministic (sometimes called *fuzzing*):
+
+1. Generate a random IEEE754 double precision value `x`.
+1. Compute its representation `y` in floating point hexadecimal format using the C standard library function `printf` since C supports this format.
+1. Give both values to JS testcase and see if `parseHexFloat(y) === x`.
+
+By default one `npm test` run tests 100 random samples. If you want to do more, you can set the environment variable `FUZZ_AMOUNT` to whatever number of runs you'd like. Because it uses one child process for each sample, it is really slow though. For more details about the randomized tests see [the source](https://github.com/maurobringolf/@webassemblyjs/floating-point-hex-parser/tree/master/test/fuzzing).
+
+## Links
+
+* [maurobringolf.ch/2017/12/hexadecimal-floating-point-notation/](https://maurobringolf.ch/2017/12/hexadecimal-floating-point-notation/)
+
+* [github.com/xtuc/js-webassembly-interpreter/issues/32](https://github.com/xtuc/js-webassembly-interpreter/issues/32)
+
+* [github.com/WebAssembly/design/issues/292](https://github.com/WebAssembly/design/issues/292)

+ 42 - 0
js/node_modules/@webassemblyjs/floating-point-hex-parser/esm/index.js

@@ -0,0 +1,42 @@
+export default function parse(input) {
+  input = input.toUpperCase();
+  var splitIndex = input.indexOf("P");
+  var mantissa, exponent;
+
+  if (splitIndex !== -1) {
+    mantissa = input.substring(0, splitIndex);
+    exponent = parseInt(input.substring(splitIndex + 1));
+  } else {
+    mantissa = input;
+    exponent = 0;
+  }
+
+  var dotIndex = mantissa.indexOf(".");
+
+  if (dotIndex !== -1) {
+    var integerPart = parseInt(mantissa.substring(0, dotIndex), 16);
+    var sign = Math.sign(integerPart);
+    integerPart = sign * integerPart;
+    var fractionLength = mantissa.length - dotIndex - 1;
+    var fractionalPart = parseInt(mantissa.substring(dotIndex + 1), 16);
+    var fraction = fractionLength > 0 ? fractionalPart / Math.pow(16, fractionLength) : 0;
+
+    if (sign === 0) {
+      if (fraction === 0) {
+        mantissa = sign;
+      } else {
+        if (Object.is(sign, -0)) {
+          mantissa = -fraction;
+        } else {
+          mantissa = fraction;
+        }
+      }
+    } else {
+      mantissa = sign * (integerPart + fraction);
+    }
+  } else {
+    mantissa = parseInt(mantissa, 16);
+  }
+
+  return mantissa * (splitIndex !== -1 ? Math.pow(2, exponent) : 1);
+}

+ 49 - 0
js/node_modules/@webassemblyjs/floating-point-hex-parser/lib/index.js

@@ -0,0 +1,49 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = parse;
+
+function parse(input) {
+  input = input.toUpperCase();
+  var splitIndex = input.indexOf("P");
+  var mantissa, exponent;
+
+  if (splitIndex !== -1) {
+    mantissa = input.substring(0, splitIndex);
+    exponent = parseInt(input.substring(splitIndex + 1));
+  } else {
+    mantissa = input;
+    exponent = 0;
+  }
+
+  var dotIndex = mantissa.indexOf(".");
+
+  if (dotIndex !== -1) {
+    var integerPart = parseInt(mantissa.substring(0, dotIndex), 16);
+    var sign = Math.sign(integerPart);
+    integerPart = sign * integerPart;
+    var fractionLength = mantissa.length - dotIndex - 1;
+    var fractionalPart = parseInt(mantissa.substring(dotIndex + 1), 16);
+    var fraction = fractionLength > 0 ? fractionalPart / Math.pow(16, fractionLength) : 0;
+
+    if (sign === 0) {
+      if (fraction === 0) {
+        mantissa = sign;
+      } else {
+        if (Object.is(sign, -0)) {
+          mantissa = -fraction;
+        } else {
+          mantissa = fraction;
+        }
+      }
+    } else {
+      mantissa = sign * (integerPart + fraction);
+    }
+  } else {
+    mantissa = parseInt(mantissa, 16);
+  }
+
+  return mantissa * (splitIndex !== -1 ? Math.pow(2, exponent) : 1);
+}

+ 56 - 0
js/node_modules/@webassemblyjs/floating-point-hex-parser/package.json

@@ -0,0 +1,56 @@
+{
+  "_from": "@webassemblyjs/floating-point-hex-parser@1.9.0",
+  "_id": "@webassemblyjs/floating-point-hex-parser@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
+  "_location": "/@webassemblyjs/floating-point-hex-parser",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/floating-point-hex-parser@1.9.0",
+    "name": "@webassemblyjs/floating-point-hex-parser",
+    "escapedName": "@webassemblyjs%2ffloating-point-hex-parser",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/wast-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+  "_shasum": "3c3d3b271bddfc84deb00f71344438311d52ffb4",
+  "_spec": "@webassemblyjs/floating-point-hex-parser@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/@webassemblyjs/wast-parser",
+  "author": {
+    "name": "Mauro Bringolf"
+  },
+  "bugs": {
+    "url": "https://github.com/xtuc/webassemblyjs/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A function to parse floating point hexadecimal strings as defined by the WebAssembly specification",
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "homepage": "https://github.com/xtuc/webassemblyjs#readme",
+  "keywords": [
+    "webassembly",
+    "floating-point"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/floating-point-hex-parser",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xtuc/webassemblyjs.git"
+  },
+  "scripts": {
+    "build-fuzzer": "[ -f ./test/fuzzing/parse.out ] || gcc ./test/fuzzing/parse.c -o ./test/fuzzing/parse.out -lm -Wall"
+  },
+  "version": "1.9.0"
+}

+ 21 - 0
js/node_modules/@webassemblyjs/helper-api-error/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 47 - 0
js/node_modules/@webassemblyjs/helper-api-error/esm/index.js

@@ -0,0 +1,47 @@
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+export var RuntimeError =
+/*#__PURE__*/
+function (_Error) {
+  _inherits(RuntimeError, _Error);
+
+  function RuntimeError() {
+    _classCallCheck(this, RuntimeError);
+
+    return _possibleConstructorReturn(this, (RuntimeError.__proto__ || Object.getPrototypeOf(RuntimeError)).apply(this, arguments));
+  }
+
+  return RuntimeError;
+}(Error);
+export var CompileError =
+/*#__PURE__*/
+function (_Error2) {
+  _inherits(CompileError, _Error2);
+
+  function CompileError() {
+    _classCallCheck(this, CompileError);
+
+    return _possibleConstructorReturn(this, (CompileError.__proto__ || Object.getPrototypeOf(CompileError)).apply(this, arguments));
+  }
+
+  return CompileError;
+}(Error);
+export var LinkError =
+/*#__PURE__*/
+function (_Error3) {
+  _inherits(LinkError, _Error3);
+
+  function LinkError() {
+    _classCallCheck(this, LinkError);
+
+    return _possibleConstructorReturn(this, (LinkError.__proto__ || Object.getPrototypeOf(LinkError)).apply(this, arguments));
+  }
+
+  return LinkError;
+}(Error);

+ 62 - 0
js/node_modules/@webassemblyjs/helper-api-error/lib/index.js

@@ -0,0 +1,62 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LinkError = exports.CompileError = exports.RuntimeError = void 0;
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var RuntimeError =
+/*#__PURE__*/
+function (_Error) {
+  _inherits(RuntimeError, _Error);
+
+  function RuntimeError() {
+    _classCallCheck(this, RuntimeError);
+
+    return _possibleConstructorReturn(this, (RuntimeError.__proto__ || Object.getPrototypeOf(RuntimeError)).apply(this, arguments));
+  }
+
+  return RuntimeError;
+}(Error);
+
+exports.RuntimeError = RuntimeError;
+
+var CompileError =
+/*#__PURE__*/
+function (_Error2) {
+  _inherits(CompileError, _Error2);
+
+  function CompileError() {
+    _classCallCheck(this, CompileError);
+
+    return _possibleConstructorReturn(this, (CompileError.__proto__ || Object.getPrototypeOf(CompileError)).apply(this, arguments));
+  }
+
+  return CompileError;
+}(Error);
+
+exports.CompileError = CompileError;
+
+var LinkError =
+/*#__PURE__*/
+function (_Error3) {
+  _inherits(LinkError, _Error3);
+
+  function LinkError() {
+    _classCallCheck(this, LinkError);
+
+    return _possibleConstructorReturn(this, (LinkError.__proto__ || Object.getPrototypeOf(LinkError)).apply(this, arguments));
+  }
+
+  return LinkError;
+}(Error);
+
+exports.LinkError = LinkError;

+ 42 - 0
js/node_modules/@webassemblyjs/helper-api-error/package.json

@@ -0,0 +1,42 @@
+{
+  "_from": "@webassemblyjs/helper-api-error@1.9.0",
+  "_id": "@webassemblyjs/helper-api-error@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
+  "_location": "/@webassemblyjs/helper-api-error",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/helper-api-error@1.9.0",
+    "name": "@webassemblyjs/helper-api-error",
+    "escapedName": "@webassemblyjs%2fhelper-api-error",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/wasm-parser",
+    "/@webassemblyjs/wast-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+  "_shasum": "203f676e333b96c9da2eeab3ccef33c45928b6a2",
+  "_spec": "@webassemblyjs/helper-api-error@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/@webassemblyjs/wast-parser",
+  "author": {
+    "name": "Sven Sauleau"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Common API errors",
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/helper-api-error",
+  "publishConfig": {
+    "access": "public"
+  },
+  "version": "1.9.0"
+}

+ 21 - 0
js/node_modules/@webassemblyjs/helper-buffer/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 65 - 0
js/node_modules/@webassemblyjs/helper-buffer/esm/compare.js

@@ -0,0 +1,65 @@
+// this are dev dependencies
+var diff = require("jest-diff");
+
+var _require = require("jest-diff/build/constants"),
+    NO_DIFF_MESSAGE = _require.NO_DIFF_MESSAGE;
+
+var _require2 = require("@webassemblyjs/wasm-parser"),
+    decode = _require2.decode;
+
+var oldConsoleLog = console.log;
+export function compareArrayBuffers(l, r) {
+  /**
+   * Decode left
+   */
+  var bufferL = "";
+
+  console.log = function () {
+    for (var _len = arguments.length, texts = new Array(_len), _key = 0; _key < _len; _key++) {
+      texts[_key] = arguments[_key];
+    }
+
+    return bufferL += texts.join("") + "\n";
+  };
+
+  try {
+    decode(l, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferL);
+    console.error(e);
+    throw e;
+  }
+  /**
+   * Decode right
+   */
+
+
+  var bufferR = "";
+
+  console.log = function () {
+    for (var _len2 = arguments.length, texts = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      texts[_key2] = arguments[_key2];
+    }
+
+    return bufferR += texts.join("") + "\n";
+  };
+
+  try {
+    decode(r, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferR);
+    console.error(e);
+    throw e;
+  }
+
+  console.log = oldConsoleLog;
+  var out = diff(bufferL, bufferR);
+
+  if (out !== null && out !== NO_DIFF_MESSAGE) {
+    throw new Error("\n" + out);
+  }
+}

+ 67 - 0
js/node_modules/@webassemblyjs/helper-buffer/esm/index.js

@@ -0,0 +1,67 @@
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function concatUint8Arrays() {
+  for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {
+    arrays[_key] = arguments[_key];
+  }
+
+  var totalLength = arrays.reduce(function (a, b) {
+    return a + b.length;
+  }, 0);
+  var result = new Uint8Array(totalLength);
+  var offset = 0;
+
+  for (var _i = 0; _i < arrays.length; _i++) {
+    var arr = arrays[_i];
+
+    if (arr instanceof Uint8Array === false) {
+      throw new Error("arr must be of type Uint8Array");
+    }
+
+    result.set(arr, offset);
+    offset += arr.length;
+  }
+
+  return result;
+}
+
+export function overrideBytesInBuffer(buffer, startLoc, endLoc, newBytes) {
+  var beforeBytes = buffer.slice(0, startLoc);
+  var afterBytes = buffer.slice(endLoc, buffer.length); // replacement is empty, we can omit it
+
+  if (newBytes.length === 0) {
+    return concatUint8Arrays(beforeBytes, afterBytes);
+  }
+
+  var replacement = Uint8Array.from(newBytes);
+  return concatUint8Arrays(beforeBytes, replacement, afterBytes);
+}
+export function makeBuffer() {
+  for (var _len2 = arguments.length, splitedBytes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+    splitedBytes[_key2] = arguments[_key2];
+  }
+
+  var bytes = [].concat.apply([], splitedBytes);
+  return new Uint8Array(bytes).buffer;
+}
+export function fromHexdump(str) {
+  var lines = str.split("\n"); // remove any leading left whitespace
+
+  lines = lines.map(function (line) {
+    return line.trim();
+  });
+  var bytes = lines.reduce(function (acc, line) {
+    var cols = line.split(" "); // remove the offset, left column
+
+    cols.shift();
+    cols = cols.filter(function (x) {
+      return x !== "";
+    });
+    var bytes = cols.map(function (x) {
+      return parseInt(x, 16);
+    });
+    acc.push.apply(acc, _toConsumableArray(bytes));
+    return acc;
+  }, []);
+  return Buffer.from(bytes);
+}

+ 73 - 0
js/node_modules/@webassemblyjs/helper-buffer/lib/compare.js

@@ -0,0 +1,73 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.compareArrayBuffers = compareArrayBuffers;
+
+// this are dev dependencies
+var diff = require("jest-diff");
+
+var _require = require("jest-diff/build/constants"),
+    NO_DIFF_MESSAGE = _require.NO_DIFF_MESSAGE;
+
+var _require2 = require("@webassemblyjs/wasm-parser"),
+    decode = _require2.decode;
+
+var oldConsoleLog = console.log;
+
+function compareArrayBuffers(l, r) {
+  /**
+   * Decode left
+   */
+  var bufferL = "";
+
+  console.log = function () {
+    for (var _len = arguments.length, texts = new Array(_len), _key = 0; _key < _len; _key++) {
+      texts[_key] = arguments[_key];
+    }
+
+    return bufferL += texts.join("") + "\n";
+  };
+
+  try {
+    decode(l, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferL);
+    console.error(e);
+    throw e;
+  }
+  /**
+   * Decode right
+   */
+
+
+  var bufferR = "";
+
+  console.log = function () {
+    for (var _len2 = arguments.length, texts = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      texts[_key2] = arguments[_key2];
+    }
+
+    return bufferR += texts.join("") + "\n";
+  };
+
+  try {
+    decode(r, {
+      dump: true
+    });
+  } catch (e) {
+    console.error(bufferR);
+    console.error(e);
+    throw e;
+  }
+
+  console.log = oldConsoleLog;
+  var out = diff(bufferL, bufferR);
+
+  if (out !== null && out !== NO_DIFF_MESSAGE) {
+    throw new Error("\n" + out);
+  }
+}

+ 78 - 0
js/node_modules/@webassemblyjs/helper-buffer/lib/index.js

@@ -0,0 +1,78 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.overrideBytesInBuffer = overrideBytesInBuffer;
+exports.makeBuffer = makeBuffer;
+exports.fromHexdump = fromHexdump;
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+function concatUint8Arrays() {
+  for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {
+    arrays[_key] = arguments[_key];
+  }
+
+  var totalLength = arrays.reduce(function (a, b) {
+    return a + b.length;
+  }, 0);
+  var result = new Uint8Array(totalLength);
+  var offset = 0;
+
+  for (var _i = 0; _i < arrays.length; _i++) {
+    var arr = arrays[_i];
+
+    if (arr instanceof Uint8Array === false) {
+      throw new Error("arr must be of type Uint8Array");
+    }
+
+    result.set(arr, offset);
+    offset += arr.length;
+  }
+
+  return result;
+}
+
+function overrideBytesInBuffer(buffer, startLoc, endLoc, newBytes) {
+  var beforeBytes = buffer.slice(0, startLoc);
+  var afterBytes = buffer.slice(endLoc, buffer.length); // replacement is empty, we can omit it
+
+  if (newBytes.length === 0) {
+    return concatUint8Arrays(beforeBytes, afterBytes);
+  }
+
+  var replacement = Uint8Array.from(newBytes);
+  return concatUint8Arrays(beforeBytes, replacement, afterBytes);
+}
+
+function makeBuffer() {
+  for (var _len2 = arguments.length, splitedBytes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+    splitedBytes[_key2] = arguments[_key2];
+  }
+
+  var bytes = [].concat.apply([], splitedBytes);
+  return new Uint8Array(bytes).buffer;
+}
+
+function fromHexdump(str) {
+  var lines = str.split("\n"); // remove any leading left whitespace
+
+  lines = lines.map(function (line) {
+    return line.trim();
+  });
+  var bytes = lines.reduce(function (acc, line) {
+    var cols = line.split(" "); // remove the offset, left column
+
+    cols.shift();
+    cols = cols.filter(function (x) {
+      return x !== "";
+    });
+    var bytes = cols.map(function (x) {
+      return parseInt(x, 16);
+    });
+    acc.push.apply(acc, _toConsumableArray(bytes));
+    return acc;
+  }, []);
+  return Buffer.from(bytes);
+}

+ 58 - 0
js/node_modules/@webassemblyjs/helper-buffer/package.json

@@ -0,0 +1,58 @@
+{
+  "_from": "@webassemblyjs/helper-buffer@1.9.0",
+  "_id": "@webassemblyjs/helper-buffer@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
+  "_location": "/@webassemblyjs/helper-buffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/helper-buffer@1.9.0",
+    "name": "@webassemblyjs/helper-buffer",
+    "escapedName": "@webassemblyjs%2fhelper-buffer",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/helper-wasm-section",
+    "/@webassemblyjs/wasm-edit",
+    "/@webassemblyjs/wasm-opt"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+  "_shasum": "a1442d269c5feb23fcbc9ef759dac3547f29de00",
+  "_spec": "@webassemblyjs/helper-buffer@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/@webassemblyjs/wasm-edit",
+  "author": {
+    "name": "Sven Sauleau"
+  },
+  "bugs": {
+    "url": "https://github.com/xtuc/webassemblyjs/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Buffer manipulation utility",
+  "devDependencies": {
+    "@webassemblyjs/wasm-parser": "1.9.0",
+    "jest-diff": "^24.0.0"
+  },
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "homepage": "https://github.com/xtuc/webassemblyjs#readme",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/helper-buffer",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xtuc/webassemblyjs.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "version": "1.9.0"
+}

+ 21 - 0
js/node_modules/@webassemblyjs/helper-code-frame/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 37 - 0
js/node_modules/@webassemblyjs/helper-code-frame/esm/index.js

@@ -0,0 +1,37 @@
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+import { print } from "@webassemblyjs/wast-printer";
+var SHOW_LINES_AROUND_POINTER = 5;
+
+function repeat(char, nb) {
+  return Array(nb).fill(char).join("");
+} // TODO(sven): allow arbitrary ast nodes
+
+
+export function codeFrameFromAst(ast, loc) {
+  return codeFrameFromSource(print(ast), loc);
+}
+export function codeFrameFromSource(source, loc) {
+  var start = loc.start,
+      end = loc.end;
+  var length = 1;
+
+  if (_typeof(end) === "object") {
+    length = end.column - start.column + 1;
+  }
+
+  return source.split("\n").reduce(function (acc, line, lineNbr) {
+    if (Math.abs(start.line - lineNbr) < SHOW_LINES_AROUND_POINTER) {
+      acc += line + "\n";
+    } // Add a new line with the pointer padded left
+
+
+    if (lineNbr === start.line - 1) {
+      acc += repeat(" ", start.column - 1);
+      acc += repeat("^", length);
+      acc += "\n";
+    }
+
+    return acc;
+  }, "");
+}

+ 47 - 0
js/node_modules/@webassemblyjs/helper-code-frame/lib/index.js

@@ -0,0 +1,47 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.codeFrameFromAst = codeFrameFromAst;
+exports.codeFrameFromSource = codeFrameFromSource;
+
+var _wastPrinter = require("@webassemblyjs/wast-printer");
+
+function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+var SHOW_LINES_AROUND_POINTER = 5;
+
+function repeat(char, nb) {
+  return Array(nb).fill(char).join("");
+} // TODO(sven): allow arbitrary ast nodes
+
+
+function codeFrameFromAst(ast, loc) {
+  return codeFrameFromSource((0, _wastPrinter.print)(ast), loc);
+}
+
+function codeFrameFromSource(source, loc) {
+  var start = loc.start,
+      end = loc.end;
+  var length = 1;
+
+  if (_typeof(end) === "object") {
+    length = end.column - start.column + 1;
+  }
+
+  return source.split("\n").reduce(function (acc, line, lineNbr) {
+    if (Math.abs(start.line - lineNbr) < SHOW_LINES_AROUND_POINTER) {
+      acc += line + "\n";
+    } // Add a new line with the pointer padded left
+
+
+    if (lineNbr === start.line - 1) {
+      acc += repeat(" ", start.column - 1);
+      acc += repeat("^", length);
+      acc += "\n";
+    }
+
+    return acc;
+  }, "");
+}

+ 55 - 0
js/node_modules/@webassemblyjs/helper-code-frame/package.json

@@ -0,0 +1,55 @@
+{
+  "_from": "@webassemblyjs/helper-code-frame@1.9.0",
+  "_id": "@webassemblyjs/helper-code-frame@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+  "_location": "/@webassemblyjs/helper-code-frame",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/helper-code-frame@1.9.0",
+    "name": "@webassemblyjs/helper-code-frame",
+    "escapedName": "@webassemblyjs%2fhelper-code-frame",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/wast-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+  "_shasum": "647f8892cd2043a82ac0c8c5e75c36f1d9159f27",
+  "_spec": "@webassemblyjs/helper-code-frame@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/@webassemblyjs/wast-parser",
+  "author": {
+    "name": "Sven Sauleau"
+  },
+  "bugs": {
+    "url": "https://github.com/xtuc/webassemblyjs/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@webassemblyjs/wast-printer": "1.9.0"
+  },
+  "deprecated": false,
+  "description": "",
+  "devDependencies": {
+    "@webassemblyjs/ast": "1.9.0"
+  },
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "homepage": "https://github.com/xtuc/webassemblyjs#readme",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/helper-code-frame",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xtuc/webassemblyjs.git"
+  },
+  "version": "1.9.0"
+}

+ 21 - 0
js/node_modules/@webassemblyjs/helper-fsm/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 101 - 0
js/node_modules/@webassemblyjs/helper-fsm/esm/index.js

@@ -0,0 +1,101 @@
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+var STOP = Symbol("STOP");
+
+function makeTransition(regex, nextState) {
+  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
+      _ref$n = _ref.n,
+      n = _ref$n === void 0 ? 1 : _ref$n,
+      allowedSeparator = _ref.allowedSeparator;
+
+  return function (instance) {
+    if (allowedSeparator) {
+      if (instance.input[instance.ptr] === allowedSeparator) {
+        if (regex.test(instance.input.substring(instance.ptr - 1, instance.ptr))) {
+          // Consume the separator and stay in current state
+          return [instance.currentState, 1];
+        } else {
+          return [instance.terminatingState, 0];
+        }
+      }
+    }
+
+    if (regex.test(instance.input.substring(instance.ptr, instance.ptr + n))) {
+      return [nextState, n];
+    }
+
+    return false;
+  };
+}
+
+function combineTransitions(transitions) {
+  return function () {
+    var match = false;
+    var currentTransitions = transitions[this.currentState] || [];
+
+    for (var i = 0; i < currentTransitions.length; ++i) {
+      match = currentTransitions[i](this);
+
+      if (match !== false) {
+        break;
+      }
+    }
+
+    return match || [this.terminatingState, 0];
+  };
+}
+
+var FSM =
+/*#__PURE__*/
+function () {
+  function FSM(transitions, initialState) {
+    var terminatingState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : STOP;
+
+    _classCallCheck(this, FSM);
+
+    this.initialState = initialState;
+    this.terminatingState = terminatingState;
+
+    if (terminatingState === STOP || !transitions[terminatingState]) {
+      transitions[terminatingState] = [];
+    }
+
+    this.transitionFunction = combineTransitions.call(this, transitions);
+  }
+
+  _createClass(FSM, [{
+    key: "run",
+    value: function run(input) {
+      this.input = input;
+      this.ptr = 0;
+      this.currentState = this.initialState;
+      var value = "";
+      var eatLength, nextState;
+
+      while (this.currentState !== this.terminatingState && this.ptr < this.input.length) {
+        var _transitionFunction = this.transitionFunction();
+
+        var _transitionFunction2 = _slicedToArray(_transitionFunction, 2);
+
+        nextState = _transitionFunction2[0];
+        eatLength = _transitionFunction2[1];
+        value += this.input.substring(this.ptr, this.ptr += eatLength);
+        this.currentState = nextState;
+      }
+
+      return value;
+    }
+  }]);
+
+  return FSM;
+}();
+
+export { makeTransition, FSM };

+ 109 - 0
js/node_modules/@webassemblyjs/helper-fsm/lib/index.js

@@ -0,0 +1,109 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.makeTransition = makeTransition;
+exports.FSM = void 0;
+
+function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+
+function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+var STOP = Symbol("STOP");
+
+function makeTransition(regex, nextState) {
+  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
+      _ref$n = _ref.n,
+      n = _ref$n === void 0 ? 1 : _ref$n,
+      allowedSeparator = _ref.allowedSeparator;
+
+  return function (instance) {
+    if (allowedSeparator) {
+      if (instance.input[instance.ptr] === allowedSeparator) {
+        if (regex.test(instance.input.substring(instance.ptr - 1, instance.ptr))) {
+          // Consume the separator and stay in current state
+          return [instance.currentState, 1];
+        } else {
+          return [instance.terminatingState, 0];
+        }
+      }
+    }
+
+    if (regex.test(instance.input.substring(instance.ptr, instance.ptr + n))) {
+      return [nextState, n];
+    }
+
+    return false;
+  };
+}
+
+function combineTransitions(transitions) {
+  return function () {
+    var match = false;
+    var currentTransitions = transitions[this.currentState] || [];
+
+    for (var i = 0; i < currentTransitions.length; ++i) {
+      match = currentTransitions[i](this);
+
+      if (match !== false) {
+        break;
+      }
+    }
+
+    return match || [this.terminatingState, 0];
+  };
+}
+
+var FSM =
+/*#__PURE__*/
+function () {
+  function FSM(transitions, initialState) {
+    var terminatingState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : STOP;
+
+    _classCallCheck(this, FSM);
+
+    this.initialState = initialState;
+    this.terminatingState = terminatingState;
+
+    if (terminatingState === STOP || !transitions[terminatingState]) {
+      transitions[terminatingState] = [];
+    }
+
+    this.transitionFunction = combineTransitions.call(this, transitions);
+  }
+
+  _createClass(FSM, [{
+    key: "run",
+    value: function run(input) {
+      this.input = input;
+      this.ptr = 0;
+      this.currentState = this.initialState;
+      var value = "";
+      var eatLength, nextState;
+
+      while (this.currentState !== this.terminatingState && this.ptr < this.input.length) {
+        var _transitionFunction = this.transitionFunction();
+
+        var _transitionFunction2 = _slicedToArray(_transitionFunction, 2);
+
+        nextState = _transitionFunction2[0];
+        eatLength = _transitionFunction2[1];
+        value += this.input.substring(this.ptr, this.ptr += eatLength);
+        this.currentState = nextState;
+      }
+
+      return value;
+    }
+  }]);
+
+  return FSM;
+}();
+
+exports.FSM = FSM;

+ 41 - 0
js/node_modules/@webassemblyjs/helper-fsm/package.json

@@ -0,0 +1,41 @@
+{
+  "_from": "@webassemblyjs/helper-fsm@1.9.0",
+  "_id": "@webassemblyjs/helper-fsm@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
+  "_location": "/@webassemblyjs/helper-fsm",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/helper-fsm@1.9.0",
+    "name": "@webassemblyjs/helper-fsm",
+    "escapedName": "@webassemblyjs%2fhelper-fsm",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/wast-parser"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+  "_shasum": "c05256b71244214671f4b08ec108ad63b70eddb8",
+  "_spec": "@webassemblyjs/helper-fsm@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/@webassemblyjs/wast-parser",
+  "author": {
+    "name": "Mauro Bringolf"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "FSM implementation",
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "license": "ISC",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/helper-fsm",
+  "publishConfig": {
+    "access": "public"
+  },
+  "version": "1.9.0"
+}

+ 21 - 0
js/node_modules/@webassemblyjs/helper-module-context/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 378 - 0
js/node_modules/@webassemblyjs/helper-module-context/esm/index.js

@@ -0,0 +1,378 @@
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+// TODO(sven): add flow in here
+import { isSignature, isNumberLiteral } from "@webassemblyjs/ast";
+export function moduleContextFromModuleAST(m) {
+  var moduleContext = new ModuleContext();
+
+  if (!(m.type === "Module")) {
+    throw new Error('m.type === "Module"' + " error: " + (undefined || "unknown"));
+  }
+
+  m.fields.forEach(function (field) {
+    switch (field.type) {
+      case "Start":
+        {
+          moduleContext.setStart(field.index);
+          break;
+        }
+
+      case "TypeInstruction":
+        {
+          moduleContext.addType(field);
+          break;
+        }
+
+      case "Func":
+        {
+          moduleContext.addFunction(field);
+          break;
+        }
+
+      case "Global":
+        {
+          moduleContext.defineGlobal(field);
+          break;
+        }
+
+      case "ModuleImport":
+        {
+          switch (field.descr.type) {
+            case "GlobalType":
+              {
+                moduleContext.importGlobal(field.descr.valtype, field.descr.mutability);
+                break;
+              }
+
+            case "Memory":
+              {
+                moduleContext.addMemory(field.descr.limits.min, field.descr.limits.max);
+                break;
+              }
+
+            case "FuncImportDescr":
+              {
+                moduleContext.importFunction(field.descr);
+                break;
+              }
+
+            case "Table":
+              {
+                // FIXME(sven): not implemented yet
+                break;
+              }
+
+            default:
+              throw new Error("Unsupported ModuleImport of type " + JSON.stringify(field.descr.type));
+          }
+
+          break;
+        }
+
+      case "Memory":
+        {
+          moduleContext.addMemory(field.limits.min, field.limits.max);
+          break;
+        }
+    }
+  });
+  return moduleContext;
+}
+/**
+ * Module context for type checking
+ */
+
+export var ModuleContext =
+/*#__PURE__*/
+function () {
+  function ModuleContext() {
+    _classCallCheck(this, ModuleContext);
+
+    this.funcs = [];
+    this.funcsOffsetByIdentifier = [];
+    this.types = [];
+    this.globals = [];
+    this.globalsOffsetByIdentifier = [];
+    this.mems = []; // Current stack frame
+
+    this.locals = [];
+    this.labels = [];
+    this.return = [];
+    this.debugName = "unknown";
+    this.start = null;
+  }
+  /**
+   * Set start segment
+   */
+
+
+  _createClass(ModuleContext, [{
+    key: "setStart",
+    value: function setStart(index) {
+      this.start = index.value;
+    }
+    /**
+     * Get start function
+     */
+
+  }, {
+    key: "getStart",
+    value: function getStart() {
+      return this.start;
+    }
+    /**
+     * Reset the active stack frame
+     */
+
+  }, {
+    key: "newContext",
+    value: function newContext(debugName, expectedResult) {
+      this.locals = [];
+      this.labels = [expectedResult];
+      this.return = expectedResult;
+      this.debugName = debugName;
+    }
+    /**
+     * Functions
+     */
+
+  }, {
+    key: "addFunction",
+    value: function addFunction(func
+    /*: Func*/
+    ) {
+      // eslint-disable-next-line prefer-const
+      var _ref = func.signature || {},
+          _ref$params = _ref.params,
+          args = _ref$params === void 0 ? [] : _ref$params,
+          _ref$results = _ref.results,
+          result = _ref$results === void 0 ? [] : _ref$results;
+
+      args = args.map(function (arg) {
+        return arg.valtype;
+      });
+      this.funcs.push({
+        args: args,
+        result: result
+      });
+
+      if (typeof func.name !== "undefined") {
+        this.funcsOffsetByIdentifier[func.name.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "importFunction",
+    value: function importFunction(funcimport) {
+      if (isSignature(funcimport.signature)) {
+        // eslint-disable-next-line prefer-const
+        var _funcimport$signature = funcimport.signature,
+            args = _funcimport$signature.params,
+            result = _funcimport$signature.results;
+        args = args.map(function (arg) {
+          return arg.valtype;
+        });
+        this.funcs.push({
+          args: args,
+          result: result
+        });
+      } else {
+        if (!isNumberLiteral(funcimport.signature)) {
+          throw new Error('isNumberLiteral(funcimport.signature)' + " error: " + (undefined || "unknown"));
+        }
+
+        var typeId = funcimport.signature.value;
+
+        if (!this.hasType(typeId)) {
+          throw new Error('this.hasType(typeId)' + " error: " + (undefined || "unknown"));
+        }
+
+        var signature = this.getType(typeId);
+        this.funcs.push({
+          args: signature.params.map(function (arg) {
+            return arg.valtype;
+          }),
+          result: signature.results
+        });
+      }
+
+      if (typeof funcimport.id !== "undefined") {
+        // imports are first, we can assume their index in the array
+        this.funcsOffsetByIdentifier[funcimport.id.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "hasFunction",
+    value: function hasFunction(index) {
+      return typeof this.getFunction(index) !== "undefined";
+    }
+  }, {
+    key: "getFunction",
+    value: function getFunction(index) {
+      if (typeof index !== "number") {
+        throw new Error("getFunction only supported for number index");
+      }
+
+      return this.funcs[index];
+    }
+  }, {
+    key: "getFunctionOffsetByIdentifier",
+    value: function getFunctionOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      return this.funcsOffsetByIdentifier[name];
+    }
+    /**
+     * Labels
+     */
+
+  }, {
+    key: "addLabel",
+    value: function addLabel(result) {
+      this.labels.unshift(result);
+    }
+  }, {
+    key: "hasLabel",
+    value: function hasLabel(index) {
+      return this.labels.length > index && index >= 0;
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel(index) {
+      return this.labels[index];
+    }
+  }, {
+    key: "popLabel",
+    value: function popLabel() {
+      this.labels.shift();
+    }
+    /**
+     * Locals
+     */
+
+  }, {
+    key: "hasLocal",
+    value: function hasLocal(index) {
+      return typeof this.getLocal(index) !== "undefined";
+    }
+  }, {
+    key: "getLocal",
+    value: function getLocal(index) {
+      return this.locals[index];
+    }
+  }, {
+    key: "addLocal",
+    value: function addLocal(type) {
+      this.locals.push(type);
+    }
+    /**
+     * Types
+     */
+
+  }, {
+    key: "addType",
+    value: function addType(type) {
+      if (!(type.functype.type === "Signature")) {
+        throw new Error('type.functype.type === "Signature"' + " error: " + (undefined || "unknown"));
+      }
+
+      this.types.push(type.functype);
+    }
+  }, {
+    key: "hasType",
+    value: function hasType(index) {
+      return this.types[index] !== undefined;
+    }
+  }, {
+    key: "getType",
+    value: function getType(index) {
+      return this.types[index];
+    }
+    /**
+     * Globals
+     */
+
+  }, {
+    key: "hasGlobal",
+    value: function hasGlobal(index) {
+      return this.globals.length > index && index >= 0;
+    }
+  }, {
+    key: "getGlobal",
+    value: function getGlobal(index) {
+      return this.globals[index].type;
+    }
+  }, {
+    key: "getGlobalOffsetByIdentifier",
+    value: function getGlobalOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      return this.globalsOffsetByIdentifier[name];
+    }
+  }, {
+    key: "defineGlobal",
+    value: function defineGlobal(global
+    /*: Global*/
+    ) {
+      var type = global.globalType.valtype;
+      var mutability = global.globalType.mutability;
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+
+      if (typeof global.name !== "undefined") {
+        this.globalsOffsetByIdentifier[global.name.value] = this.globals.length - 1;
+      }
+    }
+  }, {
+    key: "importGlobal",
+    value: function importGlobal(type, mutability) {
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+    }
+  }, {
+    key: "isMutableGlobal",
+    value: function isMutableGlobal(index) {
+      return this.globals[index].mutability === "var";
+    }
+  }, {
+    key: "isImmutableGlobal",
+    value: function isImmutableGlobal(index) {
+      return this.globals[index].mutability === "const";
+    }
+    /**
+     * Memories
+     */
+
+  }, {
+    key: "hasMemory",
+    value: function hasMemory(index) {
+      return this.mems.length > index && index >= 0;
+    }
+  }, {
+    key: "addMemory",
+    value: function addMemory(min, max) {
+      this.mems.push({
+        min: min,
+        max: max
+      });
+    }
+  }, {
+    key: "getMemory",
+    value: function getMemory(index) {
+      return this.mems[index];
+    }
+  }]);
+
+  return ModuleContext;
+}();

+ 389 - 0
js/node_modules/@webassemblyjs/helper-module-context/lib/index.js

@@ -0,0 +1,389 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.moduleContextFromModuleAST = moduleContextFromModuleAST;
+exports.ModuleContext = void 0;
+
+var _ast = require("@webassemblyjs/ast");
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function moduleContextFromModuleAST(m) {
+  var moduleContext = new ModuleContext();
+
+  if (!(m.type === "Module")) {
+    throw new Error('m.type === "Module"' + " error: " + (undefined || "unknown"));
+  }
+
+  m.fields.forEach(function (field) {
+    switch (field.type) {
+      case "Start":
+        {
+          moduleContext.setStart(field.index);
+          break;
+        }
+
+      case "TypeInstruction":
+        {
+          moduleContext.addType(field);
+          break;
+        }
+
+      case "Func":
+        {
+          moduleContext.addFunction(field);
+          break;
+        }
+
+      case "Global":
+        {
+          moduleContext.defineGlobal(field);
+          break;
+        }
+
+      case "ModuleImport":
+        {
+          switch (field.descr.type) {
+            case "GlobalType":
+              {
+                moduleContext.importGlobal(field.descr.valtype, field.descr.mutability);
+                break;
+              }
+
+            case "Memory":
+              {
+                moduleContext.addMemory(field.descr.limits.min, field.descr.limits.max);
+                break;
+              }
+
+            case "FuncImportDescr":
+              {
+                moduleContext.importFunction(field.descr);
+                break;
+              }
+
+            case "Table":
+              {
+                // FIXME(sven): not implemented yet
+                break;
+              }
+
+            default:
+              throw new Error("Unsupported ModuleImport of type " + JSON.stringify(field.descr.type));
+          }
+
+          break;
+        }
+
+      case "Memory":
+        {
+          moduleContext.addMemory(field.limits.min, field.limits.max);
+          break;
+        }
+    }
+  });
+  return moduleContext;
+}
+/**
+ * Module context for type checking
+ */
+
+
+var ModuleContext =
+/*#__PURE__*/
+function () {
+  function ModuleContext() {
+    _classCallCheck(this, ModuleContext);
+
+    this.funcs = [];
+    this.funcsOffsetByIdentifier = [];
+    this.types = [];
+    this.globals = [];
+    this.globalsOffsetByIdentifier = [];
+    this.mems = []; // Current stack frame
+
+    this.locals = [];
+    this.labels = [];
+    this.return = [];
+    this.debugName = "unknown";
+    this.start = null;
+  }
+  /**
+   * Set start segment
+   */
+
+
+  _createClass(ModuleContext, [{
+    key: "setStart",
+    value: function setStart(index) {
+      this.start = index.value;
+    }
+    /**
+     * Get start function
+     */
+
+  }, {
+    key: "getStart",
+    value: function getStart() {
+      return this.start;
+    }
+    /**
+     * Reset the active stack frame
+     */
+
+  }, {
+    key: "newContext",
+    value: function newContext(debugName, expectedResult) {
+      this.locals = [];
+      this.labels = [expectedResult];
+      this.return = expectedResult;
+      this.debugName = debugName;
+    }
+    /**
+     * Functions
+     */
+
+  }, {
+    key: "addFunction",
+    value: function addFunction(func
+    /*: Func*/
+    ) {
+      // eslint-disable-next-line prefer-const
+      var _ref = func.signature || {},
+          _ref$params = _ref.params,
+          args = _ref$params === void 0 ? [] : _ref$params,
+          _ref$results = _ref.results,
+          result = _ref$results === void 0 ? [] : _ref$results;
+
+      args = args.map(function (arg) {
+        return arg.valtype;
+      });
+      this.funcs.push({
+        args: args,
+        result: result
+      });
+
+      if (typeof func.name !== "undefined") {
+        this.funcsOffsetByIdentifier[func.name.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "importFunction",
+    value: function importFunction(funcimport) {
+      if ((0, _ast.isSignature)(funcimport.signature)) {
+        // eslint-disable-next-line prefer-const
+        var _funcimport$signature = funcimport.signature,
+            args = _funcimport$signature.params,
+            result = _funcimport$signature.results;
+        args = args.map(function (arg) {
+          return arg.valtype;
+        });
+        this.funcs.push({
+          args: args,
+          result: result
+        });
+      } else {
+        if (!(0, _ast.isNumberLiteral)(funcimport.signature)) {
+          throw new Error('isNumberLiteral(funcimport.signature)' + " error: " + (undefined || "unknown"));
+        }
+
+        var typeId = funcimport.signature.value;
+
+        if (!this.hasType(typeId)) {
+          throw new Error('this.hasType(typeId)' + " error: " + (undefined || "unknown"));
+        }
+
+        var signature = this.getType(typeId);
+        this.funcs.push({
+          args: signature.params.map(function (arg) {
+            return arg.valtype;
+          }),
+          result: signature.results
+        });
+      }
+
+      if (typeof funcimport.id !== "undefined") {
+        // imports are first, we can assume their index in the array
+        this.funcsOffsetByIdentifier[funcimport.id.value] = this.funcs.length - 1;
+      }
+    }
+  }, {
+    key: "hasFunction",
+    value: function hasFunction(index) {
+      return typeof this.getFunction(index) !== "undefined";
+    }
+  }, {
+    key: "getFunction",
+    value: function getFunction(index) {
+      if (typeof index !== "number") {
+        throw new Error("getFunction only supported for number index");
+      }
+
+      return this.funcs[index];
+    }
+  }, {
+    key: "getFunctionOffsetByIdentifier",
+    value: function getFunctionOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      return this.funcsOffsetByIdentifier[name];
+    }
+    /**
+     * Labels
+     */
+
+  }, {
+    key: "addLabel",
+    value: function addLabel(result) {
+      this.labels.unshift(result);
+    }
+  }, {
+    key: "hasLabel",
+    value: function hasLabel(index) {
+      return this.labels.length > index && index >= 0;
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel(index) {
+      return this.labels[index];
+    }
+  }, {
+    key: "popLabel",
+    value: function popLabel() {
+      this.labels.shift();
+    }
+    /**
+     * Locals
+     */
+
+  }, {
+    key: "hasLocal",
+    value: function hasLocal(index) {
+      return typeof this.getLocal(index) !== "undefined";
+    }
+  }, {
+    key: "getLocal",
+    value: function getLocal(index) {
+      return this.locals[index];
+    }
+  }, {
+    key: "addLocal",
+    value: function addLocal(type) {
+      this.locals.push(type);
+    }
+    /**
+     * Types
+     */
+
+  }, {
+    key: "addType",
+    value: function addType(type) {
+      if (!(type.functype.type === "Signature")) {
+        throw new Error('type.functype.type === "Signature"' + " error: " + (undefined || "unknown"));
+      }
+
+      this.types.push(type.functype);
+    }
+  }, {
+    key: "hasType",
+    value: function hasType(index) {
+      return this.types[index] !== undefined;
+    }
+  }, {
+    key: "getType",
+    value: function getType(index) {
+      return this.types[index];
+    }
+    /**
+     * Globals
+     */
+
+  }, {
+    key: "hasGlobal",
+    value: function hasGlobal(index) {
+      return this.globals.length > index && index >= 0;
+    }
+  }, {
+    key: "getGlobal",
+    value: function getGlobal(index) {
+      return this.globals[index].type;
+    }
+  }, {
+    key: "getGlobalOffsetByIdentifier",
+    value: function getGlobalOffsetByIdentifier(name) {
+      if (!(typeof name === "string")) {
+        throw new Error('typeof name === "string"' + " error: " + (undefined || "unknown"));
+      }
+
+      return this.globalsOffsetByIdentifier[name];
+    }
+  }, {
+    key: "defineGlobal",
+    value: function defineGlobal(global
+    /*: Global*/
+    ) {
+      var type = global.globalType.valtype;
+      var mutability = global.globalType.mutability;
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+
+      if (typeof global.name !== "undefined") {
+        this.globalsOffsetByIdentifier[global.name.value] = this.globals.length - 1;
+      }
+    }
+  }, {
+    key: "importGlobal",
+    value: function importGlobal(type, mutability) {
+      this.globals.push({
+        type: type,
+        mutability: mutability
+      });
+    }
+  }, {
+    key: "isMutableGlobal",
+    value: function isMutableGlobal(index) {
+      return this.globals[index].mutability === "var";
+    }
+  }, {
+    key: "isImmutableGlobal",
+    value: function isImmutableGlobal(index) {
+      return this.globals[index].mutability === "const";
+    }
+    /**
+     * Memories
+     */
+
+  }, {
+    key: "hasMemory",
+    value: function hasMemory(index) {
+      return this.mems.length > index && index >= 0;
+    }
+  }, {
+    key: "addMemory",
+    value: function addMemory(min, max) {
+      this.mems.push({
+        min: min,
+        max: max
+      });
+    }
+  }, {
+    key: "getMemory",
+    value: function getMemory(index) {
+      return this.mems[index];
+    }
+  }]);
+
+  return ModuleContext;
+}();
+
+exports.ModuleContext = ModuleContext;

+ 60 - 0
js/node_modules/@webassemblyjs/helper-module-context/package.json

@@ -0,0 +1,60 @@
+{
+  "_from": "@webassemblyjs/helper-module-context@1.9.0",
+  "_id": "@webassemblyjs/helper-module-context@1.9.0",
+  "_inBundle": false,
+  "_integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+  "_location": "/@webassemblyjs/helper-module-context",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "@webassemblyjs/helper-module-context@1.9.0",
+    "name": "@webassemblyjs/helper-module-context",
+    "escapedName": "@webassemblyjs%2fhelper-module-context",
+    "scope": "@webassemblyjs",
+    "rawSpec": "1.9.0",
+    "saveSpec": null,
+    "fetchSpec": "1.9.0"
+  },
+  "_requiredBy": [
+    "/@webassemblyjs/ast",
+    "/webpack"
+  ],
+  "_resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+  "_shasum": "25d8884b76839871a08a6c6f806c3979ef712f07",
+  "_spec": "@webassemblyjs/helper-module-context@1.9.0",
+  "_where": "/Users/ben/Desktop/app/be/be-ytb/js/node_modules/webpack",
+  "author": {
+    "name": "Sven Sauleau"
+  },
+  "bugs": {
+    "url": "https://github.com/xtuc/webassemblyjs/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@webassemblyjs/ast": "1.9.0"
+  },
+  "deprecated": false,
+  "description": "",
+  "devDependencies": {
+    "@webassemblyjs/wast-parser": "1.9.0",
+    "mamacro": "^0.0.7"
+  },
+  "gitHead": "0440b420888c1f7701eb9762ec657775506b87d8",
+  "homepage": "https://github.com/xtuc/webassemblyjs#readme",
+  "license": "MIT",
+  "main": "lib/index.js",
+  "module": "esm/index.js",
+  "name": "@webassemblyjs/helper-module-context",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xtuc/webassemblyjs.git"
+  },
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "version": "1.9.0"
+}

+ 287 - 0
js/node_modules/@webassemblyjs/helper-module-context/src/index.js

@@ -0,0 +1,287 @@
+// TODO(sven): add flow in here
+
+import { isSignature, isNumberLiteral } from "@webassemblyjs/ast";
+import { assert } from "mamacro";
+
+export function moduleContextFromModuleAST(m) {
+  const moduleContext = new ModuleContext();
+
+  assert(m.type === "Module");
+
+  m.fields.forEach(field => {
+    switch (field.type) {
+      case "Start": {
+        moduleContext.setStart(field.index);
+        break;
+      }
+      case "TypeInstruction": {
+        moduleContext.addType(field);
+        break;
+      }
+      case "Func": {
+        moduleContext.addFunction(field);
+        break;
+      }
+      case "Global": {
+        moduleContext.defineGlobal(field);
+        break;
+      }
+      case "ModuleImport": {
+        switch (field.descr.type) {
+          case "GlobalType": {
+            moduleContext.importGlobal(
+              field.descr.valtype,
+              field.descr.mutability
+            );
+            break;
+          }
+          case "Memory": {
+            moduleContext.addMemory(
+              field.descr.limits.min,
+              field.descr.limits.max
+            );
+            break;
+          }
+          case "FuncImportDescr": {
+            moduleContext.importFunction(field.descr);
+            break;
+          }
+
+          case "Table": {
+            // FIXME(sven): not implemented yet
+            break;
+          }
+
+          default:
+            throw new Error(
+              "Unsupported ModuleImport of type " +
+                JSON.stringify(field.descr.type)
+            );
+        }
+        break;
+      }
+      case "Memory": {
+        moduleContext.addMemory(field.limits.min, field.limits.max);
+        break;
+      }
+    }
+  });
+
+  return moduleContext;
+}
+
+/**
+ * Module context for type checking
+ */
+export class ModuleContext {
+  constructor() {
+    this.funcs = [];
+    this.funcsOffsetByIdentifier = [];
+
+    this.types = [];
+
+    this.globals = [];
+    this.globalsOffsetByIdentifier = [];
+
+    this.mems = [];
+
+    // Current stack frame
+    this.locals = [];
+    this.labels = [];
+    this.return = [];
+
+    this.debugName = "unknown";
+
+    this.start = null;
+  }
+
+  /**
+   * Set start segment
+   */
+  setStart(index) {
+    this.start = index.value;
+  }
+
+  /**
+   * Get start function
+   */
+  getStart() {
+    return this.start;
+  }
+
+  /**
+   * Reset the active stack frame
+   */
+  newContext(debugName, expectedResult) {
+    this.locals = [];
+    this.labels = [expectedResult];
+    this.return = expectedResult;
+    this.debugName = debugName;
+  }
+
+  /**
+   * Functions
+   */
+  addFunction(func /*: Func*/) {
+    // eslint-disable-next-line prefer-const
+    let { params: args = [], results: result = [] } = func.signature || {};
+
+    args = args.map(arg => arg.valtype);
+
+    this.funcs.push({ args, result });
+
+    if (typeof func.name !== "undefined") {
+      this.funcsOffsetByIdentifier[func.name.value] = this.funcs.length - 1;
+    }
+  }
+
+  importFunction(funcimport) {
+    if (isSignature(funcimport.signature)) {
+      // eslint-disable-next-line prefer-const
+      let { params: args, results: result } = funcimport.signature;
+      args = args.map(arg => arg.valtype);
+
+      this.funcs.push({ args, result });
+    } else {
+      assert(isNumberLiteral(funcimport.signature));
+
+      const typeId = funcimport.signature.value;
+      assert(this.hasType(typeId));
+
+      const signature = this.getType(typeId);
+      this.funcs.push({
+        args: signature.params.map(arg => arg.valtype),
+        result: signature.results
+      });
+    }
+
+    if (typeof funcimport.id !== "undefined") {
+      // imports are first, we can assume their index in the array
+      this.funcsOffsetByIdentifier[funcimport.id.value] = this.funcs.length - 1;
+    }
+  }
+
+  hasFunction(index) {
+    return typeof this.getFunction(index) !== "undefined";
+  }
+
+  getFunction(index) {
+    if (typeof index !== "number") {
+      throw new Error("getFunction only supported for number index");
+    }
+
+    return this.funcs[index];
+  }
+
+  getFunctionOffsetByIdentifier(name) {
+    assert(typeof name === "string");
+
+    return this.funcsOffsetByIdentifier[name];
+  }
+
+  /**
+   * Labels
+   */
+  addLabel(result) {
+    this.labels.unshift(result);
+  }
+
+  hasLabel(index) {
+    return this.labels.length > index && index >= 0;
+  }
+
+  getLabel(index) {
+    return this.labels[index];
+  }
+
+  popLabel() {
+    this.labels.shift();
+  }
+
+  /**
+   * Locals
+   */
+  hasLocal(index) {
+    return typeof this.getLocal(index) !== "undefined";
+  }
+
+  getLocal(index) {
+    return this.locals[index];
+  }
+
+  addLocal(type) {
+    this.locals.push(type);
+  }
+
+  /**
+   * Types
+   */
+  addType(type) {
+    assert(type.functype.type === "Signature");
+    this.types.push(type.functype);
+  }
+
+  hasType(index) {
+    return this.types[index] !== undefined;
+  }
+
+  getType(index) {
+    return this.types[index];
+  }
+
+  /**
+   * Globals
+   */
+  hasGlobal(index) {
+    return this.globals.length > index && index >= 0;
+  }
+
+  getGlobal(index) {
+    return this.globals[index].type;
+  }
+
+  getGlobalOffsetByIdentifier(name) {
+    assert(typeof name === "string");
+
+    return this.globalsOffsetByIdentifier[name];
+  }
+
+  defineGlobal(global /*: Global*/) {
+    const type = global.globalType.valtype;
+    const mutability = global.globalType.mutability;
+
+    this.globals.push({ type, mutability });
+
+    if (typeof global.name !== "undefined") {
+      this.globalsOffsetByIdentifier[global.name.value] =
+        this.globals.length - 1;
+    }
+  }
+
+  importGlobal(type, mutability) {
+    this.globals.push({ type, mutability });
+  }
+
+  isMutableGlobal(index) {
+    return this.globals[index].mutability === "var";
+  }
+
+  isImmutableGlobal(index) {
+    return this.globals[index].mutability === "const";
+  }
+
+  /**
+   * Memories
+   */
+  hasMemory(index) {
+    return this.mems.length > index && index >= 0;
+  }
+
+  addMemory(min, max) {
+    this.mems.push({ min, max });
+  }
+
+  getMemory(index) {
+    return this.mems[index];
+  }
+}

+ 100 - 0
js/node_modules/@webassemblyjs/helper-module-context/test/index.js

@@ -0,0 +1,100 @@
+const { assert } = require("chai");
+const { parse } = require("@webassemblyjs/wast-parser");
+
+const { moduleContextFromModuleAST } = require("../lib");
+
+const contextFromWast = wast => moduleContextFromModuleAST(parse(wast).body[0]);
+
+describe("module context", () => {
+  describe("start segment", () => {
+    it("should return the start function offset", () => {
+      const context = contextFromWast(`
+        (module
+          (func)
+          (func)
+          (start 1)
+        )
+      `);
+
+      assert.isOk(context.getStart());
+      assert.typeOf(context.getStart(), "number");
+      assert.equal(context.getStart(), 1);
+    });
+
+    it("should return null if no start function", () => {
+      const context = contextFromWast(`
+        (module (func))
+      `);
+
+      assert.isNull(context.getStart());
+    });
+
+    it("should retrive the type of implemented functions", () => {
+      const context = contextFromWast(`
+        (module
+          (func (param i32) (result i64))
+          (func (param i64) (result i32))
+          (func (result i64))
+          (func)
+        )
+      `);
+
+      assert.deepEqual(context.getFunction(0), {
+        args: ["i32"],
+        result: ["i64"]
+      });
+      assert.deepEqual(context.getFunction(1), {
+        args: ["i64"],
+        result: ["i32"]
+      });
+      assert.deepEqual(context.getFunction(2), { args: [], result: ["i64"] });
+      assert.deepEqual(context.getFunction(3), { args: [], result: [] });
+    });
+
+    it("should retrive the type of imported functions", () => {
+      const context = contextFromWast(`
+        (module
+          (import "a" "a" (func (param i32) (result i32)))
+          (import "a" "b" (func (result i64)))
+          (import "a" "c" (func))
+          (func (result f32))
+        )
+      `);
+
+      assert.deepEqual(context.getFunction(0), {
+        args: ["i32"],
+        result: ["i32"]
+      });
+      assert.deepEqual(context.getFunction(1), {
+        args: [],
+        result: ["i64"]
+      });
+      assert.deepEqual(context.getFunction(2), { args: [], result: [] });
+      assert.deepEqual(context.getFunction(3), { args: [], result: ["f32"] });
+    });
+
+    it("should retrive the type of functions with type ref", () => {
+      const context = contextFromWast(`
+        (module
+          (type (func (param i32) (result i32)))
+          (type (func (result i64)))
+          (type (func))
+
+          (import "a" "a" (func (type 0)))
+          (import "a" "b" (func (type 1)))
+          (func (type 2))
+        )
+      `);
+
+      assert.deepEqual(context.getFunction(0), {
+        args: ["i32"],
+        result: ["i32"]
+      });
+      assert.deepEqual(context.getFunction(1), {
+        args: [],
+        result: ["i64"]
+      });
+      assert.deepEqual(context.getFunction(2), { args: [], result: [] });
+    });
+  });
+});

+ 21 - 0
js/node_modules/@webassemblyjs/helper-wasm-bytecode/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sven Sauleau <sven@sauleau.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 324 - 0
js/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/index.js

@@ -0,0 +1,324 @@
+var illegalop = "illegal";
+var magicModuleHeader = [0x00, 0x61, 0x73, 0x6d];
+var moduleVersion = [0x01, 0x00, 0x00, 0x00];
+
+function invertMap(obj) {
+  var keyModifierFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (k) {
+    return k;
+  };
+  var result = {};
+  var keys = Object.keys(obj);
+
+  for (var i = 0, length = keys.length; i < length; i++) {
+    result[keyModifierFn(obj[keys[i]])] = keys[i];
+  }
+
+  return result;
+}
+
+function createSymbolObject(name
+/*: string */
+, object
+/*: string */
+)
+/*: Symbol*/
+{
+  var numberOfArgs
+  /*: number*/
+  = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+  return {
+    name: name,
+    object: object,
+    numberOfArgs: numberOfArgs
+  };
+}
+
+function createSymbol(name
+/*: string */
+)
+/*: Symbol*/
+{
+  var numberOfArgs
+  /*: number*/
+  = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+  return {
+    name: name,
+    numberOfArgs: numberOfArgs
+  };
+}
+
+var types = {
+  func: 0x60,
+  result: 0x40
+};
+var exportTypes = {
+  0x00: "Func",
+  0x01: "Table",
+  0x02: "Mem",
+  0x03: "Global"
+};
+var exportTypesByName = invertMap(exportTypes);
+var valtypes = {
+  0x7f: "i32",
+  0x7e: "i64",
+  0x7d: "f32",
+  0x7c: "f64",
+  0x7b: "v128"
+};
+var valtypesByString = invertMap(valtypes);
+var tableTypes = {
+  0x70: "anyfunc"
+};
+var blockTypes = Object.assign({}, valtypes, {
+  // https://webassembly.github.io/spec/core/binary/types.html#binary-blocktype
+  0x40: null,
+  // https://webassembly.github.io/spec/core/binary/types.html#binary-valtype
+  0x7f: "i32",
+  0x7e: "i64",
+  0x7d: "f32",
+  0x7c: "f64"
+});
+var globalTypes = {
+  0x00: "const",
+  0x01: "var"
+};
+var globalTypesByString = invertMap(globalTypes);
+var importTypes = {
+  0x00: "func",
+  0x01: "table",
+  0x02: "mem",
+  0x03: "global"
+};
+var sections = {
+  custom: 0,
+  type: 1,
+  import: 2,
+  func: 3,
+  table: 4,
+  memory: 5,
+  global: 6,
+  export: 7,
+  start: 8,
+  element: 9,
+  code: 10,
+  data: 11
+};
+var symbolsByByte = {
+  0x00: createSymbol("unreachable"),
+  0x01: createSymbol("nop"),
+  0x02: createSymbol("block"),
+  0x03: createSymbol("loop"),
+  0x04: createSymbol("if"),
+  0x05: createSymbol("else"),
+  0x06: illegalop,
+  0x07: illegalop,
+  0x08: illegalop,
+  0x09: illegalop,
+  0x0a: illegalop,
+  0x0b: createSymbol("end"),
+  0x0c: createSymbol("br", 1),
+  0x0d: createSymbol("br_if", 1),
+  0x0e: createSymbol("br_table"),
+  0x0f: createSymbol("return"),
+  0x10: createSymbol("call", 1),
+  0x11: createSymbol("call_indirect", 2),
+  0x12: illegalop,
+  0x13: illegalop,
+  0x14: illegalop,
+  0x15: illegalop,
+  0x16: illegalop,
+  0x17: illegalop,
+  0x18: illegalop,
+  0x19: illegalop,
+  0x1a: createSymbol("drop"),
+  0x1b: createSymbol("select"),
+  0x1c: illegalop,
+  0x1d: illegalop,
+  0x1e: illegalop,
+  0x1f: illegalop,
+  0x20: createSymbol("get_local", 1),
+  0x21: createSymbol("set_local", 1),
+  0x22: createSymbol("tee_local", 1),
+  0x23: createSymbol("get_global", 1),
+  0x24: createSymbol("set_global", 1),
+  0x25: illegalop,
+  0x26: illegalop,
+  0x27: illegalop,
+  0x28: createSymbolObject("load", "u32", 1),
+  0x29: createSymbolObject("load", "u64", 1),
+  0x2a: createSymbolObject("load", "f32", 1),
+  0x2b: createSymbolObject("load", "f64", 1),
+  0x2c: createSymbolObject("load8_s", "u32", 1),
+  0x2d: createSymbolObject("load8_u", "u32", 1),
+  0x2e: createSymbolObject("load16_s", "u32", 1),
+  0x2f: createSymbolObject("load16_u", "u32", 1),
+  0x30: createSymbolObject("load8_s", "u64", 1),
+  0x31: createSymbolObject("load8_u", "u64", 1),
+  0x32: createSymbolObject("load16_s", "u64", 1),
+  0x33: createSymbolObject("load16_u", "u64", 1),
+  0x34: createSymbolObject("load32_s", "u64", 1),
+  0x35: createSymbolObject("load32_u", "u64", 1),
+  0x36: createSymbolObject("store", "u32", 1),
+  0x37: createSymbolObject("store", "u64", 1),
+  0x38: createSymbolObject("store", "f32", 1),
+  0x39: createSymbolObject("store", "f64", 1),
+  0x3a: createSymbolObject("store8", "u32", 1),
+  0x3b: createSymbolObject("store16", "u32", 1),
+  0x3c: createSymbolObject("store8", "u64", 1),
+  0x3d: createSymbolObject("store16", "u64", 1),
+  0x3e: createSymbolObject("store32", "u64", 1),
+  0x3f: createSymbolObject("current_memory"),
+  0x40: createSymbolObject("grow_memory"),
+  0x41: createSymbolObject("const", "i32", 1),
+  0x42: createSymbolObject("const", "i64", 1),
+  0x43: createSymbolObject("const", "f32", 1),
+  0x44: createSymbolObject("const", "f64", 1),
+  0x45: createSymbolObject("eqz", "i32"),
+  0x46: createSymbolObject("eq", "i32"),
+  0x47: createSymbolObject("ne", "i32"),
+  0x48: createSymbolObject("lt_s", "i32"),
+  0x49: createSymbolObject("lt_u", "i32"),
+  0x4a: createSymbolObject("gt_s", "i32"),
+  0x4b: createSymbolObject("gt_u", "i32"),
+  0x4c: createSymbolObject("le_s", "i32"),
+  0x4d: createSymbolObject("le_u", "i32"),
+  0x4e: createSymbolObject("ge_s", "i32"),
+  0x4f: createSymbolObject("ge_u", "i32"),
+  0x50: createSymbolObject("eqz", "i64"),
+  0x51: createSymbolObject("eq", "i64"),
+  0x52: createSymbolObject("ne", "i64"),
+  0x53: createSymbolObject("lt_s", "i64"),
+  0x54: createSymbolObject("lt_u", "i64"),
+  0x55: createSymbolObject("gt_s", "i64"),
+  0x56: createSymbolObject("gt_u", "i64"),
+  0x57: createSymbolObject("le_s", "i64"),
+  0x58: createSymbolObject("le_u", "i64"),
+  0x59: createSymbolObject("ge_s", "i64"),
+  0x5a: createSymbolObject("ge_u", "i64"),
+  0x5b: createSymbolObject("eq", "f32"),
+  0x5c: createSymbolObject("ne", "f32"),
+  0x5d: createSymbolObject("lt", "f32"),
+  0x5e: createSymbolObject("gt", "f32"),
+  0x5f: createSymbolObject("le", "f32"),
+  0x60: createSymbolObject("ge", "f32"),
+  0x61: createSymbolObject("eq", "f64"),
+  0x62: createSymbolObject("ne", "f64"),
+  0x63: createSymbolObject("lt", "f64"),
+  0x64: createSymbolObject("gt", "f64"),
+  0x65: createSymbolObject("le", "f64"),
+  0x66: createSymbolObject("ge", "f64"),
+  0x67: createSymbolObject("clz", "i32"),
+  0x68: createSymbolObject("ctz", "i32"),
+  0x69: createSymbolObject("popcnt", "i32"),
+  0x6a: createSymbolObject("add", "i32"),
+  0x6b: createSymbolObject("sub", "i32"),
+  0x6c: createSymbolObject("mul", "i32"),
+  0x6d: createSymbolObject("div_s", "i32"),
+  0x6e: createSymbolObject("div_u", "i32"),
+  0x6f: createSymbolObject("rem_s", "i32"),
+  0x70: createSymbolObject("rem_u", "i32"),
+  0x71: createSymbolObject("and", "i32"),
+  0x72: createSymbolObject("or", "i32"),
+  0x73: createSymbolObject("xor", "i32"),
+  0x74: createSymbolObject("shl", "i32"),
+  0x75: createSymbolObject("shr_s", "i32"),
+  0x76: createSymbolObject("shr_u", "i32"),
+  0x77: createSymbolObject("rotl", "i32"),
+  0x78: createSymbolObject("rotr", "i32"),
+  0x79: createSymbolObject("clz", "i64"),
+  0x7a: createSymbolObject("ctz", "i64"),
+  0x7b: createSymbolObject("popcnt", "i64"),
+  0x7c: createSymbolObject("add", "i64"),
+  0x7d: createSymbolObject("sub", "i64"),
+  0x7e: createSymbolObject("mul", "i64"),
+  0x7f: createSymbolObject("div_s", "i64"),
+  0x80: createSymbolObject("div_u", "i64"),
+  0x81: createSymbolObject("rem_s", "i64"),
+  0x82: createSymbolObject("rem_u", "i64"),
+  0x83: createSymbolObject("and", "i64"),
+  0x84: createSymbolObject("or", "i64"),
+  0x85: createSymbolObject("xor", "i64"),
+  0x86: createSymbolObject("shl", "i64"),
+  0x87: createSymbolObject("shr_s", "i64"),
+  0x88: createSymbolObject("shr_u", "i64"),
+  0x89: createSymbolObject("rotl", "i64"),
+  0x8a: createSymbolObject("rotr", "i64"),
+  0x8b: createSymbolObject("abs", "f32"),
+  0x8c: createSymbolObject("neg", "f32"),
+  0x8d: createSymbolObject("ceil", "f32"),
+  0x8e: createSymbolObject("floor", "f32"),
+  0x8f: createSymbolObject("trunc", "f32"),
+  0x90: createSymbolObject("nearest", "f32"),
+  0x91: createSymbolObject("sqrt", "f32"),
+  0x92: createSymbolObject("add", "f32"),
+  0x93: createSymbolObject("sub", "f32"),
+  0x94: createSymbolObject("mul", "f32"),
+  0x95: createSymbolObject("div", "f32"),
+  0x96: createSymbolObject("min", "f32"),
+  0x97: createSymbolObject("max", "f32"),
+  0x98: createSymbolObject("copysign", "f32"),
+  0x99: createSymbolObject("abs", "f64"),
+  0x9a: createSymbolObject("neg", "f64"),
+  0x9b: createSymbolObject("ceil", "f64"),
+  0x9c: createSymbolObject("floor", "f64"),
+  0x9d: createSymbolObject("trunc", "f64"),
+  0x9e: createSymbolObject("nearest", "f64"),
+  0x9f: createSymbolObject("sqrt", "f64"),
+  0xa0: createSymbolObject("add", "f64"),
+  0xa1: createSymbolObject("sub", "f64"),
+  0xa2: createSymbolObject("mul", "f64"),
+  0xa3: createSymbolObject("div", "f64"),
+  0xa4: createSymbolObject("min", "f64"),
+  0xa5: createSymbolObject("max", "f64"),
+  0xa6: createSymbolObject("copysign", "f64"),
+  0xa7: createSymbolObject("wrap/i64", "i32"),
+  0xa8: createSymbolObject("trunc_s/f32", "i32"),
+  0xa9: createSymbolObject("trunc_u/f32", "i32"),
+  0xaa: createSymbolObject("trunc_s/f64", "i32"),
+  0xab: createSymbolObject("trunc_u/f64", "i32"),
+  0xac: createSymbolObject("extend_s/i32", "i64"),
+  0xad: createSymbolObject("extend_u/i32", "i64"),
+  0xae: createSymbolObject("trunc_s/f32", "i64"),
+  0xaf: createSymbolObject("trunc_u/f32", "i64"),
+  0xb0: createSymbolObject("trunc_s/f64", "i64"),
+  0xb1: createSymbolObject("trunc_u/f64", "i64"),
+  0xb2: createSymbolObject("convert_s/i32", "f32"),
+  0xb3: createSymbolObject("convert_u/i32", "f32"),
+  0xb4: createSymbolObject("convert_s/i64", "f32"),
+  0xb5: createSymbolObject("convert_u/i64", "f32"),
+  0xb6: createSymbolObject("demote/f64", "f32"),
+  0xb7: createSymbolObject("convert_s/i32", "f64"),
+  0xb8: createSymbolObject("convert_u/i32", "f64"),
+  0xb9: createSymbolObject("convert_s/i64", "f64"),
+  0xba: createSymbolObject("convert_u/i64", "f64"),
+  0xbb: createSymbolObject("promote/f32", "f64"),
+  0xbc: createSymbolObject("reinterpret/f32", "i32"),
+  0xbd: createSymbolObject("reinterpret/f64", "i64"),
+  0xbe: createSymbolObject("reinterpret/i32", "f32"),
+  0xbf: createSymbolObject("reinterpret/i64", "f64")
+};
+var symbolsByName = invertMap(symbolsByByte, function (obj) {
+  if (typeof obj.object === "string") {
+    return "".concat(obj.object, ".").concat(obj.name);
+  }
+
+  return obj.name;
+});
+export default {
+  symbolsByByte: symbolsByByte,
+  sections: sections,
+  magicModuleHeader: magicModuleHeader,
+  moduleVersion: moduleVersion,
+  types: types,
+  valtypes: valtypes,
+  exportTypes: exportTypes,
+  blockTypes: blockTypes,
+  tableTypes: tableTypes,
+  globalTypes: globalTypes,
+  importTypes: importTypes,
+  valtypesByString: valtypesByString,
+  globalTypesByString: globalTypesByString,
+  exportTypesByName: exportTypesByName,
+  symbolsByName: symbolsByName
+};
+export { getSectionForNode } from "./section";

+ 31 - 0
js/node_modules/@webassemblyjs/helper-wasm-bytecode/esm/section.js

@@ -0,0 +1,31 @@
+export function getSectionForNode(n) {
+  switch (n.type) {
+    case "ModuleImport":
+      return "import";
+
+    case "CallInstruction":
+    case "CallIndirectInstruction":
+    case "Func":
+    case "Instr":
+      return "code";
+
+    case "ModuleExport":
+      return "export";
+
+    case "Start":
+      return "start";
+
+    case "TypeInstruction":
+      return "type";
+
+    case "IndexInFuncSection":
+      return "func";
+
+    case "Global":
+      return "global";
+    // No section
+
+    default:
+      return;
+  }
+}

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov