Commit bbc0785a by vincent

remove tfjs-tiny-yolov2 dependency + bump tfjs-image-recognition-base + update dev dependencies

parent 8259275e
...@@ -89,20 +89,21 @@ ...@@ -89,20 +89,21 @@
"dev": true "dev": true
}, },
"@tensorflow/tfjs": { "@tensorflow/tfjs": {
"version": "0.13.5", "version": "0.14.2",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-0.13.5.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-0.14.2.tgz",
"integrity": "sha512-a0sbY2IShg+hAD+Es8fy1Ey/afoks4fxSi+PVSZc1st51brCnO3qBbqwDDctRNwx/EOfAroS8IWIKgaWTpsflg==", "integrity": "sha512-d+kBdhn3L/BOIwwc44V1lUrs0O5s49ujhYXVHT9Hs6y3yq+OqPK10am16H1fNcxeMn12/3gGphebglObTD0/Sg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs-converter": "0.6.7", "@tensorflow/tfjs-converter": "0.7.2",
"@tensorflow/tfjs-core": "0.13.11", "@tensorflow/tfjs-core": "0.14.5",
"@tensorflow/tfjs-layers": "0.8.5" "@tensorflow/tfjs-data": "0.1.7",
"@tensorflow/tfjs-layers": "0.9.2"
}, },
"dependencies": { "dependencies": {
"@tensorflow/tfjs-core": { "@tensorflow/tfjs-core": {
"version": "0.13.11", "version": "0.14.5",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-0.13.11.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-0.14.5.tgz",
"integrity": "sha512-jHTD7LbpC3JpsP2mBVD3ZiYV+Xr/l91zpA5HpQVnbdNat5J/IJHabeYwYtukiVyN4amHqyFvGFtX/gjLD82rXg==", "integrity": "sha512-CSUgKuC17J1Ylr1s6iD1k2/tJr9lD16sUEjtzJbtiuTYCELOwujGK/1htunA7o3BwLuU7aqEI92MoKElEKa7qA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/seedrandom": "2.4.27", "@types/seedrandom": "2.4.27",
...@@ -114,9 +115,9 @@ ...@@ -114,9 +115,9 @@
} }
}, },
"@tensorflow/tfjs-converter": { "@tensorflow/tfjs-converter": {
"version": "0.6.7", "version": "0.7.2",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.6.7.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-0.7.2.tgz",
"integrity": "sha512-7hsbLbx0KM1Bew00kVoslrnNMOUTyP9NZLDl03cEkrCbEYsaG7jouLxHVz+B0A6/ZPE1N40xmD2JRnu54VKT8g==", "integrity": "sha512-m46mtaF57x2NcxlNUKdJOCUp3ZSJU9bp9MzyEQ0Iz1bW2kKIxx1DDRjuP0fAeHX5H5Mh/tWIHB9yK6NwLz+aQQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/long": "~3.0.32", "@types/long": "~3.0.32",
...@@ -134,21 +135,42 @@ ...@@ -134,21 +135,42 @@
"seedrandom": "2.4.3" "seedrandom": "2.4.3"
} }
}, },
"@tensorflow/tfjs-data": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-0.1.7.tgz",
"integrity": "sha512-RENjeBdBLq7GS9594kQx2GbM0WQV16VfxzzB0j2sq5vJh9GZQi2DB5Emq2LqZWs5rSeh7PDHZylGOn/ve6f8PA==",
"dev": true,
"requires": {
"@types/node-fetch": "^2.1.2",
"node-fetch": "~2.1.2",
"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=",
"dev": true
}
}
},
"@tensorflow/tfjs-layers": { "@tensorflow/tfjs-layers": {
"version": "0.8.5", "version": "0.9.2",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-0.8.5.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-0.9.2.tgz",
"integrity": "sha512-yQoVyh5q3Hh3YmLXGvKAkgsLVFe0VQBRmgVxJkxzzWhCB+NrjUXU/IzHzCRoBcgcXKZTY9/XE5IcvPmJw9cIXw==", "integrity": "sha512-peB824cEXRBy5IgZPIodd8zpQ/54VGOYbR+zY+Q1Le7v3Np05EoDcL8Z98MtpBHo6jOM7b/3Lf2zjfJVv2qxJA==",
"dev": true "dev": true
}, },
"@tensorflow/tfjs-node": { "@tensorflow/tfjs-node": {
"version": "0.1.21", "version": "0.2.3",
"resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-0.1.21.tgz", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-0.2.3.tgz",
"integrity": "sha512-Mtq55vrICyvQo4WY/ib3ZzaJhIzBH/EKKjQZeavdepPTE1hIcW4dwMvU3WQpR55Jqovz0s4xSpnXJx7NEwZQkA==", "integrity": "sha512-+VXi6GLsVXXido2DhzK2e1Y/qM9MvQNbbA00TFgGuVbGMmeX0ey97t6W23dT8dnDVPZprC2XSFumcpRoKe8ENg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@tensorflow/tfjs": "~0.13.5", "@tensorflow/tfjs": "~0.14.2",
"adm-zip": "^0.4.11", "adm-zip": "^0.4.11",
"bindings": "~1.3.0", "bindings": "~1.3.0",
"https-proxy-agent": "^2.2.1",
"node-fetch": "^2.3.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"
...@@ -161,9 +183,9 @@ ...@@ -161,9 +183,9 @@
"dev": true "dev": true
}, },
"@types/jasmine": { "@types/jasmine": {
"version": "2.8.9", "version": "3.3.8",
"resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.9.tgz", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.8.tgz",
"integrity": "sha512-8dPZwjosElZOGGYw1nwTvOEMof4gjwAWNFS93nBI091BoEfd5drnHOLRMiRF/LOPuMTn5LgEdv0bTUO8QFVuHQ==", "integrity": "sha512-BaOFpaddRVV8qykJoWHrHtamml880oh0+DIZWbtJgx0pu+KhDF1gER5hSfCIfzyMrbjMuYFnLUfyo1l0JUVU3Q==",
"dev": true "dev": true
}, },
"@types/long": { "@types/long": {
...@@ -173,11 +195,20 @@ ...@@ -173,11 +195,20 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "10.12.12", "version": "10.12.18",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.12.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
"integrity": "sha512-Pr+6JRiKkfsFvmU/LK68oBRCQeEg36TyAbPhc2xpez24OOZZCuoIhWGTd39VZy6nGafSbxzGouFPTFD/rR1A0A==", "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==",
"dev": true "dev": true
}, },
"@types/node-fetch": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.1.4.tgz",
"integrity": "sha512-tR1ekaXUGpmzOcDXWU9BW73YfA2/VW1DF1FH+wlJ82BbCSnWTbdX+JkqWQXWKIGsFPnPsYadbXfNgz28g+ccWg==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/seedrandom": { "@types/seedrandom": {
"version": "2.4.27", "version": "2.4.27",
"resolved": "http://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", "resolved": "http://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz",
...@@ -227,26 +258,13 @@ ...@@ -227,26 +258,13 @@
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
"dev": true "dev": true
}, },
"align-text": { "agent-base": {
"version": "0.1.4", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
"dev": true, "dev": true,
"requires": { "requires": {
"kind-of": "^3.0.2", "es6-promisify": "^5.0.0"
"longest": "^1.0.1",
"repeat-string": "^1.5.2"
},
"dependencies": {
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
}
} }
}, },
"amdefine": { "amdefine": {
...@@ -320,6 +338,12 @@ ...@@ -320,6 +338,12 @@
"readable-stream": "^2.0.6" "readable-stream": "^2.0.6"
} }
}, },
"arg": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
"integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==",
"dev": true
},
"argparse": { "argparse": {
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
...@@ -371,12 +395,6 @@ ...@@ -371,12 +395,6 @@
"integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
"dev": true "dev": true
}, },
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
"dev": true
},
"asn1.js": { "asn1.js": {
"version": "4.10.1", "version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
...@@ -542,9 +560,9 @@ ...@@ -542,9 +560,9 @@
} }
}, },
"binary-extensions": { "binary-extensions": {
"version": "1.11.0", "version": "1.12.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
"integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
"dev": true "dev": true
}, },
"bindings": { "bindings": {
...@@ -554,15 +572,15 @@ ...@@ -554,15 +572,15 @@
"dev": true "dev": true
}, },
"blob": { "blob": {
"version": "0.0.4", "version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
"integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==",
"dev": true "dev": true
}, },
"bluebird": { "bluebird": {
"version": "3.5.1", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
"dev": true "dev": true
}, },
"bn.js": { "bn.js": {
...@@ -635,20 +653,12 @@ ...@@ -635,20 +653,12 @@
"dev": true "dev": true
}, },
"browser-resolve": { "browser-resolve": {
"version": "1.11.2", "version": "1.11.3",
"resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
"integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"resolve": "1.1.7" "resolve": "1.1.7"
},
"dependencies": {
"resolve": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
"integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
"dev": true
}
} }
}, },
"browserify-aes": { "browserify-aes": {
...@@ -677,14 +687,15 @@ ...@@ -677,14 +687,15 @@
} }
}, },
"browserify-des": { "browserify-des": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
"integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
"dev": true, "dev": true,
"requires": { "requires": {
"cipher-base": "^1.0.1", "cipher-base": "^1.0.1",
"des.js": "^1.0.0", "des.js": "^1.0.0",
"inherits": "^2.0.1" "inherits": "^2.0.1",
"safe-buffer": "^5.1.2"
} }
}, },
"browserify-rsa": { "browserify-rsa": {
...@@ -722,9 +733,9 @@ ...@@ -722,9 +733,9 @@
} }
}, },
"buffer": { "buffer": {
"version": "5.1.0", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
"integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
"dev": true, "dev": true,
"requires": { "requires": {
"base64-js": "^1.0.2", "base64-js": "^1.0.2",
...@@ -807,11 +818,10 @@ ...@@ -807,11 +818,10 @@
"dev": true "dev": true
}, },
"camelcase": { "camelcase": {
"version": "1.2.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"dev": true, "dev": true
"optional": true
}, },
"camelcase-keys": { "camelcase-keys": {
"version": "2.1.0", "version": "2.1.0",
...@@ -821,14 +831,6 @@ ...@@ -821,14 +831,6 @@
"requires": { "requires": {
"camelcase": "^2.0.0", "camelcase": "^2.0.0",
"map-obj": "^1.0.0" "map-obj": "^1.0.0"
},
"dependencies": {
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"dev": true
}
} }
}, },
"canvas": { "canvas": {
...@@ -841,26 +843,32 @@ ...@@ -841,26 +843,32 @@
"node-pre-gyp": "^0.11.0" "node-pre-gyp": "^0.11.0"
} }
}, },
"center-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"dev": true,
"optional": true,
"requires": {
"align-text": "^0.1.3",
"lazy-cache": "^1.0.3"
}
},
"chalk": { "chalk": {
"version": "2.4.1", "version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-styles": "^3.2.1", "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5", "escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0" "supports-color": "^5.3.0"
},
"dependencies": {
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
} }
}, },
"chokidar": { "chokidar": {
...@@ -901,9 +909,9 @@ ...@@ -901,9 +909,9 @@
} }
}, },
"circular-json": { "circular-json": {
"version": "0.5.5", "version": "0.5.9",
"resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.5.tgz", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
"integrity": "sha512-13YaR6kiz0kBNmIVM87Io8Hp7bWOo4r61vkEANy8iH9R9bc6avud/1FT0SBpqR1RpIQADOh/Q+yHZDA1iL6ysA==", "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==",
"dev": true "dev": true
}, },
"class-utils": { "class-utils": {
...@@ -929,27 +937,6 @@ ...@@ -929,27 +937,6 @@
} }
} }
}, },
"cliui": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"dev": true,
"optional": true,
"requires": {
"center-align": "^0.1.1",
"right-align": "^0.1.1",
"wordwrap": "0.0.2"
},
"dependencies": {
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
"dev": true,
"optional": true
}
}
},
"clone": { "clone": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
...@@ -973,24 +960,24 @@ ...@@ -973,24 +960,24 @@
} }
}, },
"color-convert": { "color-convert": {
"version": "1.9.2", "version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true, "dev": true,
"requires": { "requires": {
"color-name": "1.1.1" "color-name": "1.1.3"
} }
}, },
"color-name": { "color-name": {
"version": "1.1.1", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true "dev": true
}, },
"colors": { "colors": {
"version": "1.3.2", "version": "1.3.3",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
"integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
"dev": true "dev": true
}, },
"combine-lists": { "combine-lists": {
...@@ -1098,10 +1085,13 @@ ...@@ -1098,10 +1085,13 @@
"dev": true "dev": true
}, },
"convert-source-map": { "convert-source-map": {
"version": "1.5.1", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
"integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
"dev": true "dev": true,
"requires": {
"safe-buffer": "~5.1.1"
}
}, },
"cookie": { "cookie": {
"version": "0.3.1", "version": "0.3.1",
...@@ -1116,9 +1106,9 @@ ...@@ -1116,9 +1106,9 @@
"dev": true "dev": true
}, },
"core-js": { "core-js": {
"version": "2.5.7", "version": "2.6.3",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz",
"integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==",
"dev": true "dev": true
}, },
"core-util-is": { "core-util-is": {
...@@ -1379,9 +1369,9 @@ ...@@ -1379,9 +1369,9 @@
"dev": true "dev": true
}, },
"elliptic": { "elliptic": {
"version": "6.4.0", "version": "6.4.1",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
"integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"bn.js": "^4.4.0", "bn.js": "^4.4.0",
...@@ -1400,9 +1390,9 @@ ...@@ -1400,9 +1390,9 @@
"dev": true "dev": true
}, },
"engine.io": { "engine.io": {
"version": "3.2.0", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
"integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
"dev": true, "dev": true,
"requires": { "requires": {
"accepts": "~1.3.4", "accepts": "~1.3.4",
...@@ -1455,15 +1445,15 @@ ...@@ -1455,15 +1445,15 @@
} }
}, },
"engine.io-parser": { "engine.io-parser": {
"version": "2.1.2", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
"integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
"dev": true, "dev": true,
"requires": { "requires": {
"after": "0.8.2", "after": "0.8.2",
"arraybuffer.slice": "~0.0.7", "arraybuffer.slice": "~0.0.7",
"base64-arraybuffer": "0.1.5", "base64-arraybuffer": "0.1.5",
"blob": "0.0.4", "blob": "0.0.5",
"has-binary2": "~1.0.2" "has-binary2": "~1.0.2"
} }
}, },
...@@ -1474,14 +1464,29 @@ ...@@ -1474,14 +1464,29 @@
"dev": true "dev": true
}, },
"error-ex": { "error-ex": {
"version": "1.3.1", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true, "dev": true,
"requires": { "requires": {
"is-arrayish": "^0.2.1" "is-arrayish": "^0.2.1"
} }
}, },
"es6-promise": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
"integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
"dev": true
},
"es6-promisify": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
"dev": true,
"requires": {
"es6-promise": "^4.0.3"
}
},
"escape-html": { "escape-html": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
...@@ -1494,6 +1499,43 @@ ...@@ -1494,6 +1499,43 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
"dev": true "dev": true
}, },
"escodegen": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
"integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
"dev": true,
"requires": {
"esprima": "^2.7.1",
"estraverse": "^1.9.1",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.2.0"
},
"dependencies": {
"source-map": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
"integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
"dev": true,
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
}
}
},
"esprima": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
},
"estraverse": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
"integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
"dev": true
},
"estree-walker": { "estree-walker": {
"version": "0.5.2", "version": "0.5.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
...@@ -1775,13 +1817,19 @@ ...@@ -1775,13 +1817,19 @@
"pinkie-promise": "^2.0.0" "pinkie-promise": "^2.0.0"
} }
}, },
"flatted": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
"integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
"dev": true
},
"follow-redirects": { "follow-redirects": {
"version": "1.5.7", "version": "1.6.1",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.7.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz",
"integrity": "sha512-NONJVIFiX7Z8k2WxfqBjtwqMifx7X42ORLFrOZ2LTKGj71G3C0kfdyTqGqr8fx5zSX6Foo/D95dgGWbPUiwnew==", "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^3.1.0" "debug": "=3.1.0"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
...@@ -1829,9 +1877,9 @@ ...@@ -1829,9 +1877,9 @@
} }
}, },
"fs-extra": { "fs-extra": {
"version": "5.0.0", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true, "dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
...@@ -1855,9 +1903,9 @@ ...@@ -1855,9 +1903,9 @@
"dev": true "dev": true
}, },
"fsevents": { "fsevents": {
"version": "1.2.4", "version": "1.2.7",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
"integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
...@@ -1883,7 +1931,7 @@ ...@@ -1883,7 +1931,7 @@
"optional": true "optional": true
}, },
"are-we-there-yet": { "are-we-there-yet": {
"version": "1.1.4", "version": "1.1.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
...@@ -1907,7 +1955,7 @@ ...@@ -1907,7 +1955,7 @@
} }
}, },
"chownr": { "chownr": {
"version": "1.0.1", "version": "1.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true "optional": true
...@@ -1943,7 +1991,7 @@ ...@@ -1943,7 +1991,7 @@
} }
}, },
"deep-extend": { "deep-extend": {
"version": "0.5.1", "version": "0.6.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true "optional": true
...@@ -1992,7 +2040,7 @@ ...@@ -1992,7 +2040,7 @@
} }
}, },
"glob": { "glob": {
"version": "7.1.2", "version": "7.1.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
...@@ -2012,12 +2060,12 @@ ...@@ -2012,12 +2060,12 @@
"optional": true "optional": true
}, },
"iconv-lite": { "iconv-lite": {
"version": "0.4.21", "version": "0.4.24",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"safer-buffer": "^2.1.0" "safer-buffer": ">= 2.1.2 < 3"
} }
}, },
"ignore-walk": { "ignore-walk": {
...@@ -2078,16 +2126,16 @@ ...@@ -2078,16 +2126,16 @@
"dev": true "dev": true
}, },
"minipass": { "minipass": {
"version": "2.2.4", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"requires": { "requires": {
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
} }
}, },
"minizlib": { "minizlib": {
"version": "1.1.0", "version": "1.2.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
...@@ -2110,7 +2158,7 @@ ...@@ -2110,7 +2158,7 @@
"optional": true "optional": true
}, },
"needle": { "needle": {
"version": "2.2.0", "version": "2.2.4",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
...@@ -2121,18 +2169,18 @@ ...@@ -2121,18 +2169,18 @@
} }
}, },
"node-pre-gyp": { "node-pre-gyp": {
"version": "0.10.0", "version": "0.10.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"detect-libc": "^1.0.2", "detect-libc": "^1.0.2",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"needle": "^2.2.0", "needle": "^2.2.1",
"nopt": "^4.0.1", "nopt": "^4.0.1",
"npm-packlist": "^1.1.6", "npm-packlist": "^1.1.6",
"npmlog": "^4.0.2", "npmlog": "^4.0.2",
"rc": "^1.1.7", "rc": "^1.2.7",
"rimraf": "^2.6.1", "rimraf": "^2.6.1",
"semver": "^5.3.0", "semver": "^5.3.0",
"tar": "^4" "tar": "^4"
...@@ -2149,13 +2197,13 @@ ...@@ -2149,13 +2197,13 @@
} }
}, },
"npm-bundled": { "npm-bundled": {
"version": "1.0.3", "version": "1.0.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true "optional": true
}, },
"npm-packlist": { "npm-packlist": {
"version": "1.1.10", "version": "1.2.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
...@@ -2230,12 +2278,12 @@ ...@@ -2230,12 +2278,12 @@
"optional": true "optional": true
}, },
"rc": { "rc": {
"version": "1.2.7", "version": "1.2.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"deep-extend": "^0.5.1", "deep-extend": "^0.6.0",
"ini": "~1.3.0", "ini": "~1.3.0",
"minimist": "^1.2.0", "minimist": "^1.2.0",
"strip-json-comments": "~2.0.1" "strip-json-comments": "~2.0.1"
...@@ -2265,16 +2313,16 @@ ...@@ -2265,16 +2313,16 @@
} }
}, },
"rimraf": { "rimraf": {
"version": "2.6.2", "version": "2.6.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"glob": "^7.0.5" "glob": "^7.1.3"
} }
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true "dev": true
}, },
...@@ -2291,7 +2339,7 @@ ...@@ -2291,7 +2339,7 @@
"optional": true "optional": true
}, },
"semver": { "semver": {
"version": "5.5.0", "version": "5.6.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true "optional": true
...@@ -2342,17 +2390,17 @@ ...@@ -2342,17 +2390,17 @@
"optional": true "optional": true
}, },
"tar": { "tar": {
"version": "4.4.1", "version": "4.4.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"chownr": "^1.0.1", "chownr": "^1.1.1",
"fs-minipass": "^1.2.5", "fs-minipass": "^1.2.5",
"minipass": "^2.2.4", "minipass": "^2.3.4",
"minizlib": "^1.1.0", "minizlib": "^1.1.1",
"mkdirp": "^0.5.0", "mkdirp": "^0.5.0",
"safe-buffer": "^5.1.1", "safe-buffer": "^5.1.2",
"yallist": "^3.0.2" "yallist": "^3.0.2"
} }
}, },
...@@ -2363,12 +2411,12 @@ ...@@ -2363,12 +2411,12 @@
"optional": true "optional": true
}, },
"wide-align": { "wide-align": {
"version": "1.1.2", "version": "1.1.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true, "optional": true,
"requires": { "requires": {
"string-width": "^1.0.2" "string-width": "^1.0.2 || 2"
} }
}, },
"wrappy": { "wrappy": {
...@@ -2377,7 +2425,7 @@ ...@@ -2377,7 +2425,7 @@
"dev": true "dev": true
}, },
"yallist": { "yallist": {
"version": "3.0.2", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true "dev": true
} }
...@@ -2489,53 +2537,15 @@ ...@@ -2489,53 +2537,15 @@
"dev": true "dev": true
}, },
"handlebars": { "handlebars": {
"version": "4.0.11", "version": "4.0.12",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
"dev": true, "dev": true,
"requires": { "requires": {
"async": "^1.4.0", "async": "^2.5.0",
"optimist": "^0.6.1", "optimist": "^0.6.1",
"source-map": "^0.4.4", "source-map": "^0.6.1",
"uglify-js": "^2.6" "uglify-js": "^3.1.4"
},
"dependencies": {
"async": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
"dev": true
},
"source-map": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
"amdefine": ">=0.0.4"
}
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"optional": true,
"requires": {
"source-map": "~0.5.1",
"uglify-to-browserify": "~1.0.0",
"yargs": "~3.10.0"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true,
"optional": true
}
}
}
} }
}, },
"has-binary2": { "has-binary2": {
...@@ -2616,13 +2626,13 @@ ...@@ -2616,13 +2626,13 @@
} }
}, },
"hash.js": { "hash.js": {
"version": "1.1.4", "version": "1.1.7",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.4.tgz", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
"integrity": "sha512-A6RlQvvZEtFS5fLU43IDu0QUmBy+fDO9VMdTXvufKwIkt/rFfvICAViCax5fbDO4zdNzaC3/27ZhKUok5bAJyw==", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "^2.0.3", "inherits": "^2.0.3",
"minimalistic-assert": "^1.0.0" "minimalistic-assert": "^1.0.1"
} }
}, },
"hmac-drbg": { "hmac-drbg": {
...@@ -2637,9 +2647,9 @@ ...@@ -2637,9 +2647,9 @@
} }
}, },
"hosted-git-info": { "hosted-git-info": {
"version": "2.6.0", "version": "2.7.1",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
"integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
"dev": true "dev": true
}, },
"http-errors": { "http-errors": {
...@@ -2671,6 +2681,33 @@ ...@@ -2671,6 +2681,33 @@
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true "dev": true
}, },
"https-proxy-agent": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
"dev": true,
"requires": {
"agent-base": "^4.1.0",
"debug": "^3.1.0"
},
"dependencies": {
"debug": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true,
"requires": {
"ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
}
}
},
"iconv-lite": { "iconv-lite": {
"version": "0.4.23", "version": "0.4.23",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
...@@ -3006,31 +3043,6 @@ ...@@ -3006,31 +3043,6 @@
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
"dev": true "dev": true
}, },
"escodegen": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
"integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
"dev": true,
"requires": {
"esprima": "^2.7.1",
"estraverse": "^1.9.1",
"esutils": "^2.0.2",
"optionator": "^0.8.1",
"source-map": "~0.2.0"
}
},
"esprima": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
"integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
},
"estraverse": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
"integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
"dev": true
},
"glob": { "glob": {
"version": "5.0.15", "version": "5.0.15",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
...@@ -3043,38 +3055,13 @@ ...@@ -3043,38 +3055,13 @@
"once": "^1.3.0", "once": "^1.3.0",
"path-is-absolute": "^1.0.0" "path-is-absolute": "^1.0.0"
} }
},
"resolve": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
"integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
"dev": true
},
"source-map": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
"integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
"dev": true,
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
},
"supports-color": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
"integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
"dev": true,
"requires": {
"has-flag": "^1.0.0"
}
} }
} }
}, },
"jasmine": { "jasmine": {
"version": "3.3.0", "version": "3.3.1",
"resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.3.0.tgz", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.3.1.tgz",
"integrity": "sha512-haZzMvmoWSI2VCKfDgPqyEOPBQA7C1fgtIMgKNU4hVMcrVkWU5NPOWQqOTA6mVFyKcSUUrnkXu/ZEgY0bRnd6A==", "integrity": "sha512-/vU3/H7U56XsxIXHwgEuWpCgQ0bRi2iiZeUpx7Nqo8n1TpoDHfZhkPIc7CO8I4pnMzYsi3XaSZEiy8cnTfujng==",
"dev": true, "dev": true,
"requires": { "requires": {
"glob": "^7.0.6", "glob": "^7.0.6",
...@@ -3090,11 +3077,38 @@ ...@@ -3090,11 +3077,38 @@
} }
}, },
"jasmine-core": { "jasmine-core": {
"version": "3.2.1", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.2.1.tgz", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz",
"integrity": "sha512-pa9tbBWgU0EE4SWgc85T4sa886ufuQdsgruQANhECYjwqgV4z7Vw/499aCaP8ZH79JDS4vhm8doDG9HO4+e4sA==", "integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==",
"dev": true "dev": true
}, },
"jest-worker": {
"version": "24.0.0",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.0.0.tgz",
"integrity": "sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==",
"dev": true,
"requires": {
"merge-stream": "^1.0.1",
"supports-color": "^6.1.0"
},
"dependencies": {
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
"integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"js-tokens": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
...@@ -3102,9 +3116,9 @@ ...@@ -3102,9 +3116,9 @@
"dev": true "dev": true
}, },
"js-yaml": { "js-yaml": {
"version": "3.12.0", "version": "3.12.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
"integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
"dev": true, "dev": true,
"requires": { "requires": {
"argparse": "^1.0.7", "argparse": "^1.0.7",
...@@ -3112,9 +3126,9 @@ ...@@ -3112,9 +3126,9 @@
}, },
"dependencies": { "dependencies": {
"esprima": { "esprima": {
"version": "4.0.0", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true "dev": true
} }
} }
...@@ -3135,9 +3149,9 @@ ...@@ -3135,9 +3149,9 @@
} }
}, },
"karma": { "karma": {
"version": "3.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/karma/-/karma-3.0.0.tgz", "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.0.tgz",
"integrity": "sha512-ZTjyuDXVXhXsvJ1E4CnZzbCjSxD6sEdzEsFYogLuZM0yqvg/mgz+O+R1jb0J7uAQeuzdY8kJgx6hSNXLwFuHIQ==", "integrity": "sha512-EFoFs3F6G0BcUGPNOn/YloGOb3h09hzTguyXlg6loHlKY76qbJikkcyPk43m2kfRF65TUGda/mig29QQtyhm1g==",
"dev": true, "dev": true,
"requires": { "requires": {
"bluebird": "^3.3.0", "bluebird": "^3.3.0",
...@@ -3150,11 +3164,12 @@ ...@@ -3150,11 +3164,12 @@
"di": "^0.0.1", "di": "^0.0.1",
"dom-serialize": "^2.2.0", "dom-serialize": "^2.2.0",
"expand-braces": "^0.1.1", "expand-braces": "^0.1.1",
"flatted": "^2.0.0",
"glob": "^7.1.1", "glob": "^7.1.1",
"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.4", "lodash": "^4.17.5",
"log4js": "^3.0.0", "log4js": "^3.0.0",
"mime": "^2.3.1", "mime": "^2.3.1",
"minimatch": "^3.0.2", "minimatch": "^3.0.2",
...@@ -3166,7 +3181,7 @@ ...@@ -3166,7 +3181,7 @@
"socket.io": "2.1.1", "socket.io": "2.1.1",
"source-map": "^0.6.1", "source-map": "^0.6.1",
"tmp": "0.0.33", "tmp": "0.0.33",
"useragent": "2.2.1" "useragent": "2.3.0"
} }
}, },
"karma-chrome-launcher": { "karma-chrome-launcher": {
...@@ -3201,19 +3216,30 @@ ...@@ -3201,19 +3216,30 @@
} }
}, },
"karma-jasmine": { "karma-jasmine": {
"version": "1.1.2", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz",
"integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==",
"dev": true
},
"karma-typescript": {
"version": "3.0.12",
"resolved": "https://registry.npmjs.org/karma-typescript/-/karma-typescript-3.0.12.tgz",
"integrity": "sha1-qiy90RFEKgnG28uq6vSEmWVMaRM=",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "^4.0.4", "jasmine-core": "^3.3"
"assert": "^1.4.1", },
"dependencies": {
"jasmine-core": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.3.0.tgz",
"integrity": "sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA==",
"dev": true
}
}
},
"karma-typescript": {
"version": "3.0.13",
"resolved": "https://registry.npmjs.org/karma-typescript/-/karma-typescript-3.0.13.tgz",
"integrity": "sha1-iUivvRA6wZh6WWGg9DoboocQZ80=",
"dev": true,
"requires": {
"acorn": "^4.0.4",
"assert": "^1.4.1",
"async": "^2.1.4", "async": "^2.1.4",
"browser-resolve": "^1.11.0", "browser-resolve": "^1.11.0",
"browserify-zlib": "^0.2.0", "browserify-zlib": "^0.2.0",
...@@ -3332,13 +3358,6 @@ ...@@ -3332,13 +3358,6 @@
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true "dev": true
}, },
"lazy-cache": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
"dev": true,
"optional": true
},
"levn": { "levn": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
...@@ -3381,9 +3400,9 @@ ...@@ -3381,9 +3400,9 @@
"dev": true "dev": true
}, },
"log4js": { "log4js": {
"version": "3.0.5", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.5.tgz", "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
"integrity": "sha512-IX5c3G/7fuTtdr0JjOT2OIR12aTESVhsH6cEsijloYwKgcPRlO6DgOU72v0UFhWcoV1HN6+M3dwT89qVPLXm0w==", "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"circular-json": "^0.5.5", "circular-json": "^0.5.5",
...@@ -3394,13 +3413,19 @@ ...@@ -3394,13 +3413,19 @@
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "3.1.0", "version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "2.0.0" "ms": "^2.1.1"
} }
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
} }
} }
}, },
...@@ -3410,12 +3435,6 @@ ...@@ -3410,12 +3435,6 @@
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
"dev": true "dev": true
}, },
"longest": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
"integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
"dev": true
},
"loud-rejection": { "loud-rejection": {
"version": "1.6.0", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
...@@ -3427,18 +3446,30 @@ ...@@ -3427,18 +3446,30 @@
} }
}, },
"lru-cache": { "lru-cache": {
"version": "2.2.4", "version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true "dev": true,
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
},
"dependencies": {
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
}
}
}, },
"magic-string": { "magic-string": {
"version": "0.22.5", "version": "0.25.1",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
"integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==",
"dev": true, "dev": true,
"requires": { "requires": {
"vlq": "^0.2.2" "sourcemap-codec": "^1.4.1"
} }
}, },
"make-error": { "make-error": {
...@@ -3469,19 +3500,20 @@ ...@@ -3469,19 +3500,20 @@
} }
}, },
"math-random": { "math-random": {
"version": "1.0.1", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
"integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
"dev": true "dev": true
}, },
"md5.js": { "md5.js": {
"version": "1.3.4", "version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
"integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
"dev": true, "dev": true,
"requires": { "requires": {
"hash-base": "^3.0.0", "hash-base": "^3.0.0",
"inherits": "^2.0.1" "inherits": "^2.0.1",
"safe-buffer": "^5.1.2"
} }
}, },
"media-typer": { "media-typer": {
...@@ -3516,6 +3548,15 @@ ...@@ -3516,6 +3548,15 @@
} }
} }
}, },
"merge-stream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
"integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
"dev": true,
"requires": {
"readable-stream": "^2.0.1"
}
},
"micromatch": { "micromatch": {
"version": "3.1.10", "version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
...@@ -3548,24 +3589,24 @@ ...@@ -3548,24 +3589,24 @@
} }
}, },
"mime": { "mime": {
"version": "2.3.1", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
"integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==",
"dev": true "dev": true
}, },
"mime-db": { "mime-db": {
"version": "1.35.0", "version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
"integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
"dev": true "dev": true
}, },
"mime-types": { "mime-types": {
"version": "2.1.19", "version": "2.1.21",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
"integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
"dev": true, "dev": true,
"requires": { "requires": {
"mime-db": "~1.35.0" "mime-db": "~1.37.0"
} }
}, },
"minimalistic-assert": { "minimalistic-assert": {
...@@ -3692,6 +3733,12 @@ ...@@ -3692,6 +3733,12 @@
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
"dev": true "dev": true
}, },
"node-fetch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz",
"integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==",
"dev": true
},
"node-pre-gyp": { "node-pre-gyp": {
"version": "0.11.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
...@@ -3942,31 +3989,32 @@ ...@@ -3942,31 +3989,32 @@
} }
}, },
"pad": { "pad": {
"version": "2.1.0", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/pad/-/pad-2.1.0.tgz", "resolved": "https://registry.npmjs.org/pad/-/pad-2.2.2.tgz",
"integrity": "sha512-VeCrKYxgIoJ5RBpxogsoDiizLbZ2ZN+9ua+caIxe4e/a64kIzb9eVZ2CwWYd+arPbnM4N81lzlhTsHLtjSKJ0g==", "integrity": "sha512-w5m0/ISM+Jc/xsxNwKzHhOX+KHKYP3tT+UMmZfCgMSLdCccbjMNYx6LtafOql60qI4NYv13ZGAkSiehJj9ttcQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"wcwidth": "^1.0.1" "wcwidth": "^1.0.1"
} }
}, },
"pako": { "pako": {
"version": "1.0.6", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
"integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
"dev": true "dev": true
}, },
"parse-asn1": { "parse-asn1": {
"version": "5.1.1", "version": "5.1.3",
"resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz",
"integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==",
"dev": true, "dev": true,
"requires": { "requires": {
"asn1.js": "^4.0.0", "asn1.js": "^4.0.0",
"browserify-aes": "^1.0.0", "browserify-aes": "^1.0.0",
"create-hash": "^1.1.0", "create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.0", "evp_bytestokey": "^1.0.0",
"pbkdf2": "^3.0.3" "pbkdf2": "^3.0.3",
"safe-buffer": "^5.1.1"
} }
}, },
"parse-glob": { "parse-glob": {
...@@ -4065,9 +4113,9 @@ ...@@ -4065,9 +4113,9 @@
"dev": true "dev": true
}, },
"path-parse": { "path-parse": {
"version": "1.0.5", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true "dev": true
}, },
"path-type": { "path-type": {
...@@ -4082,9 +4130,9 @@ ...@@ -4082,9 +4130,9 @@
} }
}, },
"pbkdf2": { "pbkdf2": {
"version": "3.0.16", "version": "3.0.17",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
"integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
"dev": true, "dev": true,
"requires": { "requires": {
"create-hash": "^1.1.2", "create-hash": "^1.1.2",
...@@ -4226,17 +4274,24 @@ ...@@ -4226,17 +4274,24 @@
} }
} }
}, },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
"public-encrypt": { "public-encrypt": {
"version": "4.0.2", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
"integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"bn.js": "^4.1.0", "bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0", "browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0", "create-hash": "^1.1.0",
"parse-asn1": "^5.0.0", "parse-asn1": "^5.0.0",
"randombytes": "^2.0.1" "randombytes": "^2.0.1",
"safe-buffer": "^5.1.2"
} }
}, },
"punycode": { "punycode": {
...@@ -4270,9 +4325,9 @@ ...@@ -4270,9 +4325,9 @@
"dev": true "dev": true
}, },
"randomatic": { "randomatic": {
"version": "3.1.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
"integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
"dev": true, "dev": true,
"requires": { "requires": {
"is-number": "^4.0.0", "is-number": "^4.0.0",
...@@ -4382,15 +4437,14 @@ ...@@ -4382,15 +4437,14 @@
} }
}, },
"readdirp": { "readdirp": {
"version": "2.1.0", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.11",
"minimatch": "^3.0.2", "micromatch": "^3.1.10",
"readable-stream": "^2.0.2", "readable-stream": "^2.0.2"
"set-immediate-shim": "^1.0.1"
} }
}, },
"redent": { "redent": {
...@@ -4470,13 +4524,10 @@ ...@@ -4470,13 +4524,10 @@
"dev": true "dev": true
}, },
"resolve": { "resolve": {
"version": "1.7.1", "version": "1.1.7",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
"integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
"dev": true, "dev": true
"requires": {
"path-parse": "^1.0.5"
}
}, },
"resolve-url": { "resolve-url": {
"version": "0.2.1", "version": "0.2.1",
...@@ -4496,16 +4547,6 @@ ...@@ -4496,16 +4547,6 @@
"integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==",
"dev": true "dev": true
}, },
"right-align": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
"dev": true,
"optional": true,
"requires": {
"align-text": "^0.1.1"
}
},
"rimraf": { "rimraf": {
"version": "2.6.2", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
...@@ -4526,187 +4567,87 @@ ...@@ -4526,187 +4567,87 @@
} }
}, },
"rollup": { "rollup": {
"version": "0.65.0", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-0.65.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.1.2.tgz",
"integrity": "sha512-en95i7zwW5IiWay6DR/6QV8TxO2LvWuCjHYDcgP96oVG/gPnWWzsxNViObhoJUs17bAj2RgB67WuBuGmysZZcw==", "integrity": "sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/estree": "0.0.39", "@types/estree": "0.0.39",
"@types/node": "*" "@types/node": "*",
"acorn": "^6.0.5"
},
"dependencies": {
"acorn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz",
"integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==",
"dev": true
}
} }
}, },
"rollup-plugin-commonjs": { "rollup-plugin-commonjs": {
"version": "9.1.6", "version": "9.2.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.6.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz",
"integrity": "sha512-J7GOJm9uzEeLqkVxYSgjyoieh34hATWpa9G2M1ilGzWOLYGfQx5IDQ9ewG8QUj/Z2dzgV+d0/AyloAzElkABAA==", "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==",
"dev": true, "dev": true,
"requires": { "requires": {
"estree-walker": "^0.5.1", "estree-walker": "^0.5.2",
"magic-string": "^0.22.4", "magic-string": "^0.25.1",
"resolve": "^1.5.0", "resolve": "^1.8.1",
"rollup-pluginutils": "^2.0.1" "rollup-pluginutils": "^2.3.3"
},
"dependencies": {
"resolve": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
"integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
}
} }
}, },
"rollup-plugin-node-resolve": { "rollup-plugin-node-resolve": {
"version": "3.3.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.3.0.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz",
"integrity": "sha512-9zHGr3oUJq6G+X0oRMYlzid9fXicBdiydhwGChdyeNRGPcN/majtegApRKHLR5drboUvEWU+QeUmGTyEZQs3WA==", "integrity": "sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw==",
"dev": true, "dev": true,
"requires": { "requires": {
"builtin-modules": "^2.0.0", "builtin-modules": "^3.0.0",
"is-module": "^1.0.0", "is-module": "^1.0.0",
"resolve": "^1.1.6" "resolve": "^1.8.1"
}, },
"dependencies": { "dependencies": {
"builtin-modules": { "builtin-modules": {
"version": "2.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz",
"integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==",
"dev": true "dev": true
},
"resolve": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
"integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
} }
} }
}, },
"rollup-plugin-typescript2": { "rollup-plugin-typescript2": {
"version": "0.16.1", "version": "0.19.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.16.1.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.2.tgz",
"integrity": "sha512-7x4NcMv8OR/Z6WskCv1QpvYUvHtuZ1jp1LFw16pEzNiY0d2Nm7z7SNUmPE7Vt2HRtQsigEksuYD8O4xi6enV7A==", "integrity": "sha512-DRG7SaYX0QzBIz6rII5nm1UkiceS95r8mJjujugybyIueNF3auvzGTHMK62O7As/0q5RHjXsOguWOUv+KJKLFA==",
"dev": true, "dev": true,
"requires": { "requires": {
"fs-extra": "5.0.0", "fs-extra": "7.0.1",
"resolve": "1.8.1", "resolve": "1.8.1",
"rollup-pluginutils": "2.3.0", "rollup-pluginutils": "2.3.3",
"tslib": "1.9.3" "tslib": "1.9.3"
}, },
"dependencies": { "dependencies": {
"arr-diff": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
"integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
"dev": true,
"requires": {
"arr-flatten": "^1.0.1"
}
},
"array-unique": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
"dev": true
},
"braces": {
"version": "1.8.5",
"resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
"dev": true,
"requires": {
"expand-range": "^1.8.1",
"preserve": "^0.2.0",
"repeat-element": "^1.1.2"
}
},
"expand-brackets": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
"integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
"dev": true,
"requires": {
"is-posix-bracket": "^0.1.0"
}
},
"expand-range": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
"dev": true,
"requires": {
"fill-range": "^2.1.0"
}
},
"extglob": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
"integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
"dev": true,
"requires": {
"is-extglob": "^1.0.0"
}
},
"fill-range": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
"integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
"dev": true,
"requires": {
"is-number": "^2.1.0",
"isobject": "^2.0.0",
"randomatic": "^3.0.0",
"repeat-element": "^1.1.2",
"repeat-string": "^1.5.2"
}
},
"is-extglob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
"integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
"dev": true
},
"is-glob": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
"integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
"dev": true,
"requires": {
"is-extglob": "^1.0.0"
}
},
"is-number": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
"integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
}
},
"isobject": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
"dev": true,
"requires": {
"isarray": "1.0.0"
}
},
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
},
"micromatch": {
"version": "2.3.11",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
"dev": true,
"requires": {
"arr-diff": "^2.0.0",
"array-unique": "^0.2.1",
"braces": "^1.8.2",
"expand-brackets": "^0.1.4",
"extglob": "^0.3.1",
"filename-regex": "^2.0.0",
"is-extglob": "^1.0.0",
"is-glob": "^2.0.1",
"kind-of": "^3.0.2",
"normalize-path": "^2.0.1",
"object.omit": "^2.0.0",
"parse-glob": "^3.0.4",
"regex-cache": "^0.4.2"
}
},
"resolve": { "resolve": {
"version": "1.8.1", "version": "1.8.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
...@@ -4715,33 +4656,25 @@ ...@@ -4715,33 +4656,25 @@
"requires": { "requires": {
"path-parse": "^1.0.5" "path-parse": "^1.0.5"
} }
},
"rollup-pluginutils": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.0.tgz",
"integrity": "sha512-xB6hsRsjdJdIYWEyYUJy/3ki5g69wrf0luHPGNK3ZSocV6HLNfio59l3dZ3TL4xUwEKgROhFi9jOCt6c5gfUWw==",
"dev": true,
"requires": {
"estree-walker": "^0.5.2",
"micromatch": "^2.3.11"
}
} }
} }
}, },
"rollup-plugin-uglify": { "rollup-plugin-uglify": {
"version": "4.0.0", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-4.0.0.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz",
"integrity": "sha512-f6W31EQLzxSEYfN3x6/lyljHqXSoCjXKcTsnwz3evQvHgU1+qTzU2SE0SIG7tbAvaCewp2UaZ5x3k6nYsxOP9A==", "integrity": "sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0-beta.47", "@babel/code-frame": "^7.0.0",
"uglify-js": "^3.3.25" "jest-worker": "^24.0.0",
"serialize-javascript": "^1.6.1",
"uglify-js": "^3.4.9"
} }
}, },
"rollup-pluginutils": { "rollup-pluginutils": {
"version": "2.3.1", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.1.tgz", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
"integrity": "sha512-JZS8aJMHEHhqmY2QVPMXwKP6lsD1ShkrcGYjhAIvqKKdXQyPHw/9NF0tl3On/xOJ4ACkxfeG7AF+chfCN1NpBg==", "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
"dev": true, "dev": true,
"requires": { "requires": {
"estree-walker": "^0.5.2", "estree-walker": "^0.5.2",
...@@ -4917,18 +4850,18 @@ ...@@ -4917,18 +4850,18 @@
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true "dev": true
}, },
"serialize-javascript": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz",
"integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==",
"dev": true
},
"set-blocking": { "set-blocking": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true "dev": true
}, },
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
"integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
"dev": true
},
"set-value": { "set-value": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
...@@ -5205,9 +5138,9 @@ ...@@ -5205,9 +5138,9 @@
} }
}, },
"source-map-support": { "source-map-support": {
"version": "0.5.9", "version": "0.5.10",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
"integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"buffer-from": "^1.0.0", "buffer-from": "^1.0.0",
...@@ -5220,10 +5153,16 @@ ...@@ -5220,10 +5153,16 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true "dev": true
}, },
"sourcemap-codec": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
"integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==",
"dev": true
},
"spdx-correct": { "spdx-correct": {
"version": "3.0.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
"integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"spdx-expression-parse": "^3.0.0", "spdx-expression-parse": "^3.0.0",
...@@ -5231,9 +5170,9 @@ ...@@ -5231,9 +5170,9 @@
} }
}, },
"spdx-exceptions": { "spdx-exceptions": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
"integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
"dev": true "dev": true
}, },
"spdx-expression-parse": { "spdx-expression-parse": {
...@@ -5247,9 +5186,9 @@ ...@@ -5247,9 +5186,9 @@
} }
}, },
"spdx-license-ids": { "spdx-license-ids": {
"version": "3.0.0", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
"integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
"dev": true "dev": true
}, },
"split-string": { "split-string": {
...@@ -5295,9 +5234,9 @@ ...@@ -5295,9 +5234,9 @@
"dev": true "dev": true
}, },
"stream-browserify": { "stream-browserify": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
"integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "~2.0.1", "inherits": "~2.0.1",
...@@ -5330,13 +5269,19 @@ ...@@ -5330,13 +5269,19 @@
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "3.1.0", "version": "3.2.6",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "2.0.0" "ms": "^2.1.1"
} }
},
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
"dev": true
} }
} }
}, },
...@@ -5394,20 +5339,12 @@ ...@@ -5394,20 +5339,12 @@
"dev": true "dev": true
}, },
"supports-color": { "supports-color": {
"version": "5.5.0", "version": "3.2.3",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
"dev": true, "dev": true,
"requires": { "requires": {
"has-flag": "^3.0.0" "has-flag": "^1.0.0"
},
"dependencies": {
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
}
} }
}, },
"tar": { "tar": {
...@@ -5426,21 +5363,11 @@ ...@@ -5426,21 +5363,11 @@
} }
}, },
"tfjs-image-recognition-base": { "tfjs-image-recognition-base": {
"version": "0.3.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/tfjs-image-recognition-base/-/tfjs-image-recognition-base-0.3.1.tgz", "resolved": "https://registry.npmjs.org/tfjs-image-recognition-base/-/tfjs-image-recognition-base-0.4.1.tgz",
"integrity": "sha512-58PNmCNwPx0AsQ7qfPn6iOiabIqzMuQymKFW4eZHXmsWW0fGlZBvO8AXLyuqW1ZbtH0LQUnyEETfWNFAYQmkwA==", "integrity": "sha512-oJOLByZa0OgPaLB17ZlL2qO8dIQwgV1ma4/iEFbzVbF8yd0qOomIuEGvyPzXDfD0dmyPwzj8Ysa3Jq+O375Fpw==",
"requires": {
"@tensorflow/tfjs-core": "0.14.2",
"tslib": "^1.9.3"
}
},
"tfjs-tiny-yolov2": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/tfjs-tiny-yolov2/-/tfjs-tiny-yolov2-0.4.0.tgz",
"integrity": "sha512-jCsAB9cn3TCikiYr1i4rqBsS5onPJ4E6VnxfRiqHGZRC4crWZ3blmyPPOiVUQx+UXMJQ77rEWfiVQE0/84VmtA==",
"requires": { "requires": {
"@tensorflow/tfjs-core": "0.14.2", "@tensorflow/tfjs-core": "0.14.2",
"tfjs-image-recognition-base": "^0.3.0",
"tslib": "^1.9.3" "tslib": "^1.9.3"
} }
}, },
...@@ -5561,27 +5488,16 @@ ...@@ -5561,27 +5488,16 @@
"dev": true "dev": true
}, },
"ts-node": { "ts-node": {
"version": "7.0.1", "version": "8.0.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz",
"integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==",
"dev": true, "dev": true,
"requires": { "requires": {
"arrify": "^1.0.0", "arg": "^4.1.0",
"buffer-from": "^1.1.0",
"diff": "^3.1.0", "diff": "^3.1.0",
"make-error": "^1.1.1", "make-error": "^1.1.1",
"minimist": "^1.2.0",
"mkdirp": "^0.5.1",
"source-map-support": "^0.5.6", "source-map-support": "^0.5.6",
"yn": "^2.0.0" "yn": "^3.0.0"
},
"dependencies": {
"minimist": {
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
}
} }
}, },
"tslib": { "tslib": {
...@@ -5615,28 +5531,21 @@ ...@@ -5615,28 +5531,21 @@
} }
}, },
"typescript": { "typescript": {
"version": "2.8.4", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.4.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
"integrity": "sha512-IIU5cN1mR5J3z9jjdESJbnxikTrEz3lzAw/D0Tf45jHpBp55nY31UkUvmVHoffCfKHTqJs3fCLPDxknQTTFegQ==", "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
"dev": true "dev": true
}, },
"uglify-js": { "uglify-js": {
"version": "3.4.8", "version": "3.4.9",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.8.tgz", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
"integrity": "sha512-WatYTD84gP/867bELqI2F/2xC9PQBETn/L+7RGq9MQOA/7yFBNvY1UwXqvtILeE6n0ITwBXxp34M0/o70dzj6A==", "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"commander": "~2.17.1", "commander": "~2.17.1",
"source-map": "~0.6.1" "source-map": "~0.6.1"
} }
}, },
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"dev": true,
"optional": true
},
"ultron": { "ultron": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
...@@ -5767,12 +5676,12 @@ ...@@ -5767,12 +5676,12 @@
"dev": true "dev": true
}, },
"useragent": { "useragent": {
"version": "2.2.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz",
"integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==",
"dev": true, "dev": true,
"requires": { "requires": {
"lru-cache": "2.2.x", "lru-cache": "4.1.x",
"tmp": "0.0.x" "tmp": "0.0.x"
} }
}, },
...@@ -5798,21 +5707,15 @@ ...@@ -5798,21 +5707,15 @@
"dev": true "dev": true
}, },
"validate-npm-package-license": { "validate-npm-package-license": {
"version": "3.0.3", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true, "dev": true,
"requires": { "requires": {
"spdx-correct": "^3.0.0", "spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0" "spdx-expression-parse": "^3.0.0"
} }
}, },
"vlq": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
"integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
"dev": true
},
"vm-browserify": { "vm-browserify": {
"version": "0.0.4", "version": "0.0.4",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
...@@ -5855,13 +5758,6 @@ ...@@ -5855,13 +5758,6 @@
"string-width": "^1.0.2 || 2" "string-width": "^1.0.2 || 2"
} }
}, },
"window-size": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"dev": true,
"optional": true
},
"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",
...@@ -5903,19 +5799,6 @@ ...@@ -5903,19 +5799,6 @@
"integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=",
"dev": true "dev": true
}, },
"yargs": {
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
"dev": true,
"optional": true,
"requires": {
"camelcase": "^1.0.2",
"cliui": "^2.1.0",
"decamelize": "^1.0.0",
"window-size": "0.1.0"
}
},
"yeast": { "yeast": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
...@@ -5923,9 +5806,9 @@ ...@@ -5923,9 +5806,9 @@
"dev": true "dev": true
}, },
"yn": { "yn": {
"version": "2.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz",
"integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==",
"dev": true "dev": true
} }
} }
......
...@@ -36,27 +36,26 @@ ...@@ -36,27 +36,26 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tensorflow/tfjs-core": "0.14.2", "@tensorflow/tfjs-core": "0.14.2",
"tfjs-image-recognition-base": "^0.3.1", "tfjs-image-recognition-base": "^0.4.1",
"tfjs-tiny-yolov2": "^0.4.0",
"tslib": "^1.9.3" "tslib": "^1.9.3"
}, },
"devDependencies": { "devDependencies": {
"@tensorflow/tfjs-node": "^0.1.21", "@tensorflow/tfjs-node": "^0.2.3",
"@types/jasmine": "^2.8.8", "@types/jasmine": "^3.3.8",
"@types/node": "^10.12.12", "@types/node": "^10.12.18",
"canvas": "^2.0.1", "canvas": "2.0.1",
"jasmine": "^3.3.0", "jasmine": "^3.3.1",
"jasmine-core": "^3.2.1", "jasmine-core": "^3.3.0",
"karma": "^3.0.0", "karma": "^4.0.0",
"karma-chrome-launcher": "^2.2.0", "karma-chrome-launcher": "^2.2.0",
"karma-jasmine": "^1.1.2", "karma-jasmine": "^2.0.1",
"karma-typescript": "^3.0.12", "karma-typescript": "^3.0.13",
"rollup": "^0.65.0", "rollup": "^1.1.2",
"rollup-plugin-commonjs": "^9.1.6", "rollup-plugin-commonjs": "^9.2.0",
"rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-node-resolve": "^4.0.0",
"rollup-plugin-typescript2": "^0.16.1", "rollup-plugin-typescript2": "^0.19.2",
"rollup-plugin-uglify": "^4.0.0", "rollup-plugin-uglify": "^6.0.2",
"ts-node": "^7.0.1", "ts-node": "^8.0.2",
"typescript": "2.8.4" "typescript": "^3.2.4"
} }
} }
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { FCParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export function fullyConnectedLayer( export function fullyConnectedLayer(
x: tf.Tensor2D, x: tf.Tensor2D,
params: FCParams params: TfjsImageRecognitionBase.FCParams
): tf.Tensor2D { ): tf.Tensor2D {
return tf.tidy(() => return tf.tidy(() =>
tf.add( tf.add(
......
import { drawText, env, getContext2dOrThrow, getDefaultDrawOptions, resolveInput, round } from 'tfjs-image-recognition-base'; import { drawText, env, getContext2dOrThrow, getDefaultDrawOptions, resolveInput, round } from 'tfjs-image-recognition-base';
import { IRect } from 'tfjs-tiny-yolov2'; import { IRect } from 'tfjs-image-recognition-base';
import { DrawFaceExpressionsInput, DrawFaceExpressionsOptions } from './types'; import { DrawFaceExpressionsInput, DrawFaceExpressionsOptions } from './types';
......
import { IPoint, IRect } from 'tfjs-tiny-yolov2'; import { IPoint, IRect } from 'tfjs-image-recognition-base';
import { WithFaceExpressions } from '../factories/WithFaceExpressions'; import { WithFaceExpressions } from '../factories/WithFaceExpressions';
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ConvParams, SeparableConvParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { depthwiseSeparableConv } from './depthwiseSeparableConv'; import { depthwiseSeparableConv } from './depthwiseSeparableConv';
import { DenseBlock3Params, DenseBlock4Params } from './types'; import { DenseBlock3Params, DenseBlock4Params } from './types';
...@@ -13,10 +13,10 @@ export function denseBlock3( ...@@ -13,10 +13,10 @@ export function denseBlock3(
const out1 = tf.relu( const out1 = tf.relu(
isFirstLayer isFirstLayer
? tf.add( ? tf.add(
tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, [2, 2], 'same'), tf.conv2d(x, (denseBlockParams.conv0 as TfjsImageRecognitionBase.ConvParams).filters, [2, 2], 'same'),
denseBlockParams.conv0.bias denseBlockParams.conv0.bias
) )
: depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, [2, 2]) : depthwiseSeparableConv(x, denseBlockParams.conv0 as TfjsImageRecognitionBase.SeparableConvParams, [2, 2])
) as tf.Tensor4D ) as tf.Tensor4D
const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]) const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1])
...@@ -37,10 +37,10 @@ export function denseBlock4( ...@@ -37,10 +37,10 @@ export function denseBlock4(
const out1 = tf.relu( const out1 = tf.relu(
isFirstLayer isFirstLayer
? tf.add( ? tf.add(
tf.conv2d(x, (denseBlockParams.conv0 as ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'), tf.conv2d(x, (denseBlockParams.conv0 as TfjsImageRecognitionBase.ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),
denseBlockParams.conv0.bias denseBlockParams.conv0.bias
) )
: depthwiseSeparableConv(x, denseBlockParams.conv0 as SeparableConvParams, isScaleDown ? [2, 2] : [1, 1]) : depthwiseSeparableConv(x, denseBlockParams.conv0 as TfjsImageRecognitionBase.SeparableConvParams, isScaleDown ? [2, 2] : [1, 1])
) as tf.Tensor4D ) as tf.Tensor4D
const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1]) const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1])
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { SeparableConvParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export function depthwiseSeparableConv( export function depthwiseSeparableConv(
x: tf.Tensor4D, x: tf.Tensor4D,
params: SeparableConvParams, params: TfjsImageRecognitionBase.SeparableConvParams,
stride: [number, number] stride: [number, number]
): tf.Tensor4D { ): tf.Tensor4D {
return tf.tidy(() => { return tf.tidy(() => {
......
import { extractWeightsFactory, ParamMapping } from 'tfjs-image-recognition-base';
import { extractorsFactory } from './extractorsFactory'; import { extractorsFactory } from './extractorsFactory';
import { FaceFeatureExtractorParams } from './types'; import { FaceFeatureExtractorParams } from './types';
import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } { export function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractWeights, extractWeights,
getRemainingWeights getRemainingWeights
} = extractWeightsFactory(weights) } = TfjsImageRecognitionBase.extractWeightsFactory(weights)
const { const {
extractDenseBlock4Params extractDenseBlock4Params
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { disposeUnusedWeightTensors, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { loadParamsFactory } from './loadParamsFactory'; import { loadParamsFactory } from './loadParamsFactory';
import { FaceFeatureExtractorParams } from './types'; import { FaceFeatureExtractorParams } from './types';
export function extractParamsFromWeigthMap( export function extractParamsFromWeigthMap(
weightMap: tf.NamedTensorMap weightMap: tf.NamedTensorMap
): { params: FaceFeatureExtractorParams, paramMappings: ParamMapping[] } { ): { params: FaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractDenseBlock4Params extractDenseBlock4Params
...@@ -21,7 +21,7 @@ export function extractParamsFromWeigthMap( ...@@ -21,7 +21,7 @@ export function extractParamsFromWeigthMap(
dense3: extractDenseBlock4Params('dense3') dense3: extractDenseBlock4Params('dense3')
} }
disposeUnusedWeightTensors(weightMap, paramMappings) TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)
return { params, paramMappings } return { params, paramMappings }
} }
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { disposeUnusedWeightTensors, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { loadParamsFactory } from './loadParamsFactory'; import { loadParamsFactory } from './loadParamsFactory';
import { TinyFaceFeatureExtractorParams } from './types'; import { TinyFaceFeatureExtractorParams } from './types';
export function extractParamsFromWeigthMapTiny( export function extractParamsFromWeigthMapTiny(
weightMap: tf.NamedTensorMap weightMap: tf.NamedTensorMap
): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } { ): { params: TinyFaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractDenseBlock3Params extractDenseBlock3Params
...@@ -20,7 +20,7 @@ export function extractParamsFromWeigthMapTiny( ...@@ -20,7 +20,7 @@ export function extractParamsFromWeigthMapTiny(
dense2: extractDenseBlock3Params('dense2') dense2: extractDenseBlock3Params('dense2')
} }
disposeUnusedWeightTensors(weightMap, paramMappings) TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)
return { params, paramMappings } return { params, paramMappings }
} }
\ No newline at end of file
import { extractWeightsFactory, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { extractorsFactory } from './extractorsFactory'; import { extractorsFactory } from './extractorsFactory';
import { TinyFaceFeatureExtractorParams } from './types'; import { TinyFaceFeatureExtractorParams } from './types';
export function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: ParamMapping[] } {
const paramMappings: ParamMapping[] = [] export function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractWeights, extractWeights,
getRemainingWeights getRemainingWeights
} = extractWeightsFactory(weights) } = TfjsImageRecognitionBase.extractWeightsFactory(weights)
const { const {
extractDenseBlock3Params extractDenseBlock3Params
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ExtractWeightsFunction, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { extractConvParamsFactory, FCParams, SeparableConvParams } from 'tfjs-tiny-yolov2';
import { DenseBlock3Params, DenseBlock4Params } from './types'; import { DenseBlock3Params, DenseBlock4Params } from './types';
export function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) { export function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
function extractSeparableConvParams(channelsIn: number, channelsOut: number, mappedPrefix: string): SeparableConvParams { function extractSeparableConvParams(channelsIn: number, channelsOut: number, mappedPrefix: string): TfjsImageRecognitionBase.SeparableConvParams {
const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]) const depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1])
const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]) const pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut])
const bias = tf.tensor1d(extractWeights(channelsOut)) const bias = tf.tensor1d(extractWeights(channelsOut))
...@@ -17,14 +16,14 @@ export function extractorsFactory(extractWeights: ExtractWeightsFunction, paramM ...@@ -17,14 +16,14 @@ export function extractorsFactory(extractWeights: ExtractWeightsFunction, paramM
{ paramPath: `${mappedPrefix}/bias` } { paramPath: `${mappedPrefix}/bias` }
) )
return new SeparableConvParams( return new TfjsImageRecognitionBase.SeparableConvParams(
depthwise_filter, depthwise_filter,
pointwise_filter, pointwise_filter,
bias bias
) )
} }
const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings) const extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings)
function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params { function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { extractWeightEntryFactory, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { ConvParams, SeparableConvParams } from 'tfjs-tiny-yolov2';
import { DenseBlock3Params, DenseBlock4Params } from './types'; import { DenseBlock3Params, DenseBlock4Params } from './types';
export function loadParamsFactory(weightMap: any, paramMappings: ParamMapping[]) { export function loadParamsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings) const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)
function extractConvParams(prefix: string): ConvParams { function extractConvParams(prefix: string): TfjsImageRecognitionBase.ConvParams {
const filters = extractWeightEntry<tf.Tensor4D>(`${prefix}/filters`, 4) const filters = extractWeightEntry<tf.Tensor4D>(`${prefix}/filters`, 4)
const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1) const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1)
return { filters, bias } return { filters, bias }
} }
function extractSeparableConvParams(prefix: string): SeparableConvParams { function extractSeparableConvParams(prefix: string): TfjsImageRecognitionBase.SeparableConvParams {
const depthwise_filter = extractWeightEntry<tf.Tensor4D>(`${prefix}/depthwise_filter`, 4) const depthwise_filter = extractWeightEntry<tf.Tensor4D>(`${prefix}/depthwise_filter`, 4)
const pointwise_filter = extractWeightEntry<tf.Tensor4D>(`${prefix}/pointwise_filter`, 4) const pointwise_filter = extractWeightEntry<tf.Tensor4D>(`${prefix}/pointwise_filter`, 4)
const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1) const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1)
return new SeparableConvParams( return new TfjsImageRecognitionBase.SeparableConvParams(
depthwise_filter, depthwise_filter,
pointwise_filter, pointwise_filter,
bias bias
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { NetInput, NeuralNetwork, TNetInput } from 'tfjs-image-recognition-base'; import { NetInput, NeuralNetwork, TNetInput, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { ConvParams, SeparableConvParams } from 'tfjs-tiny-yolov2';
export type ConvWithBatchNormParams = BatchNormParams & { export type ConvWithBatchNormParams = BatchNormParams & {
filter: tf.Tensor4D filter: tf.Tensor4D
...@@ -19,13 +18,13 @@ export type SeparableConvWithBatchNormParams = { ...@@ -19,13 +18,13 @@ export type SeparableConvWithBatchNormParams = {
} }
export type DenseBlock3Params = { export type DenseBlock3Params = {
conv0: SeparableConvParams | ConvParams conv0: TfjsImageRecognitionBase.SeparableConvParams | TfjsImageRecognitionBase.ConvParams
conv1: SeparableConvParams conv1: TfjsImageRecognitionBase.SeparableConvParams
conv2: SeparableConvParams conv2: TfjsImageRecognitionBase.SeparableConvParams
} }
export type DenseBlock4Params = DenseBlock3Params & { export type DenseBlock4Params = DenseBlock3Params & {
conv3: SeparableConvParams conv3: TfjsImageRecognitionBase.SeparableConvParams
} }
export type TinyFaceFeatureExtractorParams = { export type TinyFaceFeatureExtractorParams = {
......
import { extractWeightsFactory, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { extractFCParamsFactory } from 'tfjs-tiny-yolov2';
import { NetParams } from './types'; import { NetParams } from './types';
export function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: ParamMapping[] } { export function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractWeights, extractWeights,
getRemainingWeights getRemainingWeights
} = extractWeightsFactory(weights) } = TfjsImageRecognitionBase.extractWeightsFactory(weights)
const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings) const extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings)
const fc = extractFCParams(channelsIn, channelsOut, 'fc') const fc = extractFCParams(channelsIn, channelsOut, 'fc')
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { FCParams } from 'tfjs-tiny-yolov2';
import { NetParams } from './types'; import { NetParams } from './types';
export function extractParamsFromWeigthMap( export function extractParamsFromWeigthMap(
weightMap: tf.NamedTensorMap weightMap: tf.NamedTensorMap
): { params: NetParams, paramMappings: ParamMapping[] } { ): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings) const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)
function extractFcParams(prefix: string): FCParams { function extractFcParams(prefix: string): TfjsImageRecognitionBase.FCParams {
const weights = extractWeightEntry<tf.Tensor2D>(`${prefix}/weights`, 2) const weights = extractWeightEntry<tf.Tensor2D>(`${prefix}/weights`, 2)
const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1) const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1)
return { weights, bias } return { weights, bias }
...@@ -22,7 +21,7 @@ export function extractParamsFromWeigthMap( ...@@ -22,7 +21,7 @@ export function extractParamsFromWeigthMap(
fc: extractFcParams('fc') fc: extractFcParams('fc')
} }
disposeUnusedWeightTensors(weightMap, paramMappings) TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)
return { params, paramMappings } return { params, paramMappings }
} }
\ No newline at end of file
import { FCParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export type NetParams = { export type NetParams = {
fc: FCParams fc: TfjsImageRecognitionBase.FCParams
} }
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { extractWeightsFactory, ExtractWeightsFunction, isFloat, ParamMapping } from 'tfjs-image-recognition-base'; import { isFloat, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { ConvParams } from 'tfjs-tiny-yolov2';
import { ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams } from './types'; import { ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams } from './types';
function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) { function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D { function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {
const weights = extractWeights(numFilterValues) const weights = extractWeights(numFilterValues)
...@@ -27,7 +26,7 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings ...@@ -27,7 +26,7 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings
numFilters: number, numFilters: number,
filterSize: number, filterSize: number,
mappedPrefix: string mappedPrefix: string
): ConvParams { ): TfjsImageRecognitionBase.ConvParams {
const filters = extractFilterValues(numFilterValues, numFilters, filterSize) const filters = extractFilterValues(numFilterValues, numFilters, filterSize)
const bias = tf.tensor1d(extractWeights(numFilters)) const bias = tf.tensor1d(extractWeights(numFilters))
...@@ -90,14 +89,14 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings ...@@ -90,14 +89,14 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings
} }
export function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } { export function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const { const {
extractWeights, extractWeights,
getRemainingWeights getRemainingWeights
} = extractWeightsFactory(weights) } = TfjsImageRecognitionBase.extractWeightsFactory(weights)
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractConvLayerParams, extractConvLayerParams,
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { import { isTensor2D, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
disposeUnusedWeightTensors,
extractWeightEntryFactory,
isTensor2D,
loadWeightMap,
ParamMapping,
} from 'tfjs-image-recognition-base';
import { ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams } from './types'; import { ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams } from './types';
function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { function extractorsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings) const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)
function extractScaleLayerParams(prefix: string): ScaleLayerParams { function extractScaleLayerParams(prefix: string): ScaleLayerParams {
...@@ -46,9 +40,9 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { ...@@ -46,9 +40,9 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {
export function extractParamsFromWeigthMap( export function extractParamsFromWeigthMap(
weightMap: tf.NamedTensorMap weightMap: tf.NamedTensorMap
): { params: NetParams, paramMappings: ParamMapping[] } { ): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractConvLayerParams, extractConvLayerParams,
...@@ -100,7 +94,7 @@ export function extractParamsFromWeigthMap( ...@@ -100,7 +94,7 @@ export function extractParamsFromWeigthMap(
fc fc
} }
disposeUnusedWeightTensors(weightMap, paramMappings) TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)
return { params, paramMappings } return { params, paramMappings }
} }
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ConvParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export type ScaleLayerParams = { export type ScaleLayerParams = {
weights: tf.Tensor1D weights: tf.Tensor1D
...@@ -11,7 +11,7 @@ export type ResidualLayerParams = { ...@@ -11,7 +11,7 @@ export type ResidualLayerParams = {
} }
export type ConvLayerParams = { export type ConvLayerParams = {
conv: ConvParams conv: TfjsImageRecognitionBase.ConvParams
scale: ScaleLayerParams scale: ScaleLayerParams
} }
......
import { TNetInput } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { TinyYolov2Options } from 'tfjs-tiny-yolov2';
import { FaceDetection } from '../classes/FaceDetection'; import { FaceDetection } from '../classes/FaceDetection';
import { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection'; import { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';
...@@ -9,8 +8,8 @@ import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOpt ...@@ -9,8 +8,8 @@ import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOpt
import { ComposableTask } from './ComposableTask'; import { ComposableTask } from './ComposableTask';
import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks'; import { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';
import { nets } from './nets'; import { nets } from './nets';
import { FaceDetectionOptions } from './types';
import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask'; import { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionTask } from './PredictFaceExpressionsTask';
import { FaceDetectionOptions } from './types';
export class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn> { export class DetectFacesTaskBase<TReturn> extends ComposableTask<TReturn> {
constructor( constructor(
...@@ -38,7 +37,7 @@ export class DetectAllFacesTask extends DetectFacesTaskBase<FaceDetection[]> { ...@@ -38,7 +37,7 @@ export class DetectAllFacesTask extends DetectFacesTaskBase<FaceDetection[]> {
options instanceof SsdMobilenetv1Options options instanceof SsdMobilenetv1Options
? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options) ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)
: ( : (
options instanceof TinyYolov2Options options instanceof TfjsImageRecognitionBase.TinyYolov2Options
? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options) ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)
: null : null
) )
......
import * as tf from '@tensorflow/tfjs-core';
import { TNetInput } from 'tfjs-image-recognition-base'; import { TNetInput } from 'tfjs-image-recognition-base';
import { tf } from 'tfjs-tiny-yolov2';
import { extractFaces, extractFaceTensors } from '../dom'; import { extractFaces, extractFaceTensors } from '../dom';
import { FaceExpressionPrediction } from '../faceExpressionNet/types'; import { FaceExpressionPrediction } from '../faceExpressionNet/types';
......
import { TNetInput } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { ITinyYolov2Options, TinyYolov2Options } from 'tfjs-tiny-yolov2';
import { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories'; import { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories';
import { IMtcnnOptions, MtcnnOptions } from '../mtcnn/MtcnnOptions'; import { IMtcnnOptions, MtcnnOptions } from '../mtcnn/MtcnnOptions';
...@@ -19,9 +18,9 @@ export async function allFacesSsdMobilenetv1( ...@@ -19,9 +18,9 @@ export async function allFacesSsdMobilenetv1(
export async function allFacesTinyYolov2( export async function allFacesTinyYolov2(
input: TNetInput, input: TNetInput,
forwardParams: ITinyYolov2Options = {} forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options = {}
): Promise<WithFaceDescriptor<WithFaceLandmarks<WithFaceDetection<{}>>>[]> { ): Promise<WithFaceDescriptor<WithFaceLandmarks<WithFaceDetection<{}>>>[]> {
return await detectAllFaces(input, new TinyYolov2Options(forwardParams)) return await detectAllFaces(input, new TfjsImageRecognitionBase.TinyYolov2Options(forwardParams))
.withFaceLandmarks() .withFaceLandmarks()
.withFaceDescriptors() .withFaceDescriptors()
} }
......
import { TNetInput } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { ITinyYolov2Options } from 'tfjs-tiny-yolov2';
import { FaceDetection } from '../classes/FaceDetection'; import { FaceDetection } from '../classes/FaceDetection';
import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; import { FaceLandmarks5 } from '../classes/FaceLandmarks5';
...@@ -17,7 +16,7 @@ import { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1'; ...@@ -17,7 +16,7 @@ import { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';
import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';
import { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector'; import { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';
import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';
import { TinyYolov2 } from '../tinyYolov2/TinyYolov2'; import { TinyYolov2 } from '../tinyYolov2';
export const nets = { export const nets = {
ssdMobilenetv1: new SsdMobilenetv1(), ssdMobilenetv1: new SsdMobilenetv1(),
...@@ -57,7 +56,7 @@ export const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOpti ...@@ -57,7 +56,7 @@ export const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOpti
* @param options (optional, default: see TinyYolov2Options constructor for default parameters). * @param options (optional, default: see TinyYolov2Options constructor for default parameters).
* @returns Bounding box of each face with score. * @returns Bounding box of each face with score.
*/ */
export const tinyYolov2 = (input: TNetInput, options: ITinyYolov2Options): Promise<FaceDetection[]> => export const tinyYolov2 = (input: TNetInput, options: TfjsImageRecognitionBase.ITinyYolov2Options): Promise<FaceDetection[]> =>
nets.tinyYolov2.locateFaces(input, options) nets.tinyYolov2.locateFaces(input, options)
/** /**
......
import { TNetInput } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { TinyYolov2Options } from 'tfjs-tiny-yolov2';
import { FaceDetection } from '../classes/FaceDetection'; import { FaceDetection } from '../classes/FaceDetection';
import { MtcnnOptions } from '../mtcnn/MtcnnOptions'; import { MtcnnOptions } from '../mtcnn/MtcnnOptions';
import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options'; import { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';
import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions'; import { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';
export type FaceDetectionOptions = TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options export type FaceDetectionOptions = TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TfjsImageRecognitionBase.TinyYolov2Options
export type FaceDetectionFunction = (input: TNetInput) => Promise<FaceDetection[]> export type FaceDetectionFunction = (input: TNetInput) => Promise<FaceDetection[]>
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { convLayer } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { fullyConnectedLayer } from '../common/fullyConnectedLayer'; import { fullyConnectedLayer } from '../common/fullyConnectedLayer';
import { prelu } from './prelu'; import { prelu } from './prelu';
...@@ -11,7 +11,7 @@ export function ONet(x: tf.Tensor4D, params: ONetParams): { scores: tf.Tensor1D, ...@@ -11,7 +11,7 @@ export function ONet(x: tf.Tensor4D, params: ONetParams): { scores: tf.Tensor1D,
let out = sharedLayer(x, params) let out = sharedLayer(x, params)
out = tf.maxPool(out, [2, 2], [2, 2], 'same') out = tf.maxPool(out, [2, 2], [2, 2], 'same')
out = convLayer(out, params.conv4, 'valid') out = TfjsImageRecognitionBase.convLayer(out, params.conv4, 'valid')
out = prelu<tf.Tensor4D>(out, params.prelu4_alpha) out = prelu<tf.Tensor4D>(out, params.prelu4_alpha)
const vectorized = tf.reshape(out, [out.shape[0], params.fc1.weights.shape[0]]) as tf.Tensor2D const vectorized = tf.reshape(out, [out.shape[0], params.fc1.weights.shape[0]]) as tf.Tensor2D
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { convLayer } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { sharedLayer } from './sharedLayers'; import { sharedLayer } from './sharedLayers';
import { PNetParams } from './types'; import { PNetParams } from './types';
...@@ -8,10 +8,10 @@ export function PNet(x: tf.Tensor4D, params: PNetParams): { prob: tf.Tensor4D, r ...@@ -8,10 +8,10 @@ export function PNet(x: tf.Tensor4D, params: PNetParams): { prob: tf.Tensor4D, r
return tf.tidy(() => { return tf.tidy(() => {
let out = sharedLayer(x, params, true) let out = sharedLayer(x, params, true)
const conv = convLayer(out, params.conv4_1, 'valid') const conv = TfjsImageRecognitionBase.convLayer(out, params.conv4_1, 'valid')
const max = tf.expandDims(tf.max(conv, 3), 3) const max = tf.expandDims(tf.max(conv, 3), 3)
const prob = tf.softmax(tf.sub(conv, max), 3) as tf.Tensor4D const prob = tf.softmax(tf.sub(conv, max), 3) as tf.Tensor4D
const regions = convLayer(out, params.conv4_2, 'valid') const regions = TfjsImageRecognitionBase.convLayer(out, params.conv4_2, 'valid')
return { prob, regions } return { prob, regions }
}) })
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { extractWeightsFactory, ExtractWeightsFunction, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { extractConvParamsFactory, extractFCParamsFactory } from 'tfjs-tiny-yolov2';
import { NetParams, ONetParams, PNetParams, RNetParams, SharedParams } from './types'; import { NetParams, ONetParams, PNetParams, RNetParams, SharedParams } from './types';
function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) { function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
const extractConvParams = extractConvParamsFactory(extractWeights, paramMappings) const extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings)
const extractFCParams = extractFCParamsFactory(extractWeights, paramMappings) const extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings)
function extractPReluParams(size: number, paramPath: string): tf.Tensor1D { function extractPReluParams(size: number, paramPath: string): tf.Tensor1D {
const alpha = tf.tensor1d(extractWeights(size)) const alpha = tf.tensor1d(extractWeights(size))
...@@ -69,14 +68,14 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings ...@@ -69,14 +68,14 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings
} }
export function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } { export function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const { const {
extractWeights, extractWeights,
getRemainingWeights getRemainingWeights
} = extractWeightsFactory(weights) } = TfjsImageRecognitionBase.extractWeightsFactory(weights)
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractPNetParams, extractPNetParams,
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { disposeUnusedWeightTensors, extractWeightEntryFactory, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { ConvParams, FCParams } from 'tfjs-tiny-yolov2';
import { NetParams, ONetParams, PNetParams, RNetParams, SharedParams } from './types'; import { NetParams, ONetParams, PNetParams, RNetParams, SharedParams } from './types';
function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { function extractorsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings) const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)
function extractConvParams(prefix: string): ConvParams { function extractConvParams(prefix: string): TfjsImageRecognitionBase.ConvParams {
const filters = extractWeightEntry<tf.Tensor4D>(`${prefix}/weights`, 4, `${prefix}/filters`) const filters = extractWeightEntry<tf.Tensor4D>(`${prefix}/weights`, 4, `${prefix}/filters`)
const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1) const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1)
return { filters, bias } return { filters, bias }
} }
function extractFCParams(prefix: string): FCParams { function extractFCParams(prefix: string): TfjsImageRecognitionBase.FCParams {
const weights = extractWeightEntry<tf.Tensor2D>(`${prefix}/weights`, 2) const weights = extractWeightEntry<tf.Tensor2D>(`${prefix}/weights`, 2)
const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1) const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/bias`, 1)
...@@ -82,9 +81,9 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { ...@@ -82,9 +81,9 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {
export function extractParamsFromWeigthMap( export function extractParamsFromWeigthMap(
weightMap: tf.NamedTensorMap weightMap: tf.NamedTensorMap
): { params: NetParams, paramMappings: ParamMapping[] } { ): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractPNetParams, extractPNetParams,
...@@ -96,7 +95,7 @@ export function extractParamsFromWeigthMap( ...@@ -96,7 +95,7 @@ export function extractParamsFromWeigthMap(
const rnet = extractRNetParams() const rnet = extractRNetParams()
const onet = extractONetParams() const onet = extractONetParams()
disposeUnusedWeightTensors(weightMap, paramMappings) TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)
return { params: { pnet, rnet, onet }, paramMappings } return { params: { pnet, rnet, onet }, paramMappings }
} }
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { convLayer } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { prelu } from './prelu'; import { prelu } from './prelu';
import { SharedParams } from './types'; import { SharedParams } from './types';
...@@ -7,13 +7,13 @@ import { SharedParams } from './types'; ...@@ -7,13 +7,13 @@ import { SharedParams } from './types';
export function sharedLayer(x: tf.Tensor4D, params: SharedParams, isPnet: boolean = false) { export function sharedLayer(x: tf.Tensor4D, params: SharedParams, isPnet: boolean = false) {
return tf.tidy(() => { return tf.tidy(() => {
let out = convLayer(x, params.conv1, 'valid') let out = TfjsImageRecognitionBase.convLayer(x, params.conv1, 'valid')
out = prelu<tf.Tensor4D>(out, params.prelu1_alpha) out = prelu<tf.Tensor4D>(out, params.prelu1_alpha)
out = tf.maxPool(out, isPnet ? [2, 2]: [3, 3], [2, 2], 'same') out = tf.maxPool(out, isPnet ? [2, 2]: [3, 3], [2, 2], 'same')
out = convLayer(out, params.conv2, 'valid') out = TfjsImageRecognitionBase.convLayer(out, params.conv2, 'valid')
out = prelu<tf.Tensor4D>(out, params.prelu2_alpha) out = prelu<tf.Tensor4D>(out, params.prelu2_alpha)
out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid') out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid')
out = convLayer(out, params.conv3, 'valid') out = TfjsImageRecognitionBase.convLayer(out, params.conv3, 'valid')
out = prelu<tf.Tensor4D>(out, params.prelu3_alpha) out = prelu<tf.Tensor4D>(out, params.prelu3_alpha)
return out return out
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ConvParams, FCParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { FaceLandmarks5 } from '../classes/FaceLandmarks5'; import { FaceLandmarks5 } from '../classes/FaceLandmarks5';
import { WithFaceDetection, WithFaceLandmarks } from '../factories'; import { WithFaceDetection, WithFaceLandmarks } from '../factories';
export type SharedParams = { export type SharedParams = {
conv1: ConvParams conv1: TfjsImageRecognitionBase.ConvParams
prelu1_alpha: tf.Tensor1D prelu1_alpha: tf.Tensor1D
conv2: ConvParams conv2: TfjsImageRecognitionBase.ConvParams
prelu2_alpha: tf.Tensor1D prelu2_alpha: tf.Tensor1D
conv3: ConvParams conv3: TfjsImageRecognitionBase.ConvParams
prelu3_alpha: tf.Tensor1D prelu3_alpha: tf.Tensor1D
} }
export type PNetParams = SharedParams & { export type PNetParams = SharedParams & {
conv4_1: ConvParams conv4_1: TfjsImageRecognitionBase.ConvParams
conv4_2: ConvParams conv4_2: TfjsImageRecognitionBase.ConvParams
} }
export type RNetParams = SharedParams & { export type RNetParams = SharedParams & {
fc1: FCParams fc1: TfjsImageRecognitionBase.FCParams
prelu4_alpha: tf.Tensor1D prelu4_alpha: tf.Tensor1D
fc2_1: FCParams fc2_1: TfjsImageRecognitionBase.FCParams
fc2_2: FCParams fc2_2: TfjsImageRecognitionBase.FCParams
} }
export type ONetParams = SharedParams & { export type ONetParams = SharedParams & {
conv4: ConvParams conv4: TfjsImageRecognitionBase.ConvParams
prelu4_alpha: tf.Tensor1D prelu4_alpha: tf.Tensor1D
fc1: FCParams fc1: TfjsImageRecognitionBase.FCParams
prelu5_alpha: tf.Tensor1D prelu5_alpha: tf.Tensor1D
fc2_1: FCParams fc2_1: TfjsImageRecognitionBase.FCParams
fc2_2: FCParams fc2_2: TfjsImageRecognitionBase.FCParams
fc2_3: FCParams fc2_3: TfjsImageRecognitionBase.FCParams
} }
export type NetParams = { export type NetParams = {
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { convLayer } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { BoxPredictionParams } from './types'; import { BoxPredictionParams } from './types';
...@@ -13,11 +13,11 @@ export function boxPredictionLayer( ...@@ -13,11 +13,11 @@ export function boxPredictionLayer(
const batchSize = x.shape[0] const batchSize = x.shape[0]
const boxPredictionEncoding = tf.reshape( const boxPredictionEncoding = tf.reshape(
convLayer(x, params.box_encoding_predictor), TfjsImageRecognitionBase.convLayer(x, params.box_encoding_predictor),
[batchSize, -1, 1, 4] [batchSize, -1, 1, 4]
) )
const classPrediction = tf.reshape( const classPrediction = tf.reshape(
convLayer(x, params.class_predictor), TfjsImageRecognitionBase.convLayer(x, params.class_predictor),
[batchSize, -1, 3] [batchSize, -1, 3]
) )
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { extractWeightsFactory, ExtractWeightsFunction, ParamMapping } from 'tfjs-image-recognition-base'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
import { ConvParams } from 'tfjs-tiny-yolov2';
import { MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams } from './types'; import { MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams } from './types';
function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings: ParamMapping[]) { function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams { function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {
...@@ -37,7 +36,7 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings ...@@ -37,7 +36,7 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings
filterSize: number, filterSize: number,
mappedPrefix: string, mappedPrefix: string,
isPointwiseConv?: boolean isPointwiseConv?: boolean
): ConvParams { ): TfjsImageRecognitionBase.ConvParams {
const filters = tf.tensor4d( const filters = tf.tensor4d(
extractWeights(channelsIn * channelsOut * filterSize * filterSize), extractWeights(channelsIn * channelsOut * filterSize * filterSize),
...@@ -192,14 +191,14 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings ...@@ -192,14 +191,14 @@ function extractorsFactory(extractWeights: ExtractWeightsFunction, paramMappings
} }
export function extractParams(weights: Float32Array): { params: NetParams, paramMappings: ParamMapping[] } { export function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractWeights, extractWeights,
getRemainingWeights getRemainingWeights
} = extractWeightsFactory(weights) } = TfjsImageRecognitionBase.extractWeightsFactory(weights)
const { const {
extractMobilenetV1Params, extractMobilenetV1Params,
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { import { isTensor3D, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
disposeUnusedWeightTensors,
extractWeightEntryFactory,
isTensor3D,
ParamMapping,
} from 'tfjs-image-recognition-base';
import { ConvParams } from 'tfjs-tiny-yolov2';
import { BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams } from './types'; import { BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams } from './types';
function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { function extractorsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {
const extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings) const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)
function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams { function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {
...@@ -65,7 +59,7 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { ...@@ -65,7 +59,7 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {
} }
} }
function extractConvParams(prefix: string, mappedPrefix: string): ConvParams { function extractConvParams(prefix: string, mappedPrefix: string): TfjsImageRecognitionBase.ConvParams {
const filters = extractWeightEntry<tf.Tensor4D>(`${prefix}/weights`, 4, `${mappedPrefix}/filters`) const filters = extractWeightEntry<tf.Tensor4D>(`${prefix}/weights`, 4, `${mappedPrefix}/filters`)
const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/biases`, 1, `${mappedPrefix}/bias`) const bias = extractWeightEntry<tf.Tensor1D>(`${prefix}/biases`, 1, `${mappedPrefix}/bias`)
...@@ -113,9 +107,9 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) { ...@@ -113,9 +107,9 @@ function extractorsFactory(weightMap: any, paramMappings: ParamMapping[]) {
export function extractParamsFromWeigthMap( export function extractParamsFromWeigthMap(
weightMap: tf.NamedTensorMap weightMap: tf.NamedTensorMap
): { params: NetParams, paramMappings: ParamMapping[] } { ): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
const paramMappings: ParamMapping[] = [] const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []
const { const {
extractMobilenetV1Params, extractMobilenetV1Params,
...@@ -137,7 +131,7 @@ export function extractParamsFromWeigthMap( ...@@ -137,7 +131,7 @@ export function extractParamsFromWeigthMap(
} }
} }
disposeUnusedWeightTensors(weightMap, paramMappings) TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)
return { params, paramMappings } return { params, paramMappings }
} }
\ No newline at end of file
...@@ -70,7 +70,7 @@ export function outputLayer( ...@@ -70,7 +70,7 @@ export function outputLayer(
scores = tf.reshape( scores = tf.reshape(
scores, scores,
[batchSize, scores.shape[1]] [batchSize, scores.shape[1] as number]
) )
const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[] const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[]
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ConvParams } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export type PointwiseConvParams = { export type PointwiseConvParams = {
filters: tf.Tensor4D filters: tf.Tensor4D
...@@ -41,8 +41,8 @@ export namespace MobileNetV1 { ...@@ -41,8 +41,8 @@ export namespace MobileNetV1 {
} }
export type BoxPredictionParams = { export type BoxPredictionParams = {
box_encoding_predictor: ConvParams box_encoding_predictor: TfjsImageRecognitionBase.ConvParams
class_predictor: ConvParams class_predictor: TfjsImageRecognitionBase.ConvParams
} }
export type PredictionLayerParams = { export type PredictionLayerParams = {
......
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ParamMapping, Point, TNetInput } from 'tfjs-image-recognition-base'; import { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { ITinyYolov2Options, TinyYolov2 as TinyYolov2Base } from 'tfjs-tiny-yolov2';
import { TinyYolov2NetParams } from 'tfjs-tiny-yolov2/build/commonjs/tinyYolov2/types';
import { FaceDetection } from '../classes'; import { FaceDetection } from '../classes';
import { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const'; import { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';
export class TinyFaceDetector extends TinyYolov2Base { export class TinyFaceDetector extends TfjsImageRecognitionBase.TinyYolov2 {
constructor() { constructor() {
const config = { const config = {
...@@ -26,7 +24,7 @@ export class TinyFaceDetector extends TinyYolov2Base { ...@@ -26,7 +24,7 @@ export class TinyFaceDetector extends TinyYolov2Base {
return this.config.anchors return this.config.anchors
} }
public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise<FaceDetection[]> { public async locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise<FaceDetection[]> {
const objectDetections = await this.detect(input, forwardParams) const objectDetections = await this.detect(input, forwardParams)
return objectDetections.map(det => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight })) return objectDetections.map(det => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }))
} }
...@@ -35,7 +33,7 @@ export class TinyFaceDetector extends TinyYolov2Base { ...@@ -35,7 +33,7 @@ export class TinyFaceDetector extends TinyYolov2Base {
return 'tiny_face_detector_model' return 'tiny_face_detector_model'
} }
protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } { protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TfjsImageRecognitionBase.TinyYolov2NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
return super.extractParamsFromWeigthMap(weightMap) return super.extractParamsFromWeigthMap(weightMap)
} }
} }
\ No newline at end of file
import { ITinyYolov2Options, TinyYolov2Options } from 'tfjs-tiny-yolov2'; import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';
export interface ITinyFaceDetectorOptions extends ITinyYolov2Options {} export interface ITinyFaceDetectorOptions extends TfjsImageRecognitionBase.ITinyYolov2Options {}
export class TinyFaceDetectorOptions extends TinyYolov2Options { export class TinyFaceDetectorOptions extends TfjsImageRecognitionBase.TinyYolov2Options {
protected _name: string = 'TinyFaceDetectorOptions' protected _name: string = 'TinyFaceDetectorOptions'
} }
\ No newline at end of file
import * as tf from '@tensorflow/tfjs-core'; import * as tf from '@tensorflow/tfjs-core';
import { ParamMapping, Point, TNetInput } from 'tfjs-image-recognition-base'; import { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';
import { ITinyYolov2Options, TinyYolov2 as TinyYolov2Base, TinyYolov2NetParams } from 'tfjs-tiny-yolov2';
import { FaceDetection } from '../classes'; import { FaceDetection } from '../classes';
import { import {
...@@ -12,7 +11,7 @@ import { ...@@ -12,7 +11,7 @@ import {
MEAN_RGB_SEPARABLE, MEAN_RGB_SEPARABLE,
} from './const'; } from './const';
export class TinyYolov2 extends TinyYolov2Base { export class TinyYolov2 extends TfjsImageRecognitionBase.TinyYolov2 {
constructor(withSeparableConvs: boolean = true) { constructor(withSeparableConvs: boolean = true) {
const config = Object.assign({}, { const config = Object.assign({}, {
...@@ -42,7 +41,7 @@ export class TinyYolov2 extends TinyYolov2Base { ...@@ -42,7 +41,7 @@ export class TinyYolov2 extends TinyYolov2Base {
return this.config.anchors return this.config.anchors
} }
public async locateFaces(input: TNetInput, forwardParams: ITinyYolov2Options): Promise<FaceDetection[]> { public async locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise<FaceDetection[]> {
const objectDetections = await this.detect(input, forwardParams) const objectDetections = await this.detect(input, forwardParams)
return objectDetections.map(det => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight })) return objectDetections.map(det => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }))
} }
...@@ -51,7 +50,7 @@ export class TinyYolov2 extends TinyYolov2Base { ...@@ -51,7 +50,7 @@ export class TinyYolov2 extends TinyYolov2Base {
return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME
} }
protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TinyYolov2NetParams, paramMappings: ParamMapping[] } { protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TfjsImageRecognitionBase.TinyYolov2NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {
return super.extractParamsFromWeigthMap(weightMap) return super.extractParamsFromWeigthMap(weightMap)
} }
} }
\ No newline at end of file
import { TinyYolov2 } from './TinyYolov2'; import { TinyYolov2 } from './TinyYolov2';
export * from './TinyYolov2'; export { TinyYolov2 }
export function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) { export function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {
const net = new TinyYolov2(withSeparableConvs) const net = new TinyYolov2(withSeparableConvs)
......
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