From 9d034fe5d29b6891a28334a772412aef04b7afbb Mon Sep 17 00:00:00 2001 From: "FUJI Goro (gfx)" Date: Fri, 27 Dec 2019 09:55:27 +0900 Subject: [PATCH] remove WebAssembly stuff because it is not much faster than pureJS --- .eslintrc.js | 1 + README.md | 40 ++- assembly/be.ts | 81 ----- assembly/index.ts | 3 - assembly/memory.ts | 9 - assembly/tsconfig.json | 6 - assembly/utf8CountUint16Array.ts | 44 --- assembly/utf8DecodeToUint16Array.ts | 46 --- assembly/utf8EncodeUint16Array.ts | 80 ----- benchmark/decode-string.ts | 7 - benchmark/string.ts | 3 - karma.conf.ts | 6 +- package-lock.json | 495 +++++++++++++--------------- package.json | 17 +- src/Decoder.ts | 3 - src/Encoder.ts | 10 - src/index.ts | 5 - src/wasmFunctions.ts | 96 ------ test/msgpack-test-suite.test.ts | 12 +- tools/pack-wasm.ts | 49 --- tsconfig.test-dist-es5-wasm.json | 10 - webpack.config.ts | 37 +-- 22 files changed, 267 insertions(+), 793 deletions(-) delete mode 100644 assembly/be.ts delete mode 100644 assembly/index.ts delete mode 100644 assembly/memory.ts delete mode 100644 assembly/tsconfig.json delete mode 100644 assembly/utf8CountUint16Array.ts delete mode 100644 assembly/utf8DecodeToUint16Array.ts delete mode 100644 assembly/utf8EncodeUint16Array.ts delete mode 100644 src/wasmFunctions.ts delete mode 100644 tools/pack-wasm.ts delete mode 100644 tsconfig.test-dist-es5-wasm.json diff --git a/.eslintrc.js b/.eslintrc.js index 9c05c31e..0e2cbe43 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -63,6 +63,7 @@ module.exports = { "@typescript-eslint/no-var-requires": "off", // enforces `import x = require("x")`, which is TypeScript-specific "@typescript-eslint/prefer-interface": "off", "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/ban-ts-ignore": "off", "prettier/prettier": "warn", }, diff --git a/README.md b/README.md index 61b5c394..5f5ebec5 100644 --- a/README.md +++ b/README.md @@ -42,30 +42,30 @@ deepStrictEqual(decode(encoded), object); - [Table of Contents](#table-of-contents) - [Install](#install) - [API](#api) - - [`encode(data: unknown, options?: EncodeOptions): Uint8Array`](#encodedata-unknown-options-encodeoptions-uint8array) - - [`EncodeOptions`](#encodeoptions) - - [`decode(buffer: ArrayLike | ArrayBuffer, options?: DecodeOptions): unknown`](#decodebuffer-arraylikenumber--arraybuffer-options-decodeoptions-unknown) - - [`DecodeOptions`](#decodeoptions) - - [`decodeAsync(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): Promise`](#decodeasyncstream-asynciterablearraylikenumber--readablestreamarraylikenumber-options-decodeasyncoptions-promiseunknown) - - [`decodeArrayStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable`](#decodearraystreamstream-asynciterablearraylikenumber--readablestreamarraylikenumber-options-decodeasyncoptions-asynciterableunknown) - - [`decodeStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable`](#decodestreamstream-asynciterablearraylikenumber--readablestreamarraylikenumber-options-decodeasyncoptions-asynciterableunknown) - - [Extension Types](#extension-types) - - [Handling BigInt with ExtensionCodec](#handling-bigint-with-extensioncodec) - - [The temporal module as timestamp extensions](#the-temporal-module-as-timestamp-extensions) + - [`encode(data: unknown, options?: EncodeOptions): Uint8Array`](#encodedata-unknown-options-encodeoptions-uint8array) + - [`EncodeOptions`](#encodeoptions) + - [`decode(buffer: ArrayLike | ArrayBuffer, options?: DecodeOptions): unknown`](#decodebuffer-arraylikenumber--arraybuffer-options-decodeoptions-unknown) + - [`DecodeOptions`](#decodeoptions) + - [`decodeAsync(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): Promise`](#decodeasyncstream-asynciterablearraylikenumber--readablestreamarraylikenumber-options-decodeasyncoptions-promiseunknown) + - [`decodeArrayStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable`](#decodearraystreamstream-asynciterablearraylikenumber--readablestreamarraylikenumber-options-decodeasyncoptions-asynciterableunknown) + - [`decodeStream(stream: AsyncIterable> | ReadableStream>, options?: DecodeAsyncOptions): AsyncIterable`](#decodestreamstream-asynciterablearraylikenumber--readablestreamarraylikenumber-options-decodeasyncoptions-asynciterableunknown) + - [Extension Types](#extension-types) + - [Handling BigInt with ExtensionCodec](#handling-bigint-with-extensioncodec) + - [The temporal module as timestamp extensions](#the-temporal-module-as-timestamp-extensions) - [MessagePack Specification](#messagepack-specification) - - [MessagePack Mapping Table](#messagepack-mapping-table) + - [MessagePack Mapping Table](#messagepack-mapping-table) - [Prerequsites](#prerequsites) - - [ECMA-262](#ecma-262) - - [NodeJS](#nodejs) + - [ECMA-262](#ecma-262) + - [NodeJS](#nodejs) - [Benchmark](#benchmark) - [Distribution](#distribution) - - [NPM / npmjs.com](#npm--npmjscom) - - [CDN / unpkg.com](#cdn--unpkgcom) + - [NPM / npmjs.com](#npm--npmjscom) + - [CDN / unpkg.com](#cdn--unpkgcom) - [Maintenance](#maintenance) - - [Testing](#testing) - - [Continuous Integration](#continuous-integration) - - [Release Engineering](#release-engineering) - - [Updating Dependencies](#updating-dependencies) + - [Testing](#testing) + - [Continuous Integration](#continuous-integration) + - [Release Engineering](#release-engineering) + - [Updating Dependencies](#updating-dependencies) - [Big Thanks](#big-thanks) - [License](#license) @@ -449,8 +449,6 @@ This library uses Travis CI. test matrix: -* WebAssembly availability - * `WASM=force` / `WASM=never` * TypeScript targets * `target=es2019` / `target=es5` * JavaScript engines diff --git a/assembly/be.ts b/assembly/be.ts deleted file mode 100644 index dcdde080..00000000 --- a/assembly/be.ts +++ /dev/null @@ -1,81 +0,0 @@ -// load/store values in big-endian - -export function loadFload32BE(byteOffset: usize): f32 { - return reinterpret(bswap(load(byteOffset))); -} - -export function loadFloat64BE(byteOffset: usize): f64 { - return reinterpret(bswap(load(byteOffset))); -} - -export function loadInt8BE(byteOffset: usize): i8 { - return load(byteOffset); -} - -export function loadInt16BE(byteOffset: usize): i16 { - return bswap(load(byteOffset)); -} - -export function loadInt32BE(byteOffset: usize): i32 { - return bswap(load(byteOffset)); -} - -export function loadInt64BE(byteOffset: usize): i64 { - return bswap(load(byteOffset)); -} - -export function loadUint8BE(byteOffset: usize): u8 { - return load(byteOffset); -} - -export function loadUint16BE(byteOffset: usize): u16 { - return bswap(load(byteOffset)); -} - -export function loadUint32BE(byteOffset: usize): u32 { - return bswap(load(byteOffset)); -} - -export function loadUint64BE(byteOffset: usize): u64 { - return bswap(load(byteOffset)); -} - -export function storeFloat32BE(byteOffset: usize, value: f32): void { - store(byteOffset, bswap(reinterpret(value))); -} - -export function storeFloat64BE(byteOffset: usize, value: f64): void { - store(byteOffset, bswap(reinterpret(value))); -} - -export function storeInt8BE(byteOffset: usize, value: i8): void { - store(byteOffset, value); -} - -export function storeInt16BE(byteOffset: usize, value: i16): void { - store(byteOffset, bswap(value)); -} - -export function storeInt32BE(byteOffset: usize, value: i32): void { - store(byteOffset, bswap(value)); -} - -export function storeInt64BE(byteOffset: usize, value: i64): void { - store(byteOffset, bswap(value)); -} - -export function storeUint8BE(byteOffset: usize, value: u8): void { - store(byteOffset, value); -} - -export function storeUint16BE(byteOffset: usize, value: u16): void { - store(byteOffset, bswap(value)); -} - -export function storeUint32BE(byteOffset: usize, value: u32): void { - store(byteOffset, bswap(value)); -} - -export function storeUint64BE(byteOffset: usize, value: u64): void { - store(byteOffset, bswap(value)); -} diff --git a/assembly/index.ts b/assembly/index.ts deleted file mode 100644 index ef3a43a2..00000000 --- a/assembly/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { utf8DecodeToUint16Array } from "./utf8DecodeToUint16Array"; -export { utf8EncodeUint16Array } from "./utf8EncodeUint16Array"; -export { malloc, free } from "./memory"; diff --git a/assembly/memory.ts b/assembly/memory.ts deleted file mode 100644 index 391824b8..00000000 --- a/assembly/memory.ts +++ /dev/null @@ -1,9 +0,0 @@ -import "allocator/tlsf"; - -export function malloc(size: usize): usize { - return memory.allocate(size); -} - -export function free(ptr: usize): void { - memory.free(ptr); -} diff --git a/assembly/tsconfig.json b/assembly/tsconfig.json deleted file mode 100644 index c614e5c8..00000000 --- a/assembly/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../node_modules/assemblyscript/std/assembly.json", - "include": [ - "./**/*.ts" - ] -} \ No newline at end of file diff --git a/assembly/utf8CountUint16Array.ts b/assembly/utf8CountUint16Array.ts deleted file mode 100644 index cd23bb7b..00000000 --- a/assembly/utf8CountUint16Array.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { loadUint16BE } from "./be"; - -// inputPtr: u16* -export function utf8CountUint16Array(inputPtr: usize, inputLength: usize): usize { - const u16s = sizeof(); - - let byteLength: usize = 0; - let pos: usize = inputPtr; - let end = inputPtr + inputLength * u16s; - while (pos < end) { - let value: u32 = loadUint16BE(pos); - pos += u16s; - - if ((value & 0xffffff80) === 0) { - // 1-byte - byteLength++; - continue; - } else if ((value & 0xfffff800) === 0) { - // 2-bytes - byteLength += 2; - } else { - // handle surrogate pair - if (value >= 0xd800 && value <= 0xdbff) { - // high surrogate - if (pos < end) { - let extra: u32 = loadUint16BE(pos); - if ((extra & 0xfc00) === 0xdc00) { - pos += u16s; - value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000; - } - } - } - - if ((value & 0xffff0000) === 0) { - // 3-byte - byteLength += 3; - } else { - // 4-byte - byteLength += 4; - } - } - } - return byteLength; -} diff --git a/assembly/utf8DecodeToUint16Array.ts b/assembly/utf8DecodeToUint16Array.ts deleted file mode 100644 index d85efee7..00000000 --- a/assembly/utf8DecodeToUint16Array.ts +++ /dev/null @@ -1,46 +0,0 @@ -export function utf8DecodeToUint16Array(outputPtr: usize, inputPtr: usize, byteLength: usize): usize { - let inputOffset = inputPtr; - let outputOffset = outputPtr; - let inputOffsetEnd = inputOffset + byteLength; - const u16s = sizeof(); - - while (inputOffset < inputOffsetEnd) { - let byte1: u16 = load(inputOffset++); - if ((byte1 & 0x80) === 0) { - // 1 byte - store(outputOffset, byte1); - outputOffset += u16s; - } else if ((byte1 & 0xe0) === 0xc0) { - // 2 bytes - let byte2: u16 = load(inputOffset++) & 0x3f; - // FIXME: consider endians - store(outputOffset, ((byte1 & 0x1f) << 6) | byte2); - outputOffset += u16s; - } else if ((byte1 & 0xf0) === 0xe0) { - // 3 bytes - let byte2: u16 = load(inputOffset++) & 0x3f; - let byte3: u16 = load(inputOffset++) & 0x3f; - store(outputOffset, ((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3); - outputOffset += u16s; - } else if ((byte1 & 0xf8) === 0xf0) { - // 4 bytes - let byte2 = load(inputOffset++) & 0x3f; - let byte3 = load(inputOffset++) & 0x3f; - let byte4 = load(inputOffset++) & 0x3f; - let codepoint: i32 = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4; - if (codepoint > 0xffff) { - codepoint -= 0x10000; - store(outputOffset, ((codepoint >>> 10) & 0x3ff) | 0xd800); - outputOffset += u16s; - codepoint = 0xdc00 | (codepoint & 0x3ff); - } - store(outputOffset, codepoint); - outputOffset += u16s; - } else { - // invalid UTF-8 - store(outputOffset++, byte1); - outputOffset += u16s; - } - } - return (outputOffset - outputPtr) / u16s; -} diff --git a/assembly/utf8EncodeUint16Array.ts b/assembly/utf8EncodeUint16Array.ts deleted file mode 100644 index 195991fa..00000000 --- a/assembly/utf8EncodeUint16Array.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { utf8CountUint16Array } from "./utf8CountUint16Array"; -import { storeUint8BE, storeUint16BE, storeUint32BE, loadUint16BE } from "./be"; - -function storeStringHeader(outputPtr: usize, utf8ByteLength: usize): usize { - let ptr = outputPtr; - if (utf8ByteLength < 32) { - // fixstr - storeUint8BE(ptr++, 0xa0 + (utf8ByteLength as u8)); - } else if (utf8ByteLength < 0x100) { - // str 8 - storeUint8BE(ptr++, 0xd9); - storeUint8BE(ptr++, utf8ByteLength as u8); - } else if (utf8ByteLength < 0x10000) { - // str 16 - storeUint8BE(ptr++, 0xda); - storeUint16BE(ptr, utf8ByteLength as u16); - ptr += sizeof(); - } else if ((utf8ByteLength as u64) < 0x100000000) { - // str 32 - storeUint8BE(ptr++, 0xdb); - storeUint32BE(ptr, utf8ByteLength as u32); - ptr += sizeof(); - } else { - throw new Error(`Too long string: ${utf8ByteLength} bytes in UTF-8`); - } - return ptr; -} - -// outputPtr: u8* -// inputPtr: u16* -// It adds MessagePack str head bytes to the output -export function utf8EncodeUint16Array(outputPtr: usize, inputPtr: usize, inputLength: usize): usize { - let utf8ByteLength = utf8CountUint16Array(inputPtr, inputLength); - let strHeaderOffset = storeStringHeader(outputPtr, utf8ByteLength); - - const u16s = sizeof(); - let inputOffset = inputPtr; - let inputEnd = inputPtr + inputLength * u16s; - let outputOffset = strHeaderOffset; - while (inputOffset < inputEnd) { - let value: u32 = loadUint16BE(inputOffset); - inputOffset += u16s; - - if ((value & 0xffffff80) === 0) { - // 1-byte - store(outputOffset++, value); - continue; - } else if ((value & 0xfffff800) === 0) { - // 2-bytes - store(outputOffset++, ((value >> 6) & 0x1f) | 0xc0); - } else { - // handle surrogate pair - if (value >= 0xd800 && value <= 0xdbff) { - // high surrogate - if (inputOffset < inputEnd) { - let extra: u32 = loadUint16BE(inputOffset); - if ((extra & 0xfc00) === 0xdc00) { - inputOffset += u16s; - value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000; - } - } - } - - if ((value & 0xffff0000) === 0) { - // 3-byte - store(outputOffset++, ((value >> 12) & 0x0f) | 0xe0); - store(outputOffset++, ((value >> 6) & 0x3f) | 0x80); - } else { - // 4-byte - store(outputOffset++, ((value >> 18) & 0x07) | 0xf0); - store(outputOffset++, ((value >> 12) & 0x3f) | 0x80); - store(outputOffset++, ((value >> 6) & 0x3f) | 0x80); - } - } - - store(outputOffset++, (value & 0x3f) | 0x80); - } - - return outputOffset - outputPtr; -} diff --git a/benchmark/decode-string.ts b/benchmark/decode-string.ts index 1cde203d..7e57d043 100644 --- a/benchmark/decode-string.ts +++ b/benchmark/decode-string.ts @@ -1,6 +1,5 @@ /* eslint-disable no-console */ import { utf8EncodeJs, utf8Count, utf8DecodeJs, utf8DecodeTD } from "../src/utils/utf8"; -import { utf8DecodeWasm } from "../src/wasmFunctions"; // @ts-ignore import Benchmark from "benchmark"; @@ -25,12 +24,6 @@ for (const baseStr of ["A", "あ", "🌏"]) { } }); - suite.add("utf8DecodeWasm", () => { - if (utf8DecodeWasm(bytes, 0, byteLength) !== str) { - throw new Error("wrong result!"); - } - }); - suite.add("TextDecoder", () => { if (utf8DecodeTD(bytes, 0, byteLength) !== str) { throw new Error("wrong result!"); diff --git a/benchmark/string.ts b/benchmark/string.ts index e6b18708..b801394b 100644 --- a/benchmark/string.ts +++ b/benchmark/string.ts @@ -1,8 +1,5 @@ /* eslint-disable no-console */ import { encode, decode } from "../src"; -import { WASM_AVAILABLE } from "../src/wasmFunctions"; - -console.log(`WASM_AVAILABLE=${WASM_AVAILABLE}`); const ascii = "A".repeat(40000); const emoji = "🌏".repeat(20000); diff --git a/karma.conf.ts b/karma.conf.ts index e4398b74..f5a1ed64 100644 --- a/karma.conf.ts +++ b/karma.conf.ts @@ -65,11 +65,7 @@ export default function configure(config: any) { }, ], }, - plugins: [ - new webpack.DefinePlugin({ - "process.env.MSGPACK_WASM": JSON.stringify(process.env.MSGPACK_WASM), - }), - ], + plugins: [], optimization: { minimize: false, }, diff --git a/package-lock.json b/package-lock.json index a09ffb29..66ac0788 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,18 +33,6 @@ "acorn": ">= 6" } }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", - "dev": true - }, - "@types/base64-js": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.2.5.tgz", - "integrity": "sha1-WCskdhaabLpGCiFNR2x0REHYc9U=", - "dev": true - }, "@types/eslint-visitor-keys": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", @@ -52,9 +40,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", - "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", "dev": true }, "@types/json5": { @@ -70,18 +58,18 @@ "dev": true }, "@types/node": { - "version": "12.12.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz", - "integrity": "sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.1.tgz", + "integrity": "sha512-hx6zWtudh3Arsbl3cXay+JnkvVgCKzCWKv42C9J01N2T2np4h8w5X8u6Tpz5mj38kE3M9FM0Pazx8vKFFMnjLQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.10.0.tgz", - "integrity": "sha512-rT51fNLW0u3fnDGnAHVC5nu+Das+y2CpW10yqvf6/j5xbuUV3FxA3mBaIbM24CXODXjbgUznNb4Kg9XZOUxKAw==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.13.0.tgz", + "integrity": "sha512-QoiANo0MMGNa8ej/yX3BrW5dZj5d8HYcKiM2fyYUlezECqn8Xc7T/e4EUdiGinn8jhBrn+9X47E9TWaaup3u1g==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "2.10.0", + "@typescript-eslint/experimental-utils": "2.13.0", "eslint-utils": "^1.4.3", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", @@ -89,32 +77,32 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.10.0.tgz", - "integrity": "sha512-FZhWq6hWWZBP76aZ7bkrfzTMP31CCefVIImrwP3giPLcoXocmLTmr92NLZxuIcTL4GTEOE33jQMWy9PwelL+yQ==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.13.0.tgz", + "integrity": "sha512-+Hss3clwa6aNiC8ZjA45wEm4FutDV5HsVXPl/rDug1THq6gEtOYRGLqS3JlTk7mSnL5TbJz0LpEbzbPnKvY6sw==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.10.0", + "@typescript-eslint/typescript-estree": "2.13.0", "eslint-scope": "^5.0.0" } }, "@typescript-eslint/parser": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.10.0.tgz", - "integrity": "sha512-wQNiBokcP5ZsTuB+i4BlmVWq6o+oAhd8en2eSm/EE9m7BgZUIfEeYFd6z3S+T7bgNuloeiHA1/cevvbBDLr98g==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.13.0.tgz", + "integrity": "sha512-vbDeLr5QRJ1K7x5iRK8J9wuGwR9OVyd1zDAY9XFAQvAosHVjSVbDgkm328ayE6hx2QWVGhwvGaEhedcqAbfQcA==", "dev": true, "requires": { "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.10.0", - "@typescript-eslint/typescript-estree": "2.10.0", + "@typescript-eslint/experimental-utils": "2.13.0", + "@typescript-eslint/typescript-estree": "2.13.0", "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.10.0.tgz", - "integrity": "sha512-oOYnplddQNm/LGVkqbkAwx4TIBuuZ36cAQq9v3nFIU9FmhemHuVzAesMSXNQDdAzCa5bFgCrfD3JWhYVKlRN2g==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.13.0.tgz", + "integrity": "sha512-t21Mg5cc8T3ADEUGwDisHLIubgXKjuNRbkpzDMLb7/JMmgCe/gHM9FaaujokLey+gwTuLF5ndSQ7/EfQqrQx4g==", "dev": true, "requires": { "debug": "^4.1.1", @@ -461,13 +449,14 @@ "dev": true }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" } }, "array-unique": { @@ -477,14 +466,13 @@ "dev": true }, "array.prototype.flat": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.2.tgz", - "integrity": "sha512-VXjh7lAL4KXKF2hY4FnEW9eRW6IhdvFW1sN/JwLbmECbCgACCnBHNyP3lFiYuttr0jxRN9Bsc5+G27dMseSWqQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.15.0", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.0-next.1" } }, "arraybuffer.slice": { @@ -504,19 +492,6 @@ "minimalistic-assert": "^1.0.0" } }, - "assemblyscript": { - "version": "github:AssemblyScript/assemblyscript#5269a6b9c4e14983c43671328257c156cdf1de8a", - "from": "github:AssemblyScript/assemblyscript#5269a6b9c4e14983c43671328257c156cdf1de8a", - "dev": true, - "requires": { - "@protobufjs/utf8": "^1.1.0", - "binaryen": "77.0.0-nightly.20190407", - "glob": "^7.1.3", - "long": "^4.0.0", - "opencollective-postinstall": "^2.0.0", - "source-map-support": "^0.5.11" - } - }, "assert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", @@ -644,7 +619,8 @@ "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true }, "base64id": { "version": "1.0.0", @@ -673,11 +649,15 @@ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, - "binaryen": { - "version": "77.0.0-nightly.20190407", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-77.0.0-nightly.20190407.tgz", - "integrity": "sha512-1mxYNvQ0xywMe582K7V6Vo2zzhZZxMTeGHH8aE/+/AND8f64D8Q1GThVY3RVRwGY/4p+p95ccw9Xbw2ovFXRIg==", - "dev": true + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } }, "blob": { "version": "0.0.5", @@ -993,19 +973,19 @@ "dev": true }, "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", - "fsevents": "~2.1.1", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" + "readdirp": "~3.3.0" } }, "chownr": { @@ -1288,9 +1268,9 @@ "dev": true }, "core-js": { - "version": "3.4.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.8.tgz", - "integrity": "sha512-b+BBmCZmVgho8KnBUOXpvlqEMguko+0P+kXCwD4vIprsXC6ht1qgPxtb1OK6XgSlrySF71wkwBQ0Hv695bk9gQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.1.tgz", + "integrity": "sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ==", "dev": true }, "core-util-is": { @@ -1731,21 +1711,22 @@ } }, "es-abstract": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", - "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -1793,9 +1774,9 @@ "dev": true }, "eslint": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", - "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1846,9 +1827,9 @@ } }, "eslint-config-prettier": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz", - "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.8.0.tgz", + "integrity": "sha512-aq4M7mjjVregZ2l45O9qz6Mv6f5zVMl/IqfmUL8hNOoDAzVKYMhYPJytbqE/lPIVO1iMDXIFqjiEE59BfJZpZw==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -1909,9 +1890,9 @@ } }, "eslint-plugin-import": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.0.tgz", - "integrity": "sha512-J13f9Slu7BCZq1N2NnWmK7tci/Y1SWWHUaj0J+I1NpzUm8l/Gwnz6KO+JMbM4TcnxU8O/DJ4psa6eZrmNREsOg==", + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz", + "integrity": "sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -1956,9 +1937,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", - "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", + "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -2248,9 +2229,9 @@ "dev": true }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { @@ -2283,6 +2264,13 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3128,9 +3116,9 @@ "dev": true }, "inquirer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -3142,7 +3130,7 @@ "lodash": "^4.17.15", "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "rxjs": "^6.5.3", "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" @@ -3220,9 +3208,9 @@ "dev": true }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-data-descriptor": { @@ -3252,9 +3240,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-descriptor": { @@ -3310,12 +3298,12 @@ } }, "is-nan": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.2.1.tgz", - "integrity": "sha1-n69ltvttskt/XAYoR16nH5iEAeI=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.0.tgz", + "integrity": "sha512-z7bbREymOqt2CCaZVly8aC4ML3Xhfi0ekuOnjO2L8vKdl+CttdVoGZQhd4adMFAsxQ5VeRVwORs4tU8RH+HFtQ==", "dev": true, "requires": { - "define-properties": "^1.1.1" + "define-properties": "^1.1.3" } }, "is-number": { @@ -3340,12 +3328,12 @@ "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-stream": { @@ -3354,6 +3342,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -3712,12 +3706,6 @@ "streamroller": "^1.0.6" } }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -4480,9 +4468,9 @@ "dev": true }, "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", "dev": true }, "object-keys": { @@ -4513,25 +4501,25 @@ } }, "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", + "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -4544,13 +4532,13 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -4582,12 +4570,6 @@ "mimic-fn": "^2.1.0" } }, - "opencollective-postinstall": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", - "dev": true - }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -5069,12 +5051,12 @@ } }, "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", "dev": true, "requires": { - "picomatch": "^2.0.4" + "picomatch": "^2.0.7" } }, "regex-not": { @@ -5130,9 +5112,9 @@ "dev": true }, "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.1.tgz", + "integrity": "sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -5389,9 +5371,9 @@ "dev": true }, "serialize-javascript": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.1.tgz", - "integrity": "sha512-MPLPRpD4FNqWq9tTIjYG5LesFouDhdyH0EPY3gVK4DRD5+g4aDqdNSzLIwceulo3Yj+PL1bPh6laE5+H6LTcrQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "set-blocking": { @@ -5908,9 +5890,9 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "streamroller": { @@ -5960,20 +5942,19 @@ } }, "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -5981,9 +5962,9 @@ } }, "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -6095,9 +6076,9 @@ "dev": true }, "terser": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.2.tgz", - "integrity": "sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", + "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -6106,16 +6087,16 @@ } }, "terser-webpack-plugin": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.2.tgz", - "integrity": "sha512-fdEb91kR2l+BVgES77N/NTXWZlpX6vX+pYPjnX5grcDYBF2CMnzJiXX4NNlna4l04lvCW39lZ+O/jSvUhHH/ew==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.1", + "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -6348,9 +6329,9 @@ "dev": true }, "typescript": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz", - "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.4.tgz", + "integrity": "sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw==", "dev": true }, "ultron": { @@ -6515,16 +6496,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6676,14 +6647,15 @@ } }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -6737,9 +6709,9 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true, "optional": true }, @@ -6772,9 +6744,9 @@ "optional": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "optional": true, "requires": { @@ -6803,13 +6775,13 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -6837,9 +6809,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "optional": true, "requires": { @@ -6869,9 +6841,9 @@ } }, "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", "dev": true, "optional": true, "requires": { @@ -6890,9 +6862,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "optional": true }, @@ -6938,9 +6910,9 @@ "optional": true }, "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "optional": true, "requires": { @@ -6949,13 +6921,13 @@ } }, "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { @@ -6969,28 +6941,28 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "optional": true }, "needle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", + "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", "dev": true, "optional": true, "requires": { @@ -7003,7 +6975,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { @@ -7018,16 +6990,26 @@ } }, "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", + "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "optional": true, "requires": { @@ -7105,9 +7087,9 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "optional": true }, @@ -7150,9 +7132,9 @@ } }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "optional": true, "requires": { @@ -7181,9 +7163,9 @@ "optional": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "optional": true }, @@ -7241,19 +7223,19 @@ "optional": true }, "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -7281,9 +7263,9 @@ "optional": true }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "optional": true } @@ -7396,9 +7378,9 @@ "dev": true }, "webpack": { - "version": "4.41.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", - "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", + "version": "4.41.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.4.tgz", + "integrity": "sha512-Lc+2uB6NjpCWsHI3trkoISOI64h9QYIXenbEWj3bn3oyjfB1lEBXjWAfAyY2sM0rZn41oD5V91OLwKRwS6Wp8Q==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", @@ -7421,7 +7403,7 @@ "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.1", + "terser-webpack-plugin": "^1.4.3", "watchpack": "^1.6.0", "webpack-sources": "^1.4.1" }, @@ -7867,13 +7849,12 @@ } }, "xml2js": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", - "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "requires": { "sax": ">=0.6.0", - "util.promisify": "~1.0.0", "xmlbuilder": "~11.0.0" } }, diff --git a/package.json b/package.json index e791a47d..b50c00c8 100644 --- a/package.json +++ b/package.json @@ -10,21 +10,18 @@ "sideEffects": false, "scripts": { "build": "npm publish --dry-run", - "prepare": "npm run clean && npm run asbuild:production && tsc -p tsconfig.dist.json && webpack", + "prepare": "npm run clean && tsc -p tsconfig.dist.json && webpack", "prepublishOnly": "run-p 'test:dist:*' && npm run test:browser", "clean": "rimraf build dist dist.*", "test": "mocha 'test/**/*.test.ts'", - "test:purejs": "TEXT_ENCODING=never MSGPACK_WASM=never mocha 'test/**/*.test.ts'", - "test:wasm": "npm run asbuild:production && TEXT_ENCODING=never MSGPACK_WASM=force mocha 'test/**/*.test.ts'", + "test:purejs": "TEXT_ENCODING=never mocha 'test/**/*.test.ts'", "test:te": "TEXT_ENCODING=force mocha 'test/**/*.test.ts'", "test:dist:purejs": "TS_NODE_PROJECT=tsconfig.test-dist-es5-purejs.json npm run test:purejs -- --reporter=dot", - "test:dist:wasm": "TS_NODE_PROJECT=tsconfig.test-dist-es5-wasm.json npm run test:wasm -- --reporter=dot", "test:cover": "npm run cover:clean && npm-run-all 'test:cover:*' && npm run cover:report", "test:cover:purejs": "npx nyc --no-clean npm run test:purejs", - "test:cover:wasm": "npx nyc --no-clean npm run test:wasm", "test:cover:te": "npx nyc --no-clean npm run test:te", "cover:clean": "rimraf .nyc_output coverage/", - "cover:report": "nyc report --reporter=text-summary --reporter=html --reporter=json", + "cover:report": "npx nyc report --reporter=text-summary --reporter=html --reporter=json", "test:browser": "karma start --single-run", "test:browser:firefox": "karma start --single-run --browsers FirefoxHeadless", "test:browser:chrome": "karma start --single-run --browsers ChromeHeadless", @@ -34,8 +31,6 @@ "lint:fix": "eslint --fix --ext .ts src test && npm run format", "lint:print-config": "eslint --print-config .eslintrc.js", "format": "prettier --write 'src/**/*.ts' 'test/**/*.ts'", - "asbuild:development": "asc assembly/index.ts -b dist/wasm/msgpack.wasm -t dist/wasm/msgpack.wat --sourceMap --validate --debug && ts-node tools/pack-wasm.ts", - "asbuild:production": "asc assembly/index.ts -b dist/wasm/msgpack.wasm -t dist/wasm/msgpack.wat --sourceMap --validate -O3 && ts-node tools/pack-wasm.ts", "update-dependencies": "rimraf node_modules/ package-lock.json && npm install && npm dedupe" }, "homepage": "https://msgpack.org/", @@ -57,12 +52,10 @@ }, "devDependencies": { "@bitjourney/check-es-version-webpack-plugin": "latest", - "@types/base64-js": "latest", "@types/mocha": "latest", "@types/node": "latest", "@typescript-eslint/eslint-plugin": "latest", "@typescript-eslint/parser": "latest", - "assemblyscript": "github:AssemblyScript/assemblyscript#5269a6b9c4e14983c43671328257c156cdf1de8a", "assert": "latest", "core-js": "latest", "eslint": "latest", @@ -92,9 +85,7 @@ "webpack": "latest", "webpack-cli": "latest" }, - "dependencies": { - "base64-js": "^1.3.0" - }, + "dependencies": {}, "files": [ "src/**/*.*", "dist/**/*.*", diff --git a/src/Decoder.ts b/src/Decoder.ts index 0193170f..d66f8036 100644 --- a/src/Decoder.ts +++ b/src/Decoder.ts @@ -3,7 +3,6 @@ import { ExtensionCodec } from "./ExtensionCodec"; import { getInt64, getUint64 } from "./utils/int"; import { utf8DecodeJs, TEXT_ENCODING_AVAILABLE, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from "./utils/utf8"; import { createDataView, ensureUint8Array } from "./utils/typedArrays"; -import { WASM_AVAILABLE, WASM_STR_THRESHOLD, utf8DecodeWasm } from "./wasmFunctions"; import { CachedKeyDecoder } from "./CachedKeyDecoder"; const enum State { @@ -481,8 +480,6 @@ export class Decoder { object = this.cachedKeyDecoder.decode(this.bytes, offset, byteLength); } else if (TEXT_ENCODING_AVAILABLE && byteLength > TEXT_DECODER_THRESHOLD) { object = utf8DecodeTD(this.bytes, offset, byteLength); - } else if (WASM_AVAILABLE && byteLength > WASM_STR_THRESHOLD) { - object = utf8DecodeWasm(this.bytes, offset, byteLength); } else { object = utf8DecodeJs(this.bytes, offset, byteLength); } diff --git a/src/Encoder.ts b/src/Encoder.ts index e95b5e0c..7ccf56cf 100644 --- a/src/Encoder.ts +++ b/src/Encoder.ts @@ -3,7 +3,6 @@ import { ExtensionCodec } from "./ExtensionCodec"; import { setInt64, setUint64 } from "./utils/int"; import { ensureUint8Array } from "./utils/typedArrays"; import { ExtData } from "./ExtData"; -import { WASM_AVAILABLE, utf8EncodeWasm, WASM_STR_THRESHOLD } from "./wasmFunctions"; export const DEFAULT_MAX_DEPTH = 100; export const DEFAULT_INITIAL_BUFFER_SIZE = 2048; @@ -163,15 +162,6 @@ export class Encoder { this.writeStringHeader(byteLength); utf8EncodeTE(object, this.bytes, this.pos); this.pos += byteLength; - } else if (WASM_AVAILABLE && strLength > WASM_STR_THRESHOLD) { - // ensure max possible size - const maxSize = maxHeaderSize + strLength * 4; - this.ensureBufferSizeToWrite(maxSize); - - // utf8EncodeWasm() handles headByte+size as well as string itself - const ouputLength = utf8EncodeWasm(object, this.bytes, this.pos); - this.pos += ouputLength; - return; } else { const byteLength = utf8Count(object); this.ensureBufferSizeToWrite(maxHeaderSize + byteLength); diff --git a/src/index.ts b/src/index.ts index 87c893a6..6aef7a2d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -26,8 +26,3 @@ export { encodeTimestampExtension, decodeTimestampExtension, } from "./timestamp"; - -/** - * @experimental WebAssembly backend is experimenal. - */ -export { WASM_AVAILABLE as __WASM_AVAILABLE } from "./wasmFunctions"; diff --git a/src/wasmFunctions.ts b/src/wasmFunctions.ts deleted file mode 100644 index 0b5cd34d..00000000 --- a/src/wasmFunctions.ts +++ /dev/null @@ -1,96 +0,0 @@ -// WASM=never - disable WASM functions -// WASM=force - force to use WASM functions -const WASM: string = process.env.MSGPACK_WASM ?? process.env.WASM ?? ""; -export const NO_WASM = WASM === "never"; -export const FORCE_WASM = WASM === "force"; - -type pointer = number; - -// WM stands for WasmModule, but not the WebAssembly.Module instance but the WebAssembly.Instance.prototype.exports -const wm: any = (() => { - if (NO_WASM) { - return null; - } - - try { - return require("../dist/wasm/msgpack.wasm.js"); - } catch (e) { - if (FORCE_WASM) { - throw e; - } - return null; - } -})(); - -export const WASM_AVAILABLE = !!wm; - -// A hint of when to use WASM ver. -export const WASM_STR_THRESHOLD = FORCE_WASM ? 0 : 1024; - -function setMemoryU8(destPtr: pointer, src: Uint8Array, size: number) { - const destView = new Uint8Array(wm.memory.buffer, destPtr, size); - destView.set(src); -} - -function setMemoryStr(destPtr: pointer, destByteLength: number, str: string, strLength: number) { - const inputView = new DataView(wm.memory.buffer, destPtr, destByteLength); - for (let i = 0; i < strLength; i++) { - inputView.setUint16(i * 2, str.charCodeAt(i)); - } -} - -/** - * It encodes string to MessagePack str family (headByte/size + utf8 bytes). - * @returns The whole byte length including headByte/size. - */ -export function utf8EncodeWasm(str: string, output: Uint8Array, outputOffset: number): number { - const strLength = str.length; - const inputByteLength = strLength * 2; - const inputU16BePtr: pointer = wm.malloc(inputByteLength); - setMemoryStr(inputU16BePtr, inputByteLength, str, strLength); - - const maxOutputHeaderSize = 1 + 4; // headByte + u32 - const outputPtr: pointer = wm.malloc(maxOutputHeaderSize + strLength * 4); - try { - const outputLength = wm.utf8EncodeUint16Array(outputPtr, inputU16BePtr, strLength); - output.set(new Uint8Array(wm.memory.buffer, outputPtr, outputLength), outputOffset); - return outputLength; - } finally { - wm.free(inputU16BePtr); - wm.free(outputPtr); - } -} - -const CHUNK_SIZE = 0x10_000; - -function safeStringFromCharCodeU16(units: Uint16Array) { - if (units.length <= CHUNK_SIZE) { - // `String.fromCharCode.apply()` is faster than `String.fromCharCode(...units)` - // in case `units` is a typed array - return String.fromCharCode.apply(String, units as any); - } - - let result = ""; - for (let i = 0; i < units.length; i++) { - const chunk = units.subarray(i * CHUNK_SIZE, (i + 1) * CHUNK_SIZE); - result += String.fromCharCode.apply(String, chunk as any); - } - return result; -} - -// A wrapper function for utf8DecodeToUint16Array() -export function utf8DecodeWasm(bytes: Uint8Array, inputOffset: number, byteLength: number): string { - const inputPtr: pointer = wm.malloc(byteLength); - // in worst case, the UTF-16 array uses the same as byteLength * 2 - const outputPtr: pointer = wm.malloc(byteLength * 2); - try { - setMemoryU8(inputPtr, bytes.subarray(inputOffset, inputOffset + byteLength), byteLength); - - const outputArraySize = wm.utf8DecodeToUint16Array(outputPtr, inputPtr, byteLength); - const units = new Uint16Array(wm.memory.buffer, outputPtr, outputArraySize); - return safeStringFromCharCodeU16(units); - } finally { - wm.free(inputPtr); - wm.free(outputPtr); - } -} diff --git a/test/msgpack-test-suite.test.ts b/test/msgpack-test-suite.test.ts index dae736f7..6bb41690 100644 --- a/test/msgpack-test-suite.test.ts +++ b/test/msgpack-test-suite.test.ts @@ -2,17 +2,7 @@ import assert from "assert"; import util from "util"; import { Exam } from "msgpack-test-js"; import { MsgTimestamp } from "msg-timestamp"; -import { - encode, - decode, - ExtensionCodec, - EXT_TIMESTAMP, - encodeTimeSpecToTimestamp, - __WASM_AVAILABLE, -} from "@msgpack/msgpack"; - -// eslint-disable-next-line no-console -console.log("# configuration", { __WASM_AVAILABLE }); +import { encode, decode, ExtensionCodec, EXT_TIMESTAMP, encodeTimeSpecToTimestamp } from "@msgpack/msgpack"; const extensionCodec = new ExtensionCodec(); extensionCodec.register({ diff --git a/tools/pack-wasm.ts b/tools/pack-wasm.ts deleted file mode 100644 index 8352abb1..00000000 --- a/tools/pack-wasm.ts +++ /dev/null @@ -1,49 +0,0 @@ -// pack build/wasm/*.wasm - -import fs from "fs"; -import { resolve } from "path"; -import base64 from "base64-js"; - -const artifactDir = resolve(__dirname, "../dist/wasm"); -for (const basename of fs.readdirSync(artifactDir)) { - const file = resolve(artifactDir, basename); - if (!file.endsWith(".wasm")) { - continue; - } - - const blob = fs.readFileSync(file); - - const source = `// generated from ${basename} -"use strict"; - -var base64 = require("base64-js"); - -// synchronous instantiation -var wasmModule = new WebAssembly.Module( - base64.toByteArray(${JSON.stringify(base64.fromByteArray(blob))}) -); -var wasmInstance = new WebAssembly.Instance(wasmModule, { - env: { - abort: abort, - }, -}); - -// from getStringImpl() in AssemblyScript/lib/loader/index.js -function getString(ptr) { - var buffer = wasmInstance.exports.memory.buffer; - var u32 = new Uint32Array(buffer); - var u16 = new Uint16Array(buffer); - var offset = (ptr + 4) >>> 1; - var length = u32[ptr >>> 2]; - return String.fromCharCode.apply(String, u16.subarray(offset, offset + length)) -} - -function abort(message, filename, line, column) { - throw new Error("abort: " + getString(message) + " at " + getString(filename) + ":" + line + ":" + column); -} - -module.exports = wasmInstance.exports; -`; - - fs.writeFileSync(`${file}.js`, source); -} diff --git a/tsconfig.test-dist-es5-wasm.json b/tsconfig.test-dist-es5-wasm.json deleted file mode 100644 index 3ca435cc..00000000 --- a/tsconfig.test-dist-es5-wasm.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.es5.json", - "compilerOptions": { - "outDir": "./build/test-dist-es5-wasm", - "noImplicitAny": false, - "paths": { - "@msgpack/msgpack": ["./dist.es5/msgpack+wasm"] - } - } -} diff --git a/webpack.config.ts b/webpack.config.ts index 7810a603..3780508d 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -36,17 +36,10 @@ const config = { esVersion: 5, // for IE11 support }), new webpack.DefinePlugin({ - "process.env.WASM": JSON.stringify(null), // use only MSGPACK_WASM "process.env.TEXT_ENCODING": JSON.stringify("null"), - "process.env.TEXT_DECODER": JSON.stringify(null), + "process.env.TEXT_DECODER": JSON.stringify("null"), }), ], - externals: { - "base64-js": { - commonjs: "base64-js", - commonjs2: "base64-js", - }, - }, optimization: { noEmitOnErrors: true, @@ -60,41 +53,17 @@ const config = { devtool: "source-map", }; +// eslint-disable-next-line import/no-default-export export default [ - // default minified bundle does not includes wasm ((config) => { config.output.filename = "msgpack.min.js"; - config.plugins.push( - new webpack.DefinePlugin({ - "process.env.MSGPACK_WASM": JSON.stringify("never"), - }), - new webpack.IgnorePlugin(/\.\/dist\/wasm\/msgpack\.wasm\.js$/), - ); config.optimization.minimize = true; return config; })(_.cloneDeep(config)), - // default bundle does not includes wasm ((config) => { config.output.filename = "msgpack.js"; - config.plugins.push( - new webpack.DefinePlugin({ - // The default bundle does not includes WASM - "process.env.MSGPACK_WASM": JSON.stringify("never"), - }), - new webpack.IgnorePlugin(/\.\/dist\/wasm\/msgpack\.wasm\.js$/), - ); - return config; - })(_.cloneDeep(config)), - - // +wsm - ((config) => { - config.output.filename = "msgpack+wasm.js"; - config.plugins.push( - new webpack.DefinePlugin({ - "process.env.MSGPACK_WASM": JSON.stringify(null), - }), - ); + config.optimization.minimize = false; return config; })(_.cloneDeep(config)), ];