Commit 60801128 by vincent

update tfjs-core to latest

parent 3a314e8d
let spec_files = ['**/*.test.ts'].concat( let spec_files = ['**/*.test.ts'].concat(
process.env.EXCLUDE_UNCOMPRESSED process.env.EXCLUDE_UNCOMPRESSED
? ['!**/*.uncompressed.test.ts'] ? ['!**/*.uncompressed.test.ts']
......
...@@ -38,6 +38,7 @@ exclude = exclude.concat( ...@@ -38,6 +38,7 @@ exclude = exclude.concat(
// exclude nodejs tests // exclude nodejs tests
exclude = exclude.concat(['**/*.node.test.ts']) exclude = exclude.concat(['**/*.node.test.ts'])
exclude = exclude.concat(['test/env.node.ts'])
module.exports = function(config) { module.exports = function(config) {
......
...@@ -5,18 +5,18 @@ ...@@ -5,18 +5,18 @@
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@babel/code-frame": { "@babel/code-frame": {
"version": "7.0.0", "version": "7.5.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/highlight": "^7.0.0" "@babel/highlight": "^7.0.0"
} }
}, },
"@babel/highlight": { "@babel/highlight": {
"version": "7.0.0", "version": "7.5.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
"integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"chalk": "^2.0.0", "chalk": "^2.0.0",
...@@ -25,48 +25,56 @@ ...@@ -25,48 +25,56 @@
} }
}, },
"@tensorflow/tfjs": { "@tensorflow/tfjs": {
"version": "1.2.2", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.2.9.tgz",
"integrity": "sha512-HfhSzL2eTWhlT0r/A5wmo+u3bHe+an16p5wsnFH3ujn21fQ8QtGpSfDHQZjWx1kVFaQnV6KBG+17MOrRHoHlLA==", "integrity": "sha512-9UAQnSp638FyM5eedYEM+j2R7VcNajiFmkeT5EXtf7YIurmMFNEm1sbajKJx7/ckz31YcYrVoUPc/iLhhDQl2A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs-converter": "1.2.2", "@tensorflow/tfjs-converter": "1.2.9",
"@tensorflow/tfjs-core": "1.2.2", "@tensorflow/tfjs-core": "1.2.9",
"@tensorflow/tfjs-data": "1.2.2", "@tensorflow/tfjs-data": "1.2.9",
"@tensorflow/tfjs-layers": "1.2.2" "@tensorflow/tfjs-layers": "1.2.9"
},
"dependencies": {
"@tensorflow/tfjs-core": {
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.9.tgz",
"integrity": "sha512-s0hHZSx6rGTlkkB8u8gs5n7sIPv1GXDNHmISRy+kqGzmlpkfI2kr6WXqOWQy6wFgjzopRD8cJQjBZ9USPZnYTQ==",
"dev": true,
"requires": {
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
"@types/webgl-ext": "0.0.30",
"@types/webgl2": "0.0.4",
"node-fetch": "~2.1.2",
"seedrandom": "2.4.3"
}
}
} }
}, },
"@tensorflow/tfjs-converter": { "@tensorflow/tfjs-converter": {
"version": "1.2.2", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.9.tgz",
"integrity": "sha512-NM2NcPRHpCNeJdBxHcYpmW9ZHTQ2lJFJgmgGpQ8CxSC9CtQB05bFONs3SKcwMNDE/69QBRVom5DYqLCVUg+A+g==", "integrity": "sha512-OKmiuZicIgadT3Bv9BvM+oom7wRz9eC5rTglQnuv7VN9H0syFVuhf5oD1Ff70tGDhJjJgL+cPz01fZRxTXjRWA==",
"dev": true "dev": true
}, },
"@tensorflow/tfjs-core": { "@tensorflow/tfjs-core": {
"version": "1.2.2", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.9.tgz",
"integrity": "sha512-2hCHMKjh3UNpLEjbAEaurrTGJyj/KpLtMSAraWgHA1vGY0kmk50BBSbgCDmXWUVm7lyh/SkCq4/GrGDZktEs3g==", "integrity": "sha512-s0hHZSx6rGTlkkB8u8gs5n7sIPv1GXDNHmISRy+kqGzmlpkfI2kr6WXqOWQy6wFgjzopRD8cJQjBZ9USPZnYTQ==",
"requires": { "requires": {
"@types/offscreencanvas": "~2019.3.0", "@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27", "@types/seedrandom": "2.4.27",
"@types/webgl-ext": "0.0.30", "@types/webgl-ext": "0.0.30",
"@types/webgl2": "0.0.4", "@types/webgl2": "0.0.4",
"node-fetch": "~2.1.2", "node-fetch": "~2.1.2",
"rollup-plugin-visualizer": "~1.1.1",
"seedrandom": "2.4.3" "seedrandom": "2.4.3"
},
"dependencies": {
"node-fetch": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
"integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
}
} }
}, },
"@tensorflow/tfjs-data": { "@tensorflow/tfjs-data": {
"version": "1.2.2", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.2.9.tgz",
"integrity": "sha512-oHGBoGdnCl2RyouLKplQqo+iil0iJgPbi/aoHizhpO77UBuJXlKMblH8w5GbxVAw3hKxWlqzYpxPo6rVRgehNA==", "integrity": "sha512-Ti9Cj3pte9butuEsK5OPq0Lcqdi4wVUdtQXm0o7iYOZ0umseRzfbIb6zbdqucc2MQzOMTnRoxN+FL7LZmncsHg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node-fetch": "^2.1.2", "@types/node-fetch": "^2.1.2",
...@@ -74,24 +82,44 @@ ...@@ -74,24 +82,44 @@
} }
}, },
"@tensorflow/tfjs-layers": { "@tensorflow/tfjs-layers": {
"version": "1.2.2", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.2.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.9.tgz",
"integrity": "sha512-yzWZaZrCVpEyTkSrzMe4OOP4aGUfaaROE/zR9fPsPGGF8wLlbLNZUJjeYUmjy3G3pXGaM0mQUbLR5Vd707CVtQ==", "integrity": "sha512-OlXYaIb1rCk5dYmpaNsPEkO7R+T0oxfS3vQGIztNJB+YxrN8mwCu3hqgpbdKhAITiP+jxO0o+7bny8MsOCkOSQ==",
"dev": true "dev": true
}, },
"@tensorflow/tfjs-node": { "@tensorflow/tfjs-node": {
"version": "1.2.3", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-1.2.3.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-1.2.9.tgz",
"integrity": "sha512-6/V3JfoxnvUJhZle8+7V0ln7KjUIJOlDCk43EBQg+XoGudvp3L1x0RXcfCQ1nXFIlZVYixNJYd3XTIOHZBECSA==", "integrity": "sha512-IGD4plBGy+2rQpYiI2LI/RC0nzyLKunJ2cPIx4etJ+V6n40mvEDOVXvUZCz/a72gKUKNPfx5uSsvImfRikWNjw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs": "~1.2.2", "@tensorflow/tfjs": "1.2.9",
"adm-zip": "^0.4.11", "adm-zip": "^0.4.11",
"bindings": "~1.3.0",
"https-proxy-agent": "^2.2.1", "https-proxy-agent": "^2.2.1",
"node-pre-gyp": "0.13.0",
"progress": "^2.0.0", "progress": "^2.0.0",
"rimraf": "^2.6.2", "rimraf": "^2.6.2",
"tar": "^4.4.6" "tar": "^4.4.6"
},
"dependencies": {
"node-pre-gyp": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz",
"integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==",
"dev": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
}
} }
}, },
"@types/estree": { "@types/estree": {
...@@ -101,21 +129,21 @@ ...@@ -101,21 +129,21 @@
"dev": true "dev": true
}, },
"@types/jasmine": { "@types/jasmine": {
"version": "3.3.13", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.13.tgz", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.4.0.tgz",
"integrity": "sha512-iczmLoIiVymaD1TIr2UctxjFkNEslVE/QtNAUmpDsD71cZfZBAsPCUv1Y+8AwsfA8bLx2ccr7d95T9w/UAirlQ==", "integrity": "sha512-6pUnBg6DuSB55xnxJ5+gW9JOkFrPsXkYAuqqEE8oyrpgDiPQ+TZ+1Zt4S+CHcRJcxyNYXeIXG4vHSzdF6y9Uvw==",
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "12.0.10", "version": "12.7.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
"integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==", "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==",
"dev": true "dev": true
}, },
"@types/node-fetch": { "@types/node-fetch": {
"version": "2.3.7", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.3.7.tgz", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.0.tgz",
"integrity": "sha512-+bKtuxhj/TYSSP1r4CZhfmyA0vm/aDRQNo7vbAgf6/cZajn0SAniGGST07yvI4Q+q169WTa2/x9gEHfJrkcALw==", "integrity": "sha512-TLFRywthBgL68auWj+ziWu+vnmmcHCDFC/sqCOQf1xTz4hRq8cu79z8CtHU9lncExGBsB8fXA4TiLDLt6xvMzw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
...@@ -167,15 +195,15 @@ ...@@ -167,15 +195,15 @@
} }
}, },
"acorn": { "acorn": {
"version": "6.1.1", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
"integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
"dev": true "dev": true
}, },
"acorn-walk": { "acorn-walk": {
"version": "6.1.1", "version": "6.2.0",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
"integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
"dev": true "dev": true
}, },
"adm-zip": { "adm-zip": {
...@@ -237,24 +265,13 @@ ...@@ -237,24 +265,13 @@
"dev": true "dev": true
}, },
"anymatch": { "anymatch": {
"version": "2.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==",
"dev": true, "dev": true,
"requires": { "requires": {
"micromatch": "^3.1.4", "normalize-path": "^3.0.0",
"normalize-path": "^2.1.1" "picomatch": "^2.0.4"
},
"dependencies": {
"normalize-path": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
}
} }
}, },
"aproba": { "aproba": {
...@@ -354,24 +371,18 @@ ...@@ -354,24 +371,18 @@
"dev": true "dev": true
}, },
"async": { "async": {
"version": "2.6.2", "version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
"integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"dev": true, "dev": true,
"requires": { "requires": {
"lodash": "^4.17.11" "lodash": "^4.17.14"
} }
}, },
"async-each": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"dev": true
},
"async-limiter": { "async-limiter": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true "dev": true
}, },
"atob": { "atob": {
...@@ -460,9 +471,9 @@ ...@@ -460,9 +471,9 @@
"dev": true "dev": true
}, },
"base64-js": { "base64-js": {
"version": "1.3.0", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
"integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"dev": true "dev": true
}, },
"base64id": { "base64id": {
...@@ -481,15 +492,9 @@ ...@@ -481,15 +492,9 @@
} }
}, },
"binary-extensions": { "binary-extensions": {
"version": "1.13.1", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
"dev": true
},
"bindings": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz",
"integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==",
"dev": true "dev": true
}, },
"blob": { "blob": {
...@@ -654,9 +659,9 @@ ...@@ -654,9 +659,9 @@
} }
}, },
"buffer": { "buffer": {
"version": "5.2.1", "version": "5.4.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz",
"integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==",
"dev": true, "dev": true,
"requires": { "requires": {
"base64-js": "^1.0.2", "base64-js": "^1.0.2",
...@@ -794,23 +799,54 @@ ...@@ -794,23 +799,54 @@
} }
}, },
"chokidar": { "chokidar": {
"version": "2.1.6", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz",
"integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==",
"dev": true, "dev": true,
"requires": { "requires": {
"anymatch": "^2.0.0", "anymatch": "^3.0.1",
"async-each": "^1.0.1", "braces": "^3.0.2",
"braces": "^2.3.2", "fsevents": "^2.0.6",
"fsevents": "^1.2.7", "glob-parent": "^5.0.0",
"glob-parent": "^3.1.0", "is-binary-path": "^2.1.0",
"inherits": "^2.0.3", "is-glob": "^4.0.1",
"is-binary-path": "^1.0.0",
"is-glob": "^4.0.0",
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"path-is-absolute": "^1.0.0", "readdirp": "^3.1.1"
"readdirp": "^2.2.1", },
"upath": "^1.1.1" "dependencies": {
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
}
} }
}, },
"chownr": { "chownr": {
...@@ -911,9 +947,9 @@ ...@@ -911,9 +947,9 @@
} }
}, },
"commander": { "commander": {
"version": "2.17.1", "version": "2.20.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
"dev": true "dev": true
}, },
"component-bind": { "component-bind": {
...@@ -1001,9 +1037,9 @@ ...@@ -1001,9 +1037,9 @@
"dev": true "dev": true
}, },
"core-js": { "core-js": {
"version": "2.6.9", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
"integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
"dev": true "dev": true
}, },
"core-util-is": { "core-util-is": {
...@@ -1084,9 +1120,9 @@ ...@@ -1084,9 +1120,9 @@
"dev": true "dev": true
}, },
"date-format": { "date-format": {
"version": "2.0.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz", "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz",
"integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==", "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==",
"dev": true "dev": true
}, },
"date-now": { "date-now": {
...@@ -1250,9 +1286,9 @@ ...@@ -1250,9 +1286,9 @@
"dev": true "dev": true
}, },
"elliptic": { "elliptic": {
"version": "6.5.0", "version": "6.5.1",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz",
"integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==",
"dev": true, "dev": true,
"requires": { "requires": {
"bn.js": "^4.4.0", "bn.js": "^4.4.0",
...@@ -1354,17 +1390,21 @@ ...@@ -1354,17 +1390,21 @@
} }
}, },
"es-abstract": { "es-abstract": {
"version": "1.13.0", "version": "1.14.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz",
"integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==",
"dev": true, "dev": true,
"requires": { "requires": {
"es-to-primitive": "^1.2.0", "es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
"has": "^1.0.3", "has": "^1.0.3",
"has-symbols": "^1.0.0",
"is-callable": "^1.1.4", "is-callable": "^1.1.4",
"is-regex": "^1.0.4", "is-regex": "^1.0.4",
"object-keys": "^1.0.12" "object-inspect": "^1.6.0",
"object-keys": "^1.1.1",
"string.prototype.trimleft": "^2.0.0",
"string.prototype.trimright": "^2.0.0"
} }
}, },
"es-to-primitive": { "es-to-primitive": {
...@@ -1455,9 +1495,9 @@ ...@@ -1455,9 +1495,9 @@
"dev": true "dev": true
}, },
"esutils": { "esutils": {
"version": "2.0.2", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true "dev": true
}, },
"eventemitter3": { "eventemitter3": {
...@@ -1624,12 +1664,12 @@ ...@@ -1624,12 +1664,12 @@
"dev": true "dev": true
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.7.0", "version": "1.9.0",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz",
"integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^3.2.6" "debug": "^3.0.0"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
...@@ -1700,552 +1740,11 @@ ...@@ -1700,552 +1740,11 @@
"dev": true "dev": true
}, },
"fsevents": { "fsevents": {
"version": "1.2.9", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz",
"integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==",
"dev": true, "dev": true,
"optional": true, "optional": true
"requires": {
"nan": "^2.12.1",
"node-pre-gyp": "^0.12.0"
},
"dependencies": {
"abbrev": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
}
},
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"chownr": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"debug": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ms": "^2.1.1"
}
},
"deep-extend": {
"version": "0.6.0",
"bundled": true,
"dev": true,
"optional": true
},
"delegates": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"detect-libc": {
"version": "1.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"fs-minipass": {
"version": "1.2.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
}
},
"fs.realpath": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"gauge": {
"version": "2.7.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"aproba": "^1.0.3",
"console-control-strings": "^1.0.0",
"has-unicode": "^2.0.0",
"object-assign": "^4.1.0",
"signal-exit": "^3.0.0",
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
"wide-align": "^1.1.0"
}
},
"glob": {
"version": "7.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"has-unicode": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"iconv-lite": {
"version": "0.4.24",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
},
"ignore-walk": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimatch": "^3.0.4"
}
},
"inflight": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true,
"optional": true
},
"ini": {
"version": "1.3.5",
"bundled": true,
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"isarray": {
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"minimatch": {
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
},
"minizlib": {
"version": "1.2.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minipass": "^2.2.1"
}
},
"mkdirp": {
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"needle": {
"version": "2.3.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"debug": "^4.1.0",
"iconv-lite": "^0.4.4",
"sax": "^1.2.4"
}
},
"node-pre-gyp": {
"version": "0.12.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"detect-libc": "^1.0.2",
"mkdirp": "^0.5.1",
"needle": "^2.2.1",
"nopt": "^4.0.1",
"npm-packlist": "^1.1.6",
"npmlog": "^4.0.2",
"rc": "^1.2.7",
"rimraf": "^2.6.1",
"semver": "^5.3.0",
"tar": "^4"
}
},
"nopt": {
"version": "4.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"abbrev": "1",
"osenv": "^0.1.4"
}
},
"npm-bundled": {
"version": "1.0.6",
"bundled": true,
"dev": true,
"optional": true
},
"npm-packlist": {
"version": "1.4.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ignore-walk": "^3.0.1",
"npm-bundled": "^1.0.1"
}
},
"npmlog": {
"version": "4.1.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"are-we-there-yet": "~1.1.2",
"console-control-strings": "~1.1.0",
"gauge": "~2.7.3",
"set-blocking": "~2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
"bundled": true,
"dev": true,
"optional": true
},
"once": {
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"osenv": {
"version": "0.1.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"os-homedir": "^1.0.0",
"os-tmpdir": "^1.0.0"
}
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"process-nextick-args": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"rc": {
"version": "1.2.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"bundled": true,
"dev": true,
"optional": true
}
}
},
"readable-stream": {
"version": "2.3.6",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"rimraf": {
"version": "2.6.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"glob": "^7.1.3"
}
},
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
"bundled": true,
"dev": true,
"optional": true
},
"sax": {
"version": "1.2.4",
"bundled": true,
"dev": true,
"optional": true
},
"semver": {
"version": "5.7.0",
"bundled": true,
"dev": true,
"optional": true
},
"set-blocking": {
"version": "2.0.0",
"bundled": true,
"dev": true,
"optional": true
},
"signal-exit": {
"version": "3.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"string-width": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
},
"string_decoder": {
"version": "1.1.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
},
"strip-json-comments": {
"version": "2.0.1",
"bundled": true,
"dev": true,
"optional": true
},
"tar": {
"version": "4.4.8",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"chownr": "^1.1.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.3.4",
"minizlib": "^1.1.1",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
"util-deprecate": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"wide-align": {
"version": "1.1.3",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"string-width": "^1.0.2 || 2"
}
},
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true,
"optional": true
}
}
}, },
"function-bind": { "function-bind": {
"version": "1.1.1", "version": "1.1.1",
...@@ -2296,24 +1795,12 @@ ...@@ -2296,24 +1795,12 @@
} }
}, },
"glob-parent": { "glob-parent": {
"version": "3.1.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==",
"dev": true, "dev": true,
"requires": { "requires": {
"is-glob": "^3.1.0", "is-glob": "^4.0.1"
"path-dirname": "^1.0.0"
},
"dependencies": {
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
"is-extglob": "^2.1.0"
}
}
} }
}, },
"graceful-fs": { "graceful-fs": {
...@@ -2323,9 +1810,9 @@ ...@@ -2323,9 +1810,9 @@
"dev": true "dev": true
}, },
"handlebars": { "handlebars": {
"version": "4.1.2", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.0.tgz",
"integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "integrity": "sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==",
"dev": true, "dev": true,
"requires": { "requires": {
"neo-async": "^2.6.0", "neo-async": "^2.6.0",
...@@ -2448,9 +1935,9 @@ ...@@ -2448,9 +1935,9 @@
} }
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "2.7.1", "version": "2.8.4",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
"dev": true "dev": true
}, },
"http-errors": { "http-errors": {
...@@ -2484,12 +1971,12 @@ ...@@ -2484,12 +1971,12 @@
"dev": true "dev": true
}, },
"https-proxy-agent": { "https-proxy-agent": {
"version": "2.2.1", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz",
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==",
"dev": true, "dev": true,
"requires": { "requires": {
"agent-base": "^4.1.0", "agent-base": "^4.3.0",
"debug": "^3.1.0" "debug": "^3.1.0"
}, },
"dependencies": { "dependencies": {
...@@ -2610,12 +2097,12 @@ ...@@ -2610,12 +2097,12 @@
"dev": true "dev": true
}, },
"is-binary-path": { "is-binary-path": {
"version": "1.0.1", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true, "dev": true,
"requires": { "requires": {
"binary-extensions": "^1.0.0" "binary-extensions": "^2.0.0"
} }
}, },
"is-buffer": { "is-buffer": {
...@@ -2743,9 +2230,9 @@ ...@@ -2743,9 +2230,9 @@
} }
}, },
"is-reference": { "is-reference": {
"version": "1.1.2", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.2.tgz", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.3.tgz",
"integrity": "sha512-Kn5g8c7XHKejFOpTf2QN9YjiHHKl5xRj+2uAZf9iM2//nkBNi/NNeB5JMoun28nEaUVHyPUzqzhfRlfAirEjXg==", "integrity": "sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/estree": "0.0.39" "@types/estree": "0.0.39"
...@@ -2781,12 +2268,6 @@ ...@@ -2781,12 +2268,6 @@
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true "dev": true
}, },
"is-wsl": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
"integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
"optional": true
},
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
...@@ -2855,6 +2336,15 @@ ...@@ -2855,6 +2336,15 @@
"path-is-absolute": "^1.0.0" "path-is-absolute": "^1.0.0"
} }
}, },
"nopt": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
"abbrev": "1"
}
},
"wordwrap": { "wordwrap": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
...@@ -2896,12 +2386,12 @@ ...@@ -2896,12 +2386,12 @@
"dev": true "dev": true
}, },
"jest-worker": { "jest-worker": {
"version": "24.0.0", "version": "24.9.0",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0.tgz", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
"integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==", "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
"dev": true, "dev": true,
"requires": { "requires": {
"merge-stream": "^1.0.1", "merge-stream": "^2.0.0",
"supports-color": "^6.1.0" "supports-color": "^6.1.0"
}, },
"dependencies": { "dependencies": {
...@@ -2962,18 +2452,18 @@ ...@@ -2962,18 +2452,18 @@
} }
}, },
"karma": { "karma": {
"version": "4.1.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", "resolved": "https://registry.npmjs.org/karma/-/karma-4.3.0.tgz",
"integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", "integrity": "sha512-NSPViHOt+RW38oJklvYxQC4BSQsv737oQlr/r06pCM+slDOr4myuI1ivkRmp+3dVpJDfZt2DmaPJ2wkx+ZZuMQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"bluebird": "^3.3.0", "bluebird": "^3.3.0",
"body-parser": "^1.16.1", "body-parser": "^1.16.1",
"braces": "^2.3.2", "braces": "^3.0.2",
"chokidar": "^2.0.3", "chokidar": "^3.0.0",
"colors": "^1.1.0", "colors": "^1.1.0",
"connect": "^3.6.0", "connect": "^3.6.0",
"core-js": "^2.2.0", "core-js": "^3.1.3",
"di": "^0.0.1", "di": "^0.0.1",
"dom-serialize": "^2.2.0", "dom-serialize": "^2.2.0",
"flatted": "^2.0.0", "flatted": "^2.0.0",
...@@ -2981,7 +2471,7 @@ ...@@ -2981,7 +2471,7 @@
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
"http-proxy": "^1.13.0", "http-proxy": "^1.13.0",
"isbinaryfile": "^3.0.0", "isbinaryfile": "^3.0.0",
"lodash": "^4.17.11", "lodash": "^4.17.14",
"log4js": "^4.0.0", "log4js": "^4.0.0",
"mime": "^2.3.1", "mime": "^2.3.1",
"minimatch": "^3.0.2", "minimatch": "^3.0.2",
...@@ -2994,6 +2484,41 @@ ...@@ -2994,6 +2484,41 @@
"source-map": "^0.6.1", "source-map": "^0.6.1",
"tmp": "0.0.33", "tmp": "0.0.33",
"useragent": "2.3.0" "useragent": "2.3.0"
},
"dependencies": {
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
}
} }
}, },
"karma-chrome-launcher": { "karma-chrome-launcher": {
...@@ -3045,9 +2570,9 @@ ...@@ -3045,9 +2570,9 @@
} }
}, },
"karma-typescript": { "karma-typescript": {
"version": "4.1.0", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/karma-typescript/-/karma-typescript-4.1.0.tgz", "resolved": "https://registry.npmjs.org/karma-typescript/-/karma-typescript-4.1.1.tgz",
"integrity": "sha512-FhoZlPWVlkWN110KrUYcAOxTPeyvw9kg3uolxP2s/DsmUthdc5MWgl84yOr4j3xFGHStd9wLqek1nGRkFcJ35A==", "integrity": "sha512-NiGt3Lh8pxKY6hSW4mBV7X45zfB+EA4ezVMNN/vnzLvN+du0UoEc8lTAhrD/DMrjKP3wDlpabku652svRyguXg==",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "^6.0.5", "acorn": "^6.0.5",
...@@ -3125,14 +2650,20 @@ ...@@ -3125,14 +2650,20 @@
} }
}, },
"rimraf": { "rimraf": {
"version": "2.6.3", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true, "dev": true,
"requires": { "requires": {
"glob": "^7.1.3" "glob": "^7.1.3"
} }
}, },
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
},
"source-map": { "source-map": {
"version": "0.7.3", "version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
...@@ -3140,12 +2671,12 @@ ...@@ -3140,12 +2671,12 @@
"dev": true "dev": true
}, },
"string_decoder": { "string_decoder": {
"version": "1.2.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true, "dev": true,
"requires": { "requires": {
"safe-buffer": "~5.1.0" "safe-buffer": "~5.2.0"
} }
}, },
"tmp": { "tmp": {
...@@ -3192,9 +2723,9 @@ ...@@ -3192,9 +2723,9 @@
} }
}, },
"lodash": { "lodash": {
"version": "4.17.11", "version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"dev": true "dev": true
}, },
"lodash.memoize": { "lodash.memoize": {
...@@ -3204,16 +2735,16 @@ ...@@ -3204,16 +2735,16 @@
"dev": true "dev": true
}, },
"log4js": { "log4js": {
"version": "4.4.0", "version": "4.5.1",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-4.4.0.tgz", "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz",
"integrity": "sha512-xwRvmxFsq8Hb7YeS+XKfvCrsH114bXex6mIwJ2+KmYVi23pB3+hlzyGq1JPycSFTJWNLhD/7PCtM0RfPy6/2yg==", "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==",
"dev": true, "dev": true,
"requires": { "requires": {
"date-format": "^2.0.0", "date-format": "^2.0.0",
"debug": "^4.1.1", "debug": "^4.1.1",
"flatted": "^2.0.0", "flatted": "^2.0.0",
"rfdc": "^1.1.4", "rfdc": "^1.1.4",
"streamroller": "^1.0.5" "streamroller": "^1.0.6"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
...@@ -3262,9 +2793,9 @@ ...@@ -3262,9 +2793,9 @@
} }
}, },
"magic-string": { "magic-string": {
"version": "0.25.2", "version": "0.25.3",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz",
"integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==",
"dev": true, "dev": true,
"requires": { "requires": {
"sourcemap-codec": "^1.4.4" "sourcemap-codec": "^1.4.4"
...@@ -3341,13 +2872,10 @@ ...@@ -3341,13 +2872,10 @@
} }
}, },
"merge-stream": { "merge-stream": {
"version": "1.0.1", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true, "dev": true
"requires": {
"readable-stream": "^2.0.1"
}
}, },
"micromatch": { "micromatch": {
"version": "3.1.10", "version": "3.1.10",
...@@ -3497,7 +3025,8 @@ ...@@ -3497,7 +3025,8 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
...@@ -3543,6 +3072,7 @@ ...@@ -3543,6 +3072,7 @@
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
...@@ -3687,8 +3217,7 @@ ...@@ -3687,8 +3217,7 @@
"node-fetch": { "node-fetch": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
"integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=", "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
"dev": true
}, },
"node-pre-gyp": { "node-pre-gyp": {
"version": "0.11.0", "version": "0.11.0",
...@@ -3721,12 +3250,13 @@ ...@@ -3721,12 +3250,13 @@
} }
}, },
"nopt": { "nopt": {
"version": "3.0.6", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"dev": true, "dev": true,
"requires": { "requires": {
"abbrev": "1" "abbrev": "1",
"osenv": "^0.1.4"
} }
}, },
"normalize-package-data": { "normalize-package-data": {
...@@ -3742,9 +3272,9 @@ ...@@ -3742,9 +3272,9 @@
}, },
"dependencies": { "dependencies": {
"resolve": { "resolve": {
"version": "1.11.1", "version": "1.12.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
"integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-parse": "^1.0.6" "path-parse": "^1.0.6"
...@@ -3821,6 +3351,12 @@ ...@@ -3821,6 +3351,12 @@
"kind-of": "^3.0.3" "kind-of": "^3.0.3"
} }
}, },
"object-inspect": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
"integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
"dev": true
},
"object-is": { "object-is": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
...@@ -3881,15 +3417,6 @@ ...@@ -3881,15 +3417,6 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"opn": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
"integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
"optional": true,
"requires": {
"is-wsl": "^1.1.0"
}
},
"optimist": { "optimist": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
...@@ -4024,12 +3551,6 @@ ...@@ -4024,12 +3551,6 @@
"integrity": "sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g==", "integrity": "sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g==",
"dev": true "dev": true
}, },
"path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
"dev": true
},
"path-exists": { "path-exists": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
...@@ -4075,6 +3596,12 @@ ...@@ -4075,6 +3596,12 @@
"sha.js": "^2.4.8" "sha.js": "^2.4.8"
} }
}, },
"picomatch": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz",
"integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==",
"dev": true
},
"pify": { "pify": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
...@@ -4314,14 +3841,12 @@ ...@@ -4314,14 +3841,12 @@
} }
}, },
"readdirp": { "readdirp": {
"version": "2.2.1", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==",
"dev": true, "dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.11", "picomatch": "^2.0.4"
"micromatch": "^3.1.10",
"readable-stream": "^2.0.2"
} }
}, },
"redent": { "redent": {
...@@ -4378,12 +3903,6 @@ ...@@ -4378,12 +3903,6 @@
"through2": "3.0.0" "through2": "3.0.0"
} }
}, },
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true
},
"repeat-element": { "repeat-element": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
...@@ -4455,20 +3974,28 @@ ...@@ -4455,20 +3974,28 @@
} }
}, },
"rollup": { "rollup": {
"version": "1.16.2", "version": "1.21.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-1.16.2.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.21.2.tgz",
"integrity": "sha512-UAZxaQvH0klYZdF+90xv9nGb+m4p8jdoaow1VL5/RzDK/gN/4CjvaMmJNcOIv1/+gtzswKhAg/467mzF0sLpAg==", "integrity": "sha512-sCAHlcQ/PExU5t/kRwkEWHdhGmQrZ2IgdQzbjPVNfhWbKHMMZGYqkASVTpQqRPLtQKg15xzEscc+BnIK/TE7/Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/estree": "0.0.39", "@types/estree": "0.0.39",
"@types/node": "^12.0.8", "@types/node": "^12.7.4",
"acorn": "^6.1.1" "acorn": "^7.0.0"
},
"dependencies": {
"acorn": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
"integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==",
"dev": true
}
} }
}, },
"rollup-plugin-commonjs": { "rollup-plugin-commonjs": {
"version": "10.0.1", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.1.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz",
"integrity": "sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA==", "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"estree-walker": "^0.6.1", "estree-walker": "^0.6.1",
...@@ -4479,9 +4006,9 @@ ...@@ -4479,9 +4006,9 @@
}, },
"dependencies": { "dependencies": {
"resolve": { "resolve": {
"version": "1.11.1", "version": "1.12.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
"integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-parse": "^1.0.6" "path-parse": "^1.0.6"
...@@ -4490,9 +4017,9 @@ ...@@ -4490,9 +4017,9 @@
} }
}, },
"rollup-plugin-node-resolve": { "rollup-plugin-node-resolve": {
"version": "5.1.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.1.0.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
"integrity": "sha512-2hwwHNj0s8UEtUNT+lJq8rFWEznP7yJm3GCHBicadF6hiNX1aRARRZIjz2doeTlTGg/hOvJr4C/8+3k9Y/J5Hg==", "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/resolve": "0.0.8", "@types/resolve": "0.0.8",
...@@ -4503,9 +4030,9 @@ ...@@ -4503,9 +4030,9 @@
}, },
"dependencies": { "dependencies": {
"resolve": { "resolve": {
"version": "1.11.1", "version": "1.12.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
"integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-parse": "^1.0.6" "path-parse": "^1.0.6"
...@@ -4553,37 +4080,17 @@ ...@@ -4553,37 +4080,17 @@
} }
}, },
"rollup-plugin-uglify": { "rollup-plugin-uglify": {
"version": "6.0.2", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.3.tgz",
"integrity": "sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw==", "integrity": "sha512-PIv3CfhZJlOG8C85N0GX+uK09TPggmAS6Nk6fpp2ELzDAV5VUhNzOURDU2j7+MwuRr0zq9IZttUTADc/jH8Gkg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
"jest-worker": "^24.0.0", "jest-worker": "^24.0.0",
"serialize-javascript": "^1.6.1", "serialize-javascript": "^1.9.0",
"uglify-js": "^3.4.9" "uglify-js": "^3.4.9"
} }
}, },
"rollup-plugin-visualizer": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-1.1.1.tgz",
"integrity": "sha512-7xkSKp+dyJmSC7jg2LXqViaHuOnF1VvIFCnsZEKjrgT5ZVyiLLSbeszxFcQSfNJILphqgAEmWAUz0Z4xYScrRw==",
"optional": true,
"requires": {
"mkdirp": "^0.5.1",
"opn": "^5.4.0",
"source-map": "^0.7.3",
"typeface-oswald": "0.0.54"
},
"dependencies": {
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"optional": true
}
}
},
"rollup-pluginutils": { "rollup-pluginutils": {
"version": "2.8.1", "version": "2.8.1",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz",
...@@ -4632,9 +4139,9 @@ ...@@ -4632,9 +4139,9 @@
"dev": true "dev": true
}, },
"serialize-javascript": { "serialize-javascript": {
"version": "1.6.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz",
"integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==",
"dev": true "dev": true
}, },
"set-blocking": { "set-blocking": {
...@@ -4918,9 +4425,9 @@ ...@@ -4918,9 +4425,9 @@
"dev": true "dev": true
}, },
"sourcemap-codec": { "sourcemap-codec": {
"version": "1.4.4", "version": "1.4.6",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
"integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==",
"dev": true "dev": true
}, },
"spdx-correct": { "spdx-correct": {
...@@ -4950,9 +4457,9 @@ ...@@ -4950,9 +4457,9 @@
} }
}, },
"spdx-license-ids": { "spdx-license-ids": {
"version": "3.0.4", "version": "3.0.5",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
"integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
"dev": true "dev": true
}, },
"split-string": { "split-string": {
...@@ -5018,9 +4525,9 @@ ...@@ -5018,9 +4525,9 @@
} }
}, },
"stream-http": { "stream-http": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.0.0.tgz", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz",
"integrity": "sha512-JELJfd+btL9GHtxU3+XXhg9NLYrKFnhybfvRuDghtyVkOFydz3PKNT1df07AMr88qW03WHF+FSV0PySpXignCA==", "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==",
"dev": true, "dev": true,
"requires": { "requires": {
"builtin-status-codes": "^3.0.0", "builtin-status-codes": "^3.0.0",
...@@ -5043,16 +4550,16 @@ ...@@ -5043,16 +4550,16 @@
} }
}, },
"streamroller": { "streamroller": {
"version": "1.0.5", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz",
"integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==",
"dev": true, "dev": true,
"requires": { "requires": {
"async": "^2.6.2", "async": "^2.6.2",
"date-format": "^2.0.0", "date-format": "^2.0.0",
"debug": "^3.2.6", "debug": "^3.2.6",
"fs-extra": "^7.0.1", "fs-extra": "^7.0.1",
"lodash": "^4.17.11" "lodash": "^4.17.14"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
...@@ -5083,6 +4590,26 @@ ...@@ -5083,6 +4590,26 @@
"strip-ansi": "^3.0.0" "strip-ansi": "^3.0.0"
} }
}, },
"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==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
}
},
"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==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
"function-bind": "^1.1.1"
}
},
"string_decoder": { "string_decoder": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
...@@ -5150,19 +4677,12 @@ ...@@ -5150,19 +4677,12 @@
} }
}, },
"tfjs-image-recognition-base": { "tfjs-image-recognition-base": {
"version": "0.6.1", "version": "0.6.2",
"resolved": "https://registry.npmjs.org/tfjs-image-recognition-base/-/tfjs-image-recognition-base-0.6.1.tgz", "resolved": "https://registry.npmjs.org/tfjs-image-recognition-base/-/tfjs-image-recognition-base-0.6.2.tgz",
"integrity": "sha512-4ibEGwR2MghHgghqAn6Cg8kbmoB7lxWuANcG3wAsqKSWKRBvJ1iqejUqKwCx7B0UHqxh8XZEl6fdvT4To6o9Cw==", "integrity": "sha512-ukxViVfAPw7s0KiGhwr3zrwsm+EVa2Z+4aEwKBWO43Rt48nbPyVvrHdL+WbxRynZYjklEE69ft66C8zzea7vFw==",
"requires": { "requires": {
"@tensorflow/tfjs-core": "^1.2.2", "@tensorflow/tfjs-core": "^1.2.9",
"tslib": "^1.10.0" "tslib": "^1.10.0"
},
"dependencies": {
"tslib": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
"integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
}
} }
}, },
"through2": { "through2": {
...@@ -5176,9 +4696,9 @@ ...@@ -5176,9 +4696,9 @@
} }
}, },
"timers-browserify": { "timers-browserify": {
"version": "2.0.10", "version": "2.0.11",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
"integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"setimmediate": "^1.0.4" "setimmediate": "^1.0.4"
...@@ -5351,25 +4871,19 @@ ...@@ -5351,25 +4871,19 @@
"mime-types": "~2.1.24" "mime-types": "~2.1.24"
} }
}, },
"typeface-oswald": {
"version": "0.0.54",
"resolved": "https://registry.npmjs.org/typeface-oswald/-/typeface-oswald-0.0.54.tgz",
"integrity": "sha512-U1WMNp4qfy4/3khIfHMVAIKnNu941MXUfs3+H9R8PFgnoz42Hh9pboSFztWr86zut0eXC8byalmVhfkiKON/8Q==",
"optional": true
},
"typescript": { "typescript": {
"version": "3.5.2", "version": "3.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==",
"dev": true "dev": true
}, },
"uglify-js": { "uglify-js": {
"version": "3.4.9", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz",
"integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==",
"dev": true, "dev": true,
"requires": { "requires": {
"commander": "~2.17.1", "commander": "~2.20.0",
"source-map": "~0.6.1" "source-map": "~0.6.1"
} }
}, },
...@@ -5457,12 +4971,6 @@ ...@@ -5457,12 +4971,6 @@
} }
} }
}, },
"upath": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
"integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==",
"dev": true
},
"urix": { "urix": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
...@@ -5504,12 +5012,12 @@ ...@@ -5504,12 +5012,12 @@
} }
}, },
"util": { "util": {
"version": "0.12.0", "version": "0.12.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.12.0.tgz", "resolved": "https://registry.npmjs.org/util/-/util-0.12.1.tgz",
"integrity": "sha512-pPSOFl7VLhZ7LO/SFABPraZEEurkJUWSMn3MuA/r3WQZc+Z1fqou2JqLSOZbCLl73EUIxuUVX8X4jkX2vfJeAA==", "integrity": "sha512-MREAtYOp+GTt9/+kwf00IYoHZyjM8VU4aVrkzUlejyqaIjd2GztVl5V9hGXKlvBKE3gENn/FMfHE5v6hElXGcQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "^2.0.3",
"is-arguments": "^1.0.4", "is-arguments": "^1.0.4",
"is-generator-function": "^1.0.7", "is-generator-function": "^1.0.7",
"object.entries": "^1.1.0", "object.entries": "^1.1.0",
...@@ -5607,9 +5115,9 @@ ...@@ -5607,9 +5115,9 @@
"dev": true "dev": true
}, },
"xtend": { "xtend": {
"version": "4.0.1", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true "dev": true
}, },
"yallist": { "yallist": {
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
"build": "rm -rf ./build && rm -rf ./dist && npm run rollup && npm run rollup-min && npm run tsc && npm run tsc-es6", "build": "rm -rf ./build && rm -rf ./dist && npm run rollup && npm run rollup-min && npm run tsc && npm run tsc-es6",
"test": "karma start", "test": "karma start",
"test-browser": "karma start --single-run", "test-browser": "karma start --single-run",
"test-node": "ts-node node_modules/jasmine/bin/jasmine --config=jasmine-node.js", "test-node": "ts-node -r ./test/env.node.ts node_modules/jasmine/bin/jasmine --config=jasmine-node.js",
"test-all": "npm run test-browser-exclude-uncompressed && npm run test-node-exclude-uncompressed", "test-all": "npm run test-browser-exclude-uncompressed && npm run test-node-exclude-uncompressed",
"test-all-include-uncompressed": "npm run test-browser && npm run test-node", "test-all-include-uncompressed": "npm run test-browser && npm run test-node",
"test-facelandmarknets": "set UUT=faceLandmarkNet&& karma start", "test-facelandmarknets": "set UUT=faceLandmarkNet&& karma start",
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
"test-cpu": "set BACKEND_CPU=true&& karma start", "test-cpu": "set BACKEND_CPU=true&& karma start",
"test-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& karma start", "test-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& karma start",
"test-browser-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& karma start --single-run", "test-browser-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& karma start --single-run",
"test-node-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& ts-node node_modules/jasmine/bin/jasmine --config=jasmine-node.js", "test-node-exclude-uncompressed": "set EXCLUDE_UNCOMPRESSED=true&& npm run test-node",
"docs": "typedoc --options ./typedoc.config.js ./src" "docs": "typedoc --options ./typedoc.config.js ./src"
}, },
"keywords": [ "keywords": [
...@@ -39,27 +39,27 @@ ...@@ -39,27 +39,27 @@
"author": "justadudewhohacks", "author": "justadudewhohacks",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tensorflow/tfjs-core": "1.2.2", "@tensorflow/tfjs-core": "1.2.9",
"tfjs-image-recognition-base": "^0.6.1", "tfjs-image-recognition-base": "^0.6.2",
"tslib": "^1.10.0" "tslib": "^1.10.0"
}, },
"devDependencies": { "devDependencies": {
"@tensorflow/tfjs-node": "^1.2.3", "@tensorflow/tfjs-node": "^1.2.9",
"@types/jasmine": "^3.3.13", "@types/jasmine": "^3.4.0",
"@types/node": "^12.0.10", "@types/node": "^12.7.5",
"canvas": "2.5.0", "canvas": "2.5.0",
"jasmine": "^3.4.0", "jasmine": "^3.4.0",
"jasmine-core": "^3.4.0", "jasmine-core": "^3.4.0",
"karma": "^4.1.0", "karma": "^4.3.0",
"karma-chrome-launcher": "^2.2.0", "karma-chrome-launcher": "^2.2.0",
"karma-jasmine": "^2.0.1", "karma-jasmine": "^2.0.1",
"karma-typescript": "^4.1.0", "karma-typescript": "^4.1.1",
"rollup": "^1.16.2", "rollup": "^1.21.2",
"rollup-plugin-commonjs": "^10.0.1", "rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.1.0", "rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-typescript2": "^0.21.2", "rollup-plugin-typescript2": "^0.21.2",
"rollup-plugin-uglify": "^6.0.2", "rollup-plugin-uglify": "^6.0.3",
"ts-node": "^8.3.0", "ts-node": "^8.3.0",
"typescript": "^3.5.2" "typescript": "^3.6.3"
} }
} }
import { NeuralNetwork } from 'tfjs-image-recognition-base';
export type TestEnv = {
loadImage: (uri: string) => Promise<HTMLImageElement>
loadJson: <T> (uri: string) => Promise<T>
initNet: <TNet extends NeuralNetwork<any>>(
net: TNet,
uncompressedFilename?: string | boolean,
isUnusedModel?: boolean
) => any
}
\ No newline at end of file
import * as fs from 'fs';
import * as path from 'path';
import { NeuralNetwork } from 'tfjs-image-recognition-base';
import { env } from '../src';
import { TestEnv } from './Environment';
require('@tensorflow/tfjs-node')
const canvas = require('canvas')
const { Canvas, Image, ImageData } = canvas
env.monkeyPatch({ Canvas, Image, ImageData })
async function loadImageNode(uri: string): Promise<HTMLImageElement> {
return canvas.loadImage(path.resolve(__dirname, '../', uri))
}
async function loadJsonNode<T>(uri: string): Promise<T> {
return JSON.parse(fs.readFileSync(path.resolve(__dirname, '../', uri)).toString())
}
export async function initNetNode<TNet extends NeuralNetwork<any>>(net: TNet) {
await net.loadFromDisk(path.resolve(__dirname, '../weights'))
}
const nodeTestEnv: TestEnv = {
loadImage: loadImageNode,
loadJson: loadJsonNode,
initNet: initNetNode
}
global['nodeTestEnv'] = nodeTestEnv
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { fetchNetWeights, NeuralNetwork } from 'tfjs-image-recognition-base'; import { fetchNetWeights, NeuralNetwork } from 'tfjs-image-recognition-base';
import { env, fetchImage, fetchJson } from '../src'; import { fetchImage, fetchJson } from '../src';
import { TestEnv } from './Environment';
export let fs: any, path: any, canvas: any
jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000 jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000
if (env.isNodejs()) { if (typeof window !== 'undefined' && window['__karma__'] && (window['__karma__'].config.jasmine.args as string[]).some(arg => arg === 'backend_cpu')) {
require('@tensorflow/tfjs-node') tf.setBackend('cpu')
fs = require('fs')
path = require('path')
canvas = require('canvas')
const { Canvas, Image, ImageData } = canvas
env.monkeyPatch({ Canvas, Image, ImageData })
} else {
if ((window['__karma__'].config.jasmine.args as string[]).some(arg => arg === 'backend_cpu')) {
tf.setBackend('cpu')
}
} }
export async function initNet<TNet extends NeuralNetwork<any>>( async function loadImageBrowser(uri: string): Promise<HTMLImageElement> {
return fetchImage(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
}
async function loadJsonBrowser<T>(uri: string): Promise<T> {
return fetchJson<T>(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
}
async function initNetBrowser<TNet extends NeuralNetwork<any>>(
net: TNet, net: TNet,
uncompressedFilename: string | boolean, uncompressedFilename: string | boolean,
isUnusedModel: boolean = false isUnusedModel: boolean = false
) { ) {
if (env.isNodejs()) { const url = uncompressedFilename
await net.loadFromDisk(path.resolve(__dirname, '../weights')) ? await fetchNetWeights(`base/weights_uncompressed/${uncompressedFilename}`)
} else { : (isUnusedModel ? 'base/weights_unused' : 'base/weights')
const url = uncompressedFilename await net.load(url)
? await fetchNetWeights(`base/weights_uncompressed/${uncompressedFilename}`)
: (isUnusedModel ? 'base/weights_unused' : 'base/weights')
await net.load(url)
}
} }
export async function loadImage(uri: string): Promise<HTMLImageElement> { const browserTestEnv: TestEnv = {
if (env.isNodejs()) { loadImage: loadImageBrowser,
return canvas.loadImage(path.resolve(__dirname, '../', uri)) loadJson: loadJsonBrowser,
} initNet: initNetBrowser
return fetchImage(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
} }
export async function loadJson<T>(uri: string): Promise<T> { export function getTestEnv(): TestEnv {
if (env.isNodejs()) { return global['nodeTestEnv'] || browserTestEnv
return JSON.parse(fs.readFileSync(path.resolve(__dirname, '../', uri)).toString())
}
return fetchJson<T>(`base${uri.startsWith('/') ? '' : '/'}${uri}`)
} }
...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core'; ...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src'; import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
import { AgeAndGenderPrediction } from '../../../src/ageGenderNet/types'; import { AgeAndGenderPrediction } from '../../../src/ageGenderNet/types';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils'; import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
function expectResultsAngry(result: AgeAndGenderPrediction) { function expectResultsAngry(result: AgeAndGenderPrediction) {
...@@ -25,8 +25,8 @@ describeWithBackend('ageGenderNet', () => { ...@@ -25,8 +25,8 @@ describeWithBackend('ageGenderNet', () => {
let imgElSurprised: HTMLImageElement let imgElSurprised: HTMLImageElement
beforeAll(async () => { beforeAll(async () => {
imgElAngry = await loadImage('test/images/angry_cropped.jpg') imgElAngry = await getTestEnv().loadImage('test/images/angry_cropped.jpg')
imgElSurprised = await loadImage('test/images/surprised_cropped.jpg') imgElSurprised = await getTestEnv().loadImage('test/images/surprised_cropped.jpg')
}) })
describeWithNets('quantized weights', { withAgeGenderNet: { quantized: true } }, ({ ageGenderNet }) => { describeWithNets('quantized weights', { withAgeGenderNet: { quantized: true } }, ({ ageGenderNet }) => {
......
import { createCanvasFromMedia, extractFaceTensors, Rect, tf } from '../../../src'; import { createCanvasFromMedia, extractFaceTensors, Rect, tf } from '../../../src';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend } from '../../utils'; import { describeWithBackend } from '../../utils';
describeWithBackend('extractFaceTensors', () => { describeWithBackend('extractFaceTensors', () => {
...@@ -7,7 +7,7 @@ describeWithBackend('extractFaceTensors', () => { ...@@ -7,7 +7,7 @@ describeWithBackend('extractFaceTensors', () => {
let imgTensor: tf.Tensor3D let imgTensor: tf.Tensor3D
beforeAll(async () => { beforeAll(async () => {
imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await loadImage('test/images/face1.png'))) imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await getTestEnv().loadImage('test/images/face1.png')))
}) })
describe('extracts tensors', () => { describe('extracts tensors', () => {
......
import { createCanvasFromMedia, env, extractFaces, Rect } from '../../../src'; import { createCanvasFromMedia, env, extractFaces, Rect } from '../../../src';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
describe('extractFaces', () => { describe('extractFaces', () => {
let imgEl: HTMLImageElement, canvasEl: HTMLCanvasElement, Canvas: typeof HTMLCanvasElement let imgEl: HTMLImageElement, canvasEl: HTMLCanvasElement, Canvas: typeof HTMLCanvasElement
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/face1.png') imgEl = await getTestEnv().loadImage('test/images/face1.png')
canvasEl = createCanvasFromMedia(imgEl) canvasEl = createCanvasFromMedia(imgEl)
Canvas = env.getEnv().Canvas Canvas = env.getEnv().Canvas
}) })
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src'; import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
import { loadImage } from '../../env';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
import { FaceExpressions } from '../../../src/faceExpressionNet/FaceExpressions'; import { FaceExpressions } from '../../../src/faceExpressionNet/FaceExpressions';
import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
describeWithBackend('faceExpressionNet', () => { describeWithBackend('faceExpressionNet', () => {
...@@ -11,8 +11,8 @@ describeWithBackend('faceExpressionNet', () => { ...@@ -11,8 +11,8 @@ describeWithBackend('faceExpressionNet', () => {
let imgElSurprised: HTMLImageElement let imgElSurprised: HTMLImageElement
beforeAll(async () => { beforeAll(async () => {
imgElAngry = await loadImage('test/images/angry_cropped.jpg') imgElAngry = await getTestEnv().loadImage('test/images/angry_cropped.jpg')
imgElSurprised = await loadImage('test/images/surprised_cropped.jpg') imgElSurprised = await getTestEnv().loadImage('test/images/surprised_cropped.jpg')
}) })
describeWithNets('quantized weights', { withFaceExpressionNet: { quantized: true } }, ({ faceExpressionNet }) => { describeWithNets('quantized weights', { withFaceExpressionNet: { quantized: true } }, ({ faceExpressionNet }) => {
......
...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core'; ...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src'; import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68'; import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { import {
describeWithBackend, describeWithBackend,
describeWithNets, describeWithNets,
...@@ -29,12 +29,12 @@ describeWithBackend('faceLandmark68Net', () => { ...@@ -29,12 +29,12 @@ describeWithBackend('faceLandmark68Net', () => {
let faceLandmarkPositionsRect: Point[] let faceLandmarkPositionsRect: Point[]
beforeAll(async () => { beforeAll(async () => {
imgEl1 = await loadImage('test/images/face1.png') imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
imgEl2 = await loadImage('test/images/face2.png') imgEl2 = await getTestEnv().loadImage('test/images/face2.png')
imgElRect = await loadImage('test/images/face_rectangular.png') imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1.json') faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1.json')
faceLandmarkPositions2 = await loadJson<Point[]>('test/data/faceLandmarkPositions2.json') faceLandmarkPositions2 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions2.json')
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json') faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json')
}) })
describeWithNets('quantized weights', { withFaceLandmark68Net: { quantized: true } }, ({ faceLandmark68Net }) => { describeWithNets('quantized weights', { withFaceLandmark68Net: { quantized: true } }, ({ faceLandmark68Net }) => {
......
import { Point } from '../../../src'; import { Point } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68'; import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets, expectPointClose } from '../../utils'; import { describeWithBackend, describeWithNets, expectPointClose } from '../../utils';
describeWithBackend('faceLandmark68Net, uncompressed', () => { describeWithBackend('faceLandmark68Net, uncompressed', () => {
...@@ -11,10 +11,10 @@ describeWithBackend('faceLandmark68Net, uncompressed', () => { ...@@ -11,10 +11,10 @@ describeWithBackend('faceLandmark68Net, uncompressed', () => {
let faceLandmarkPositionsRect: Point[] let faceLandmarkPositionsRect: Point[]
beforeAll(async () => { beforeAll(async () => {
imgEl1 = await loadImage('test/images/face1.png') imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
imgElRect = await loadImage('test/images/face_rectangular.png') imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1.json') faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1.json')
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json') faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRect.json')
}) })
describeWithNets('uncompressed weights', { withFaceLandmark68Net: { quantized: false } }, ({ faceLandmark68Net }) => { describeWithNets('uncompressed weights', { withFaceLandmark68Net: { quantized: false } }, ({ faceLandmark68Net }) => {
......
...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core'; ...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src'; import { createCanvasFromMedia, IDimensions, isTensor3D, NetInput, Point, TMediaElement, toNetInput } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68'; import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased, expectPointClose } from '../../utils'; import { describeWithBackend, describeWithNets, expectAllTensorsReleased, expectPointClose } from '../../utils';
function getInputDims (input: tf.Tensor | TMediaElement): IDimensions { function getInputDims (input: tf.Tensor | TMediaElement): IDimensions {
...@@ -23,12 +23,12 @@ describeWithBackend('faceLandmark68TinyNet', () => { ...@@ -23,12 +23,12 @@ describeWithBackend('faceLandmark68TinyNet', () => {
let faceLandmarkPositionsRect: Point[] let faceLandmarkPositionsRect: Point[]
beforeAll(async () => { beforeAll(async () => {
imgEl1 = await loadImage('test/images/face1.png') imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
imgEl2 = await loadImage('test/images/face2.png') imgEl2 = await getTestEnv().loadImage('test/images/face2.png')
imgElRect = await loadImage('test/images/face_rectangular.png') imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json') faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json')
faceLandmarkPositions2 = await loadJson<Point[]>('test/data/faceLandmarkPositions2Tiny.json') faceLandmarkPositions2 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions2Tiny.json')
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json') faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json')
}) })
describeWithNets('quantized weights', { withFaceLandmark68TinyNet: { quantized: true } }, ({ faceLandmark68TinyNet }) => { describeWithNets('quantized weights', { withFaceLandmark68TinyNet: { quantized: true } }, ({ faceLandmark68TinyNet }) => {
......
import { Point } from '../../../src'; import { Point } from '../../../src';
import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68'; import { FaceLandmarks68 } from '../../../src/classes/FaceLandmarks68';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithNets, expectPointClose, describeWithBackend } from '../../utils'; import { describeWithBackend, describeWithNets, expectPointClose } from '../../utils';
describeWithBackend('faceLandmark68TinyNet, uncompressed', () => { describeWithBackend('faceLandmark68TinyNet, uncompressed', () => {
...@@ -11,10 +11,10 @@ describeWithBackend('faceLandmark68TinyNet, uncompressed', () => { ...@@ -11,10 +11,10 @@ describeWithBackend('faceLandmark68TinyNet, uncompressed', () => {
let faceLandmarkPositionsRect: Point[] let faceLandmarkPositionsRect: Point[]
beforeAll(async () => { beforeAll(async () => {
imgEl1 = await loadImage('test/images/face1.png') imgEl1 = await getTestEnv().loadImage('test/images/face1.png')
imgElRect = await loadImage('test/images/face_rectangular.png') imgElRect = await getTestEnv().loadImage('test/images/face_rectangular.png')
faceLandmarkPositions1 = await loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json') faceLandmarkPositions1 = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositions1Tiny.json')
faceLandmarkPositionsRect = await loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json') faceLandmarkPositionsRect = await getTestEnv().loadJson<Point[]>('test/data/faceLandmarkPositionsRectTiny.json')
}) })
describeWithNets('uncompressed weights', { withFaceLandmark68TinyNet: { quantized: false } }, ({ faceLandmark68TinyNet }) => { describeWithNets('uncompressed weights', { withFaceLandmark68TinyNet: { quantized: false } }, ({ faceLandmark68TinyNet }) => {
......
...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core'; ...@@ -2,7 +2,7 @@ import * as tf from '@tensorflow/tfjs-core';
import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src'; import { createCanvasFromMedia, NetInput, toNetInput } from '../../../src';
import { euclideanDistance } from '../../../src/euclideanDistance'; import { euclideanDistance } from '../../../src/euclideanDistance';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils'; import { describeWithBackend, describeWithNets, expectAllTensorsReleased } from '../../utils';
describeWithBackend('faceRecognitionNet', () => { describeWithBackend('faceRecognitionNet', () => {
...@@ -15,12 +15,12 @@ describeWithBackend('faceRecognitionNet', () => { ...@@ -15,12 +15,12 @@ describeWithBackend('faceRecognitionNet', () => {
let faceDescriptorRect: number[] let faceDescriptorRect: number[]
beforeAll(async () => { beforeAll(async () => {
imgEl1 = createCanvasFromMedia(await loadImage('test/images/face1.png')) imgEl1 = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face1.png'))
imgEl2 = createCanvasFromMedia(await loadImage('test/images/face2.png')) imgEl2 = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face2.png'))
imgElRect = createCanvasFromMedia(await loadImage('test/images/face_rectangular.png')) imgElRect = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face_rectangular.png'))
faceDescriptor1 = await loadJson<number[]>('test/data/faceDescriptor1.json') faceDescriptor1 = await getTestEnv().loadJson<number[]>('test/data/faceDescriptor1.json')
faceDescriptor2 = await loadJson<number[]>('test/data/faceDescriptor2.json') faceDescriptor2 = await getTestEnv().loadJson<number[]>('test/data/faceDescriptor2.json')
faceDescriptorRect = await loadJson<number[]>('test/data/faceDescriptorRect.json') faceDescriptorRect = await getTestEnv().loadJson<number[]>('test/data/faceDescriptorRect.json')
}) })
describeWithNets('quantized weights', { withFaceRecognitionNet: { quantized: true } }, ({ faceRecognitionNet }) => { describeWithNets('quantized weights', { withFaceRecognitionNet: { quantized: true } }, ({ faceRecognitionNet }) => {
......
import { createCanvasFromMedia } from '../../../src'; import { createCanvasFromMedia } from '../../../src';
import { euclideanDistance } from '../../../src/euclideanDistance'; import { euclideanDistance } from '../../../src/euclideanDistance';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets } from '../../utils'; import { describeWithBackend, describeWithNets } from '../../utils';
describeWithBackend('faceRecognitionNet, uncompressed', () => { describeWithBackend('faceRecognitionNet, uncompressed', () => {
...@@ -11,10 +11,10 @@ describeWithBackend('faceRecognitionNet, uncompressed', () => { ...@@ -11,10 +11,10 @@ describeWithBackend('faceRecognitionNet, uncompressed', () => {
let faceDescriptorRect: number[] let faceDescriptorRect: number[]
beforeAll(async () => { beforeAll(async () => {
imgEl1 = createCanvasFromMedia(await loadImage('test/images/face1.png')) imgEl1 = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face1.png'))
imgElRect = createCanvasFromMedia(await loadImage('test/images/face_rectangular.png')) imgElRect = createCanvasFromMedia(await getTestEnv().loadImage('test/images/face_rectangular.png'))
faceDescriptor1 = await loadJson<number[]>('test/data/faceDescriptor1.json') faceDescriptor1 = await getTestEnv().loadJson<number[]>('test/data/faceDescriptor1.json')
faceDescriptorRect = await loadJson<number[]>('test/data/faceDescriptorRect.json') faceDescriptorRect = await getTestEnv().loadJson<number[]>('test/data/faceDescriptorRect.json')
}) })
describeWithNets('uncompressed weights', { withFaceRecognitionNet: { quantized: false } }, ({ faceRecognitionNet }) => { describeWithNets('uncompressed weights', { withFaceRecognitionNet: { quantized: false } }, ({ faceRecognitionNet }) => {
......
...@@ -3,7 +3,7 @@ import { WithAge } from '../../../src/factories/WithAge'; ...@@ -3,7 +3,7 @@ import { WithAge } from '../../../src/factories/WithAge';
import { WithFaceDetection } from '../../../src/factories/WithFaceDetection'; import { WithFaceDetection } from '../../../src/factories/WithFaceDetection';
import { WithFaceExpressions } from '../../../src/factories/WithFaceExpressions'; import { WithFaceExpressions } from '../../../src/factories/WithFaceExpressions';
import { WithGender } from '../../../src/factories/WithGender'; import { WithGender } from '../../../src/factories/WithGender';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes'; import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
...@@ -49,7 +49,7 @@ describeWithBackend('globalApi', () => { ...@@ -49,7 +49,7 @@ describeWithBackend('globalApi', () => {
let expectedFullFaceDescriptions: ExpectedFullFaceDescription[] let expectedFullFaceDescriptions: ExpectedFullFaceDescription[]
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes)
}) })
......
...@@ -2,7 +2,7 @@ import * as faceapi from '../../../src'; ...@@ -2,7 +2,7 @@ import * as faceapi from '../../../src';
import { WithAge } from '../../../src/factories/WithAge'; import { WithAge } from '../../../src/factories/WithAge';
import { WithFaceExpressions } from '../../../src/factories/WithFaceExpressions'; import { WithFaceExpressions } from '../../../src/factories/WithFaceExpressions';
import { WithGender } from '../../../src/factories/WithGender'; import { WithGender } from '../../../src/factories/WithGender';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes'; import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
...@@ -40,7 +40,7 @@ describeWithBackend('globalApi', () => { ...@@ -40,7 +40,7 @@ describeWithBackend('globalApi', () => {
let expectedFullFaceDescriptions: ExpectedFullFaceDescription[] let expectedFullFaceDescriptions: ExpectedFullFaceDescription[]
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes)
}) })
......
import { IPoint } from '../../../src'; import { IPoint } from '../../../src';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets } from '../../utils'; import { describeWithBackend, describeWithNets } from '../../utils';
import { expectMtcnnResults } from './expectMtcnnResults'; import { expectMtcnnResults } from './expectMtcnnResults';
...@@ -9,8 +9,8 @@ describeWithBackend('mtcnn.forward', () => { ...@@ -9,8 +9,8 @@ describeWithBackend('mtcnn.forward', () => {
let expectedMtcnnLandmarks: IPoint[][] let expectedMtcnnLandmarks: IPoint[][]
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedMtcnnLandmarks = await loadJson<IPoint[][]>('test/data/mtcnnFaceLandmarkPositions.json') expectedMtcnnLandmarks = await getTestEnv().loadJson<IPoint[][]>('test/data/mtcnnFaceLandmarkPositions.json')
}) })
// "quantized" actually means loaded from manifest.json, since there is no quantization applied to the mtcnn model // "quantized" actually means loaded from manifest.json, since there is no quantization applied to the mtcnn model
......
import { IPoint } from '../../../src'; import { IPoint } from '../../../src';
import { loadImage, loadJson } from '../../env'; import { getTestEnv } from '../../env';
import { describeWithBackend, describeWithNets } from '../../utils'; import { describeWithBackend, describeWithNets } from '../../utils';
import { expectMtcnnResults } from './expectMtcnnResults'; import { expectMtcnnResults } from './expectMtcnnResults';
...@@ -9,8 +9,8 @@ describeWithBackend('mtcnn.forward', () => { ...@@ -9,8 +9,8 @@ describeWithBackend('mtcnn.forward', () => {
let expectedMtcnnLandmarks: IPoint[][] let expectedMtcnnLandmarks: IPoint[][]
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedMtcnnLandmarks = await loadJson<IPoint[][]>('test/data/mtcnnFaceLandmarkPositions.json') expectedMtcnnLandmarks = await getTestEnv().loadJson<IPoint[][]>('test/data/mtcnnFaceLandmarkPositions.json')
}) })
describeWithNets('uncompressed weights', { withMtcnn: { quantized: false } }, ({ mtcnn }) => { describeWithNets('uncompressed weights', { withMtcnn: { quantized: false } }, ({ mtcnn }) => {
......
import * as faceapi from '../../../src'; import * as faceapi from '../../../src';
import { MtcnnOptions } from '../../../src/mtcnn/MtcnnOptions'; import { MtcnnOptions } from '../../../src/mtcnn/MtcnnOptions';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { expectFaceDetections } from '../../expectFaceDetections'; import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
...@@ -20,7 +20,7 @@ describeWithBackend('mtcnn', () => { ...@@ -20,7 +20,7 @@ describeWithBackend('mtcnn', () => {
const expectedScores = [1.0, 1.0, 1.0, 1.0, 0.99, 0.99] const expectedScores = [1.0, 1.0, 1.0, 1.0, 0.99, 0.99]
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedMtcnnBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedMtcnnBoxes)
}) })
......
import * as faceapi from '../../../src'; import * as faceapi from '../../../src';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { expectFaceDetections } from '../../expectFaceDetections'; import { expectFaceDetections } from '../../expectFaceDetections';
import { describeWithBackend, describeWithNets } from '../../utils'; import { describeWithBackend, describeWithNets } from '../../utils';
import { expectedSsdBoxes } from './expectedBoxes'; import { expectedSsdBoxes } from './expectedBoxes';
...@@ -9,7 +9,7 @@ describeWithBackend('ssdMobilenetv1.locateFaces', () => { ...@@ -9,7 +9,7 @@ describeWithBackend('ssdMobilenetv1.locateFaces', () => {
let imgEl: HTMLImageElement let imgEl: HTMLImageElement
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
}) })
describeWithNets('quantized weights', { withSsdMobilenetv1: { quantized: true } }, ({ ssdMobilenetv1 }) => { describeWithNets('quantized weights', { withSsdMobilenetv1: { quantized: true } }, ({ ssdMobilenetv1 }) => {
......
import * as faceapi from '../../../src'; import * as faceapi from '../../../src';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { expectFaceDetections } from '../../expectFaceDetections'; import { expectFaceDetections } from '../../expectFaceDetections';
import { describeWithBackend, describeWithNets } from '../../utils'; import { describeWithBackend, describeWithNets } from '../../utils';
import { expectedSsdBoxes } from './expectedBoxes'; import { expectedSsdBoxes } from './expectedBoxes';
...@@ -9,7 +9,7 @@ describeWithBackend('ssdMobilenetv1.locateFaces, uncompressed', () => { ...@@ -9,7 +9,7 @@ describeWithBackend('ssdMobilenetv1.locateFaces, uncompressed', () => {
let imgEl: HTMLImageElement let imgEl: HTMLImageElement
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
}) })
describeWithNets('uncompressed weights', { withSsdMobilenetv1: { quantized: false } }, ({ ssdMobilenetv1 }) => { describeWithNets('uncompressed weights', { withSsdMobilenetv1: { quantized: false } }, ({ ssdMobilenetv1 }) => {
......
...@@ -5,8 +5,8 @@ import { expectFaceDetections } from '../../expectFaceDetections'; ...@@ -5,8 +5,8 @@ import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectedSsdBoxes } from './expectedBoxes'; import { expectedSsdBoxes } from './expectedBoxes';
import { loadImage } from '../../env';
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { getTestEnv } from '../../env';
describe('ssdMobilenetv1 - node', () => { describe('ssdMobilenetv1 - node', () => {
...@@ -15,7 +15,7 @@ describe('ssdMobilenetv1 - node', () => { ...@@ -15,7 +15,7 @@ describe('ssdMobilenetv1 - node', () => {
const expectedScores = [0.54, 0.81, 0.97, 0.88, 0.84, 0.61] const expectedScores = [0.54, 0.81, 0.97, 0.88, 0.84, 0.61]
beforeAll(async () => { beforeAll(async () => {
imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await loadImage('test/images/faces.jpg'))) imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await getTestEnv().loadImage('test/images/faces.jpg')))
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedSsdBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedSsdBoxes)
}) })
...@@ -88,7 +88,7 @@ describe('ssdMobilenetv1 - node', () => { ...@@ -88,7 +88,7 @@ describe('ssdMobilenetv1 - node', () => {
maxLandmarksDelta: 4, maxLandmarksDelta: 4,
maxDescriptorDelta: 0.2 maxDescriptorDelta: 0.2
} }
expect(!!result).toBeTruthy() expect(!!result).toBeTruthy()
expectFullFaceDescriptions( expectFullFaceDescriptions(
result ? [result] : [], result ? [result] : [],
......
...@@ -5,7 +5,7 @@ import { expectFaceDetections } from '../../expectFaceDetections'; ...@@ -5,7 +5,7 @@ import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectedSsdBoxes } from './expectedBoxes'; import { expectedSsdBoxes } from './expectedBoxes';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
describeWithBackend('ssdMobilenetv1', () => { describeWithBackend('ssdMobilenetv1', () => {
...@@ -14,7 +14,7 @@ describeWithBackend('ssdMobilenetv1', () => { ...@@ -14,7 +14,7 @@ describeWithBackend('ssdMobilenetv1', () => {
const expectedScores = [0.54, 0.81, 0.97, 0.88, 0.84, 0.61] const expectedScores = [0.54, 0.81, 0.97, 0.88, 0.84, 0.61]
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedSsdBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedSsdBoxes)
}) })
......
import * as faceapi from '../../../src'; import * as faceapi from '../../../src';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes';
import { expectFaceDetections } from '../../expectFaceDetections'; import { expectFaceDetections } from '../../expectFaceDetections';
import { describeWithBackend, describeWithNets } from '../../utils'; import { describeWithBackend, describeWithNets } from '../../utils';
import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes';
describeWithBackend('tinyFaceDetector.locateFaces', () => { describeWithBackend('tinyFaceDetector.locateFaces', () => {
let imgEl: HTMLImageElement let imgEl: HTMLImageElement
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
}) })
describeWithNets('quantized weights', { withTinyFaceDetector: { quantized: true } }, ({ tinyFaceDetector }) => { describeWithNets('quantized weights', { withTinyFaceDetector: { quantized: true } }, ({ tinyFaceDetector }) => {
......
...@@ -5,8 +5,8 @@ import { expectFaceDetections } from '../../expectFaceDetections'; ...@@ -5,8 +5,8 @@ import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes'; import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes';
import { loadImage } from '../../env';
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { getTestEnv } from '../../env';
describe('tinyFaceDetector - node', () => { describe('tinyFaceDetector - node', () => {
...@@ -15,7 +15,7 @@ describe('tinyFaceDetector - node', () => { ...@@ -15,7 +15,7 @@ describe('tinyFaceDetector - node', () => {
const expectedScores = [0.7, 0.82, 0.93, 0.86, 0.79, 0.84] const expectedScores = [0.7, 0.82, 0.93, 0.86, 0.79, 0.84]
beforeAll(async () => { beforeAll(async () => {
imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await loadImage('test/images/faces.jpg'))) imgTensor = tf.browser.fromPixels(createCanvasFromMedia(await getTestEnv().loadImage('test/images/faces.jpg')))
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes)
}) })
......
...@@ -5,7 +5,7 @@ import { expectFaceDetections } from '../../expectFaceDetections'; ...@@ -5,7 +5,7 @@ import { expectFaceDetections } from '../../expectFaceDetections';
import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions'; import { expectFullFaceDescriptions } from '../../expectFullFaceDescriptions';
import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks'; import { expectFaceDetectionsWithLandmarks } from '../../expectFaceDetectionsWithLandmarks';
import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes'; import { expectedTinyFaceDetectorBoxes } from '../../expectedTinyFaceDetectorBoxes';
import { loadImage } from '../../env'; import { getTestEnv } from '../../env';
describeWithBackend('tinyFaceDetector', () => { describeWithBackend('tinyFaceDetector', () => {
...@@ -20,7 +20,7 @@ describeWithBackend('tinyFaceDetector', () => { ...@@ -20,7 +20,7 @@ describeWithBackend('tinyFaceDetector', () => {
} }
beforeAll(async () => { beforeAll(async () => {
imgEl = await loadImage('test/images/faces.jpg') imgEl = await getTestEnv().loadImage('test/images/faces.jpg')
expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes) expectedFullFaceDescriptions = await assembleExpectedFullFaceDescriptions(expectedTinyFaceDetectorBoxes)
}) })
......
...@@ -10,7 +10,7 @@ import { FaceLandmark68Net } from '../src/faceLandmarkNet/FaceLandmark68Net'; ...@@ -10,7 +10,7 @@ import { FaceLandmark68Net } from '../src/faceLandmarkNet/FaceLandmark68Net';
import { FaceLandmark68TinyNet } from '../src/faceLandmarkNet/FaceLandmark68TinyNet'; import { FaceLandmark68TinyNet } from '../src/faceLandmarkNet/FaceLandmark68TinyNet';
import { SsdMobilenetv1 } from '../src/ssdMobilenetv1/SsdMobilenetv1'; import { SsdMobilenetv1 } from '../src/ssdMobilenetv1/SsdMobilenetv1';
import { TinyFaceDetector } from '../src/tinyFaceDetector/TinyFaceDetector'; import { TinyFaceDetector } from '../src/tinyFaceDetector/TinyFaceDetector';
import { initNet, loadJson } from './env'; import { getTestEnv } from './env';
export function expectMaxDelta(val1: number, val2: number, maxDelta: number) { export function expectMaxDelta(val1: number, val2: number, maxDelta: number) {
expect(Math.abs(val1 - val2)).toBeLessThanOrEqual(maxDelta) expect(Math.abs(val1 - val2)).toBeLessThanOrEqual(maxDelta)
...@@ -93,8 +93,8 @@ export async function assembleExpectedFullFaceDescriptions( ...@@ -93,8 +93,8 @@ export async function assembleExpectedFullFaceDescriptions(
detections: IRect[], detections: IRect[],
landmarksFile: string = 'facesFaceLandmarkPositions.json' landmarksFile: string = 'facesFaceLandmarkPositions.json'
): Promise<ExpectedFullFaceDescription[]> { ): Promise<ExpectedFullFaceDescription[]> {
const landmarks = await loadJson<any[]>(`test/data/${landmarksFile}`) const landmarks = await getTestEnv().loadJson<any[]>(`test/data/${landmarksFile}`)
const descriptors = await loadJson<any[]>('test/data/facesFaceDescriptors.json') const descriptors = await getTestEnv().loadJson<any[]>('test/data/facesFaceDescriptors.json')
return detections.map((detection, i) => ({ return detections.map((detection, i) => ({
detection, detection,
...@@ -211,63 +211,63 @@ export function describeWithNets( ...@@ -211,63 +211,63 @@ export function describeWithNets(
} = options } = options
if (withSsdMobilenetv1 || withAllFacesSsdMobilenetv1) { if (withSsdMobilenetv1 || withAllFacesSsdMobilenetv1) {
await initNet<SsdMobilenetv1>( await getTestEnv().initNet<SsdMobilenetv1>(
ssdMobilenetv1, ssdMobilenetv1,
!!withSsdMobilenetv1 && !withSsdMobilenetv1.quantized && 'ssd_mobilenetv1_model.weights' !!withSsdMobilenetv1 && !withSsdMobilenetv1.quantized && 'ssd_mobilenetv1_model.weights'
) )
} }
if (withTinyFaceDetector || withAllFacesTinyFaceDetector) { if (withTinyFaceDetector || withAllFacesTinyFaceDetector) {
await initNet<TinyFaceDetector>( await getTestEnv().initNet<TinyFaceDetector>(
tinyFaceDetector, tinyFaceDetector,
!!withTinyFaceDetector && !withTinyFaceDetector.quantized && 'tiny_face_detector_model.weights' !!withTinyFaceDetector && !withTinyFaceDetector.quantized && 'tiny_face_detector_model.weights'
) )
} }
if (withFaceLandmark68Net || withAllFacesSsdMobilenetv1 || withAllFacesTinyFaceDetector|| withAllFacesMtcnn || withAllFacesTinyYolov2) { if (withFaceLandmark68Net || withAllFacesSsdMobilenetv1 || withAllFacesTinyFaceDetector|| withAllFacesMtcnn || withAllFacesTinyYolov2) {
await initNet<FaceLandmark68Net>( await getTestEnv().initNet<FaceLandmark68Net>(
faceLandmark68Net, faceLandmark68Net,
!!withFaceLandmark68Net && !withFaceLandmark68Net.quantized && 'face_landmark_68_model.weights' !!withFaceLandmark68Net && !withFaceLandmark68Net.quantized && 'face_landmark_68_model.weights'
) )
} }
if (withFaceLandmark68TinyNet) { if (withFaceLandmark68TinyNet) {
await initNet<FaceLandmark68TinyNet>( await getTestEnv().initNet<FaceLandmark68TinyNet>(
faceLandmark68TinyNet, faceLandmark68TinyNet,
!!withFaceLandmark68TinyNet && !withFaceLandmark68TinyNet.quantized && 'face_landmark_68_tiny_model.weights' !!withFaceLandmark68TinyNet && !withFaceLandmark68TinyNet.quantized && 'face_landmark_68_tiny_model.weights'
) )
} }
if (withFaceRecognitionNet || withAllFacesSsdMobilenetv1 || withAllFacesTinyFaceDetector|| withAllFacesMtcnn || withAllFacesTinyYolov2) { if (withFaceRecognitionNet || withAllFacesSsdMobilenetv1 || withAllFacesTinyFaceDetector|| withAllFacesMtcnn || withAllFacesTinyYolov2) {
await initNet<FaceRecognitionNet>( await getTestEnv().initNet<FaceRecognitionNet>(
faceRecognitionNet, faceRecognitionNet,
!!withFaceRecognitionNet && !withFaceRecognitionNet.quantized && 'face_recognition_model.weights' !!withFaceRecognitionNet && !withFaceRecognitionNet.quantized && 'face_recognition_model.weights'
) )
} }
if (withMtcnn || withAllFacesMtcnn) { if (withMtcnn || withAllFacesMtcnn) {
await initNet<Mtcnn>( await getTestEnv().initNet<Mtcnn>(
mtcnn, mtcnn,
!!withMtcnn && !withMtcnn.quantized && 'mtcnn_model.weights' !!withMtcnn && !withMtcnn.quantized && 'mtcnn_model.weights'
) )
} }
if (withFaceExpressionNet) { if (withFaceExpressionNet) {
await initNet<FaceExpressionNet>( await getTestEnv().initNet<FaceExpressionNet>(
faceExpressionNet, faceExpressionNet,
!!withFaceExpressionNet && !withFaceExpressionNet.quantized && 'face_expression_model.weights' !!withFaceExpressionNet && !withFaceExpressionNet.quantized && 'face_expression_model.weights'
) )
} }
if (withAgeGenderNet) { if (withAgeGenderNet) {
await initNet<AgeGenderNet>( await getTestEnv().initNet<AgeGenderNet>(
ageGenderNet, ageGenderNet,
!!withAgeGenderNet && !withAgeGenderNet.quantized && 'age_gender_model.weights' !!withAgeGenderNet && !withAgeGenderNet.quantized && 'age_gender_model.weights'
) )
} }
if (withTinyYolov2 || withAllFacesTinyYolov2) { if (withTinyYolov2 || withAllFacesTinyYolov2) {
await initNet<TinyYolov2>( await getTestEnv().initNet<TinyYolov2>(
tinyYolov2, tinyYolov2,
!!withTinyYolov2 && !withTinyYolov2.quantized && 'tiny_yolov2_model.weights', !!withTinyYolov2 && !withTinyYolov2.quantized && 'tiny_yolov2_model.weights',
true true
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"suppressImplicitAnyIndexErrors": true, "suppressImplicitAnyIndexErrors": true,
"strictNullChecks": true, "strictNullChecks": true,
"importHelpers": true, "importHelpers": true,
"skipLibCheck": true,
"outDir": "build/commonjs", "outDir": "build/commonjs",
"module": "commonjs", "module": "commonjs",
"target": "es5", "target": "es5",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment