diff --git a/.gitignore b/.gitignore index 554f601..4a49237 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ node_modules # Ignore built ts files /bin/ dist/**/* + +/config.json \ No newline at end of file diff --git a/README.md b/README.md index 00b54c9..5def8e8 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,6 @@ Google Translate网页版的封装,通过[Electron](https://www.electronjs.org * 不支持离线使用; * 不支持取词划词; -* 未测试Windows之外的平台; 对于Mini窗口自动获取输入焦点和自动清除输入,由于是通过`dom-ready`事件注入JavaScript实现,因此在`dom-ready`之后才能生效。而这需要大概十几秒,因为`translate.google.cn`尝试从`google.com`获取一些资源,而访问google.com会等待超时后失败(国内环境),但这些资源并不是完成翻译功能所必须的,因此并不影响翻译功能的使用。但未完成的非ajax请求会让`dom-ready`事件迟迟不能触发,导致依赖此事件注入JavaScript的代码直到请求超时后才执行。 但这只在程序启动时发生,个人认为勉强能够忍受,就没有再折腾。如果有必要,或许可以通过`ServiceWorker`拦截? @@ -54,9 +53,12 @@ Mini窗口的大小是固定的,想要修改只能修改代码。为了在更 `npm start` ### 打包 -`npm run package` +#### Windows +`npm run package-win` +#### linux +`npm run package-linux` -通过`electron-packager`进行打包。当然您也可以使用其它Electron打包工具,例如[electron-builder](https://github.com/electron-userland/electron-builder)。但请劳烦您自行配置。 +通过`electron-packager`进行打包。当然您也可以自定义打包器参数或使用其它Electron打包工具,例如[electron-builder](https://github.com/electron-userland/electron-builder)。但请劳烦您自行配置。 ## 配置项 @@ -76,6 +78,9 @@ Mini窗口的大小是固定的,想要修改只能修改代码。为了在更 | minimizeToTrayWhenClose | boolean | true | 关闭主窗口时最小化到托盘 | minimizeToTrayWenStart | boolean | true | 启动时自动隐藏主窗口 | keepActiveInterval | number | 60000 | 自动操作Mini窗口以使其保持活跃的周期,单位ms,最低1000,为0禁止 +| skipTrayIcon | boolean | false | 是否隐藏系统托盘图标 + +注意,在部分linux桌面上动态切换是否显示托盘图标可能会导致托盘图标残留,因此最好直接修改config.json再重启而不是动态修改是否显示托盘图标。 ## 使用截图 diff --git a/appicon.png b/appicon.png new file mode 100644 index 0000000..21fc7bd Binary files /dev/null and b/appicon.png differ diff --git a/package-lock.json b/package-lock.json index 43b9b73..ac1945f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "google-translate-electron", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -8,6 +8,7 @@ "version": "1.12.2", "resolved": "https://registry.npm.taobao.org/@electron/get/download/@electron/get-1.12.2.tgz", "integrity": "sha1-ZEIGavuZvgjO+5ooHktGkrM3ZPM=", + "dev": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -24,6 +25,7 @@ "version": "4.1.1", "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz", "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -31,12 +33,14 @@ "env-paths": { "version": "2.2.0", "resolved": "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.0.tgz", - "integrity": "sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM=" + "integrity": "sha1-zcpVfcAJFSkX1hZuL+vh8DloXkM=", + "dev": true }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz", "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -47,6 +51,7 @@ "version": "3.0.1", "resolved": "https://registry.npm.taobao.org/sumchecker/download/sumchecker-3.0.1.tgz", "integrity": "sha1-Y3fplnlauwttNI6bPh37JDRajkI=", + "dev": true, "requires": { "debug": "^4.1.0" } @@ -56,12 +61,14 @@ "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npm.taobao.org/@sindresorhus/is/download/@sindresorhus/is-0.14.0.tgz", - "integrity": "sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o=" + "integrity": "sha1-n7OjzzEyMoFR81PeRjLgHlIQK+o=", + "dev": true }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npm.taobao.org/@szmarczak/http-timer/download/@szmarczak/http-timer-1.1.2.tgz", "integrity": "sha1-sWZeLEYaLNkvTBu/UNVFTeDUtCE=", + "dev": true, "requires": { "defer-to-connect": "^1.0.1" } @@ -94,8 +101,31 @@ "version": "10.14.12", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.12.tgz", "integrity": "sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg==", + "dev": true + }, + "ajv": { + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", "dev": true, - "optional": true + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true }, "asar": { "version": "2.1.0", @@ -113,12 +143,45 @@ "tmp-promise": "^1.0.5" } }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, "author-regex": { "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/author-regex/download/author-regex-1.0.0.tgz", "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", "dev": true }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "dev": true + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", @@ -131,6 +194,15 @@ "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", @@ -141,6 +213,7 @@ "version": "3.0.1", "resolved": "https://registry.npm.taobao.org/boolean/download/boolean-3.0.1.tgz", "integrity": "sha1-NezytKLuGRsLRJhvFOtfBSpcu08=", + "dev": true, "optional": true }, "brace-expansion": { @@ -171,8 +244,9 @@ }, "buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npm.taobao.org/buffer-crc32/download/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true }, "buffer-fill": { "version": "1.0.0", @@ -182,13 +256,15 @@ }, "buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", - "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npm.taobao.org/cacheable-request/download/cacheable-request-6.1.0.tgz?cache=0&sync_timestamp=1579607091967&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacheable-request%2Fdownload%2Fcacheable-request-6.1.0.tgz", "integrity": "sha1-IP+4vRYrpL4R6VZ9gj22UQUsqRI=", + "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -203,6 +279,7 @@ "version": "5.1.0", "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.1.0.tgz", "integrity": "sha1-ASA83JJZf5uQkGfD5lbMH008Tck=", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -210,10 +287,33 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-2.0.0.tgz", - "integrity": "sha1-JgPni3tLAAbLyi+8yKMgJVislHk=" + "integrity": "sha1-JgPni3tLAAbLyi+8yKMgJVislHk=", + "dev": true } } }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npm.taobao.org/chromium-pickle-js/download/chromium-pickle-js-0.2.0.tgz", @@ -224,10 +324,26 @@ "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/clone-response/download/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1587782011624&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", @@ -248,19 +364,59 @@ }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", - "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "config-chain": { "version": "1.1.12", "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz", "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=", + "dev": true, "optional": true, "requires": { "ini": "^1.3.4", @@ -271,12 +427,14 @@ "version": "3.6.5", "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.5.tgz", "integrity": "sha1-c5XcJzrzf7LlDpvT2f6EEoUjHRo=", + "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cross-zip": { "version": "3.1.0", @@ -304,6 +462,24 @@ "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", "dev": true }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -323,19 +499,28 @@ "version": "3.3.0", "resolved": "https://registry.npm.taobao.org/decompress-response/download/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npm.taobao.org/defer-to-connect/download/defer-to-connect-1.1.3.tgz", - "integrity": "sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE=" + "integrity": "sha1-MxrgUMCNz3ifjIOnuB8O2U9KxZE=", + "dev": true }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, "optional": true, "requires": { "object-keys": "^1.0.12" @@ -345,36 +530,66 @@ "version": "1.1.1", "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true, "optional": true } } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, "detect-node": { "version": "2.0.4", "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz", "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=", + "dev": true, "optional": true }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npm.taobao.org/duplexer3/download/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } }, "electron": { - "version": "9.0.2", - "resolved": "https://registry.npm.taobao.org/electron/download/electron-9.0.2.tgz", - "integrity": "sha1-NhkkzoMzlvGkWsIZX0QrkutPj10=", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/electron/-/electron-5.0.13.tgz", + "integrity": "sha512-AM73AMZpb/5zm8eIXsIcp2eMdniD5WO+FqMtlIzhhtSjixflDm0pLtgudz0fHtiT/w6V+6YcpDVb4TtHtrJbHQ==", + "dev": true, "requires": { - "@electron/get": "^1.0.1", - "@types/node": "^12.0.12", + "@types/node": "^10.12.18", + "electron-download": "^4.1.0", "extract-zip": "^1.0.3" - }, - "dependencies": { - "@types/node": { - "version": "12.12.44", - "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.44.tgz", - "integrity": "sha1-DUAKFFOtyzWbEzrM6uTdi7DgoVk=" - } + } + }, + "electron-download": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz", + "integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==", + "dev": true, + "requires": { + "debug": "^3.0.0", + "env-paths": "^1.0.0", + "fs-extra": "^4.0.1", + "minimist": "^1.2.0", + "nugget": "^2.0.1", + "path-exists": "^3.0.0", + "rc": "^1.2.1", + "semver": "^5.4.1", + "sumchecker": "^2.0.2" } }, "electron-notarize": { @@ -497,16 +712,24 @@ "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, "optional": true }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1569416272686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz", "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, "requires": { "once": "^1.4.0" } }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -520,18 +743,27 @@ "version": "4.1.1", "resolved": "https://registry.npm.taobao.org/es6-error/download/es6-error-4.1.1.tgz", "integrity": "sha1-njr0B0Wd7tR+mpH5uIWoTrBcVh0=", + "dev": true, "optional": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz?cache=0&sync_timestamp=1587627395453&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-4.0.0.tgz", "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "dev": true, "optional": true }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extract-zip": { "version": "1.7.0", - "resolved": "https://registry.npm.taobao.org/extract-zip/download/extract-zip-1.7.0.tgz", - "integrity": "sha1-VWzDrp339FLEk6DPtRzDAneUCSc=", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, "requires": { "concat-stream": "^1.6.2", "debug": "^2.6.9", @@ -541,40 +773,84 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1589881689076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } }, "minimist": { "version": "1.2.5", - "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz", - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "mkdirp": { "version": "0.5.5", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz", - "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { "minimist": "^1.2.5" } }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, "fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/fd-slicer/download/fd-slicer-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, "requires": { "pend": "~1.2.0" } }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, "flora-colossus": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/flora-colossus/download/flora-colossus-1.0.1.tgz", @@ -607,6 +883,23 @@ } } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -721,14 +1014,30 @@ } } }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz", "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, "requires": { "pump": "^3.0.0" } }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz", @@ -747,6 +1056,7 @@ "version": "2.1.12", "resolved": "https://registry.npm.taobao.org/global-agent/download/global-agent-2.1.12.tgz", "integrity": "sha1-5K44Ercxqegcv4Jfk3fvRQqOQZU=", + "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -762,6 +1072,7 @@ "version": "7.3.2", "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.2.tgz", "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true, "optional": true } } @@ -770,6 +1081,7 @@ "version": "2.7.1", "resolved": "https://registry.npm.taobao.org/global-tunnel-ng/download/global-tunnel-ng-2.7.1.tgz", "integrity": "sha1-0DtRAt/eOmmRT17n2GdhyjXVfY8=", + "dev": true, "optional": true, "requires": { "encodeurl": "^1.0.2", @@ -782,6 +1094,7 @@ "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/globalthis/download/globalthis-1.0.1.tgz", "integrity": "sha1-QBFvXZwHH56PsAN2VN8as6g7fvk=", + "dev": true, "optional": true, "requires": { "define-properties": "^1.1.3" @@ -791,6 +1104,7 @@ "version": "9.6.0", "resolved": "https://registry.npm.taobao.org/got/download/got-9.6.0.tgz", "integrity": "sha1-7fRefWf5lUVwXeH3u+7rEhdl7YU=", + "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -808,7 +1122,24 @@ "graceful-fs": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } }, "hosted-git-info": { "version": "2.7.1", @@ -819,7 +1150,28 @@ "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz", - "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=" + "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } }, "inflight": { "version": "1.0.6", @@ -834,13 +1186,14 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "optional": true + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -848,10 +1201,38 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "isarray": { + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, "isbinaryfile": { "version": "3.0.3", @@ -862,25 +1243,63 @@ "buffer-alloc": "^1.2.0" } }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/json-buffer/download/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "optional": true + "dev": true }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "junk": { "version": "3.1.0", "resolved": "https://registry.npm.taobao.org/junk/download/junk-3.1.0.tgz", @@ -891,10 +1310,24 @@ "version": "3.1.0", "resolved": "https://registry.npm.taobao.org/keyv/download/keyv-3.1.0.tgz", "integrity": "sha1-7MIoSG9pmR5J6UdkhaW+Ho/FxNk=", + "dev": true, "requires": { "json-buffer": "3.0.0" } }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz", @@ -916,24 +1349,76 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/lowercase-keys/download/lowercase-keys-1.0.1.tgz", - "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=" + "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/matcher/download/matcher-3.0.0.tgz", "integrity": "sha1-vZBg9MW3CqgEHMxvgDaHYJlPMMo=", + "dev": true, "optional": true, "requires": { "escape-string-regexp": "^4.0.0" } }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npm.taobao.org/mimic-response/download/mimic-response-1.0.1.tgz", - "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=" + "integrity": "sha1-SSNTiHju9CBjy4o+OweYeBSHqxs=", + "dev": true }, "minimatch": { "version": "3.0.4", @@ -970,7 +1455,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "normalize-package-data": { "version": "2.5.0", @@ -987,12 +1473,14 @@ "normalize-url": { "version": "4.5.0", "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-4.5.0.tgz", - "integrity": "sha1-RTNUCH5sqWlXvY9br3U/WYIUISk=" + "integrity": "sha1-RTNUCH5sqWlXvY9br3U/WYIUISk=", + "dev": true }, "npm-conf": { "version": "1.1.3", "resolved": "https://registry.npm.taobao.org/npm-conf/download/npm-conf-1.1.3.tgz", "integrity": "sha1-JWzEe9DiGMJZxOlVC/QTvCGSr/k=", + "dev": true, "optional": true, "requires": { "config-chain": "^1.1.11", @@ -1003,14 +1491,72 @@ "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, "optional": true } } }, + "nugget": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "requires": { + "debug": "^2.1.3", + "minimist": "^1.1.0", + "pretty-bytes": "^1.0.2", + "progress-stream": "^1.1.0", + "request": "^2.45.0", + "single-line-log": "^1.1.2", + "throttleit": "0.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -1018,7 +1564,8 @@ "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npm.taobao.org/p-cancelable/download/p-cancelable-1.1.0.tgz", - "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=" + "integrity": "sha1-0HjRWjr0CSIMiG8dmgyi5EGrJsw=", + "dev": true }, "p-limit": { "version": "1.3.0", @@ -1080,10 +1627,28 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, "pend": { "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "pify": { "version": "2.3.0", @@ -1091,6 +1656,21 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "plist": { "version": "3.0.1", "resolved": "https://registry.npm.taobao.org/plist/download/plist-3.0.1.tgz", @@ -1105,51 +1685,172 @@ "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.1.0" + } }, "process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", - "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npm.taobao.org/progress/download/progress-2.0.3.tgz", - "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=" + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "requires": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true, "optional": true }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "rcedit": { "version": "2.2.0", "resolved": "https://registry.npm.taobao.org/rcedit/download/rcedit-2.2.0.tgz", "integrity": "sha1-O/5xJIdJ+oIf7ybto9NfTg7kevw=", "dev": true }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", - "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, "resolve": { @@ -1165,6 +1866,7 @@ "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/responselike/download/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "requires": { "lowercase-keys": "^1.0.0" } @@ -1182,6 +1884,7 @@ "version": "2.15.3", "resolved": "https://registry.npm.taobao.org/roarr/download/roarr-2.15.3.tgz", "integrity": "sha1-ZSSKKRoVrz6/12fL9+RMtALR2DY=", + "dev": true, "optional": true, "requires": { "boolean": "^3.0.0", @@ -1193,14 +1896,22 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129611964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npm.taobao.org/sanitize-filename/download/sanitize-filename-1.6.3.tgz", "integrity": "sha1-dV69dSBFkxl34wsgJdNA18kJA3g=", + "dev": true, "requires": { "truncate-utf8-bytes": "^1.0.0" } @@ -1215,17 +1926,34 @@ "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz", "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true, "optional": true }, "serialize-error": { "version": "7.0.1", "resolved": "https://registry.npm.taobao.org/serialize-error/download/serialize-error-7.0.1.tgz?cache=0&sync_timestamp=1589282114914&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-error%2Fdownload%2Fserialize-error-7.0.1.tgz", "integrity": "sha1-8TYLBEf2H/tIPsQVfHN/q313jhg=", + "dev": true, "optional": true, "requires": { "type-fest": "^0.13.1" } }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true, + "requires": { + "string-width": "^1.0.1" + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -1258,18 +1986,126 @@ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz", "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=", + "dev": true, "optional": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "sumchecker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz", + "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" } }, "tmp": { @@ -1294,12 +2130,30 @@ "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/to-readable-stream/download/to-readable-stream-1.0.0.tgz", - "integrity": "sha1-zgqgwvPfat+FLvtASng+d8BHV3E=" + "integrity": "sha1-zgqgwvPfat+FLvtASng+d8BHV3E=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/truncate-utf8-bytes/download/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "dev": true, "requires": { "utf8-byte-length": "^1.0.1" } @@ -1308,18 +2162,36 @@ "version": "0.0.6", "resolved": "https://registry.npm.taobao.org/tunnel/download/tunnel-0.0.6.tgz", "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", + "dev": true, "optional": true }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "type-fest": { "version": "0.13.1", "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.13.1.tgz?cache=0&sync_timestamp=1590463280921&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.13.1.tgz", "integrity": "sha1-AXLLW86AsL1ULqNI21DH4hg02TQ=", + "dev": true, "optional": true }, "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "typescript": { "version": "3.5.3", @@ -1330,12 +2202,23 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/url-parse-lax/download/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "requires": { "prepend-http": "^2.0.0" } @@ -1343,12 +2226,20 @@ "utf8-byte-length": { "version": "1.0.4", "resolved": "https://registry.npm.taobao.org/utf8-byte-length/download/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" + "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", + "dev": true }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", @@ -1360,10 +2251,22 @@ "spdx-expression-parse": "^3.0.0" } }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "xmlbuilder": { "version": "9.0.7", @@ -1377,6 +2280,15 @@ "integrity": "sha1-t2yaG9nwqXN+WnLcNyMc84N14v8=", "dev": true }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + }, "yargs-parser": { "version": "16.1.0", "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-16.1.0.tgz", @@ -1397,8 +2309,9 @@ }, "yauzl": { "version": "2.10.0", - "resolved": "https://registry.npm.taobao.org/yauzl/download/yauzl-2.10.0.tgz", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/package.json b/package.json index 6f598ec..45f3e2c 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,17 @@ { "name": "google-translate-electron", "author": "mattuy", - "version": "0.1.1", + "version": "0.2.0", "main": "./src/index.js", "description": "Google Translate for Windows Desktop, built with Electron", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "electron .", - "package": "electron-packager ./ --overwrite --win --out ./bin --icon ./appicon.ico --app-copyright \"copyright@mattuy\" --win32metadata.CompanyName=\"\"" + "package-win": "electron-packager ./ --overwrite --platform=win32 --arch=x64,ia32 --out ./bin --icon ./appicon.ico --app-copyright \"copyright@mattuy\" --win32metadata.CompanyName=\"\"", + "package-linux": "electron-packager ./ --overwrite --platform=linux --arch=x64,ia32,arm64 --out ./bin --icon ./appicon.png" }, - "productName": "Google Translate Desktop", - "originalFilename": "Google Translate Desktop", + "productName": "google-translate-electron", + "originalFilename": "google-translate-electron", "dependencies": { "lodash": "^4.17.15" }, diff --git a/src/assets/icon.png b/src/assets/icon.png new file mode 100644 index 0000000..ae7e48e Binary files /dev/null and b/src/assets/icon.png differ diff --git a/src/config.js b/src/config.js index 8661222..57af814 100644 --- a/src/config.js +++ b/src/config.js @@ -1,6 +1,5 @@ const fs = require('fs'); const { promisify } = require('util'); -const toast = require('./notify'); const { debounce } = require('lodash'); const config = { @@ -14,7 +13,8 @@ const config = { extraCssForMini: '', minimizeToTrayWhenClose: true, minimizeToTrayWenStart: true, - keepActiveInterval: 60000 + keepActiveInterval: 60000, + skipTrayIcon: false }; try { @@ -31,7 +31,8 @@ async function flushConfig() { await flush('./config.json', JSON.stringify(config, null, 4)); } catch { - toast.show("保存配置失败。", { messageType: 'error' }); + const { notify } = require('./tools'); + notify("保存配置失败。", { messageType: 'error' }); } } diff --git a/src/index.js b/src/index.js index 670f5c6..fc8b07a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,34 +1,53 @@ -const path = require('path'); -const { app, globalShortcut, BrowserWindow, Menu, Tray } = require('electron'); -const { createMiniWindow, toggleMiniWindowVisibility } = require('./mini'); -const { createMainWindow, toggleMainWindowVisibility } = require('./main'); +const { app, globalShortcut, BrowserWindow } = require('electron'); +const { config } = require('./config'); +const { createMainWindow } = require('./main'); +const { createMiniWindow } = require('./mini'); const getMenu = require('./menu'); -const { config, flushConfig } = require('./config'); -const toast = require('./notify'); -const main = require('./main'); - -//将tray保存到全局变量,防止其被自动回收 -let tray; +const { + initialSetup, + notify, + dismissNotify, + toggleMiniShortcut, + toggleTrayIcon, +} = require('./tools'); /** @type BrowserWindow */ let mainWindow; /** @type BrowserWindow */ let miniWindow; -app.on('ready', () => { - setupTray(); - toggleAutoStart(true); +// 保证单一实例 +const gotTheLock = app.requestSingleInstanceLock() +if (!gotTheLock) { + app.exit(); + return; +} +app.on('second-instance', (event, commandLine, workingDirectory) => { + if (mainWindow) { + mainWindow.show(); + if (mainWindow.isMinimized()) { + mainWindow.restore(); + } + mainWindow.focus(); + } +}) +app.on('ready', () => { mainWindow = createMainWindow(); + miniWindow = createMiniWindow(); + initialSetup(mainWindow, miniWindow); mainWindow.on('close', ev => { if (config.minimizeToTrayWhenClose) { ev.preventDefault(); mainWindow.hide(); } + else { + app.quit(); + } }); mainWindow.on('closed', () => { if (miniWindow) { - toast.dismiss(); + dismissNotify(); globalShortcut.unregisterAll(); miniWindow.destroy(); } @@ -51,18 +70,19 @@ app.on('ready', () => { mainWindow.show(); } else { - toast.show("Google Translate Desktop已在后台运行。", null, { + notify("Google Translate Electron已在后台运行。", null, { use: 'notification', clickCallback: () => mainWindow.show() }); } + toggleTrayIcon(config.skipTrayIcon); registerMiniWindow(); const mainMenu = getMenu(mainWindow, miniWindow, mainWindow); mainWindow.setMenu(mainMenu); }); + function registerMiniWindow() { - miniWindow = createMiniWindow(); miniWindow.setParentWindow(mainWindow); const miniMenu = getMenu(mainWindow, miniWindow, miniWindow); miniWindow.setMenu(miniMenu); @@ -71,74 +91,3 @@ function registerMiniWindow() { } } -function setupTray() { - tray = new Tray(path.resolve(__dirname, 'assets/icon.ico')); - const contextMenu = Menu.buildFromTemplate([ - { label: "显示主界面", click: () => toggleMainWindowVisibility(mainWindow) }, - { label: "显示Mini窗口", click: () => toggleMiniWindowVisibility(miniWindow, mainWindow) }, - { - type: 'checkbox', - label: "开机启动", - checked: config.autoStart, - click: menu => menu.checked = toggleAutoStart() - }, - { - type: 'checkbox', - label: "启用MINI窗口快捷键", - checked: config.miniWindowEnabled, - click: menu => menu.checked = toggleMiniShortcut() - }, - { label: "退出", click: () => app.exit() } - ]); - tray.setToolTip("Google Translate Desktop"); - tray.on('click', () => toggleMainWindowVisibility(mainWindow)); - tray.setContextMenu(contextMenu); -} - -function toggleAutoStart(initial) { - if (!initial) { - config.autoStart = !config.autoStart; - } - app.setLoginItemSettings({ - openAtLogin: config.autoStart, - path: process.execPath, - openAsHidden: false, - args: [ - '--autoStart' - ] - }); - if (config.autoStart) { - toast.show("已允许Google Translate Desktop在您登录时自动启动。", "提示"); - } - else { - toast.show("已禁止Google Translate Desktop在您登录时自动启动。", "提示"); - } - if (!initial) { - flushConfig(); - } - return config.autoStart; -} - -//启用/禁用mini窗口快捷键 -function toggleMiniShortcut(initial) { - let enabled = initial ? config.miniWindowEnabled : !config.miniWindowEnabled; - let success = true; - if (enabled) { - if (!globalShortcut.register(config.miniShortcut, () => toggleMiniWindowVisibility(miniWindow, mainWindow))) { - toast.show("快捷键注册失败,请检查设置的快捷键是否被其他软件占用。", "错误", { - type: 'error' - }); - success = false; - } - } - else { - globalShortcut.unregister(config.miniShortcut); - } - if (success) { - config.miniWindowEnabled = enabled; - if (!initial) { - flushConfig(); - } - } - return enabled; -} diff --git a/src/main.js b/src/main.js index 1ee6ef6..e367438 100644 --- a/src/main.js +++ b/src/main.js @@ -6,7 +6,7 @@ function createMainWindow() { const win = new BrowserWindow({ width: config.mainWindowWidth, height: config.mainWindowHeight, - icon: path.resolve(__dirname, './assets/icon.ico'), + icon: path.resolve(__dirname, './assets/icon.png'), title: 'Google Translate', show: false, webPreferences: { diff --git a/src/menu.js b/src/menu.js index c57b90a..832ff2b 100644 --- a/src/menu.js +++ b/src/menu.js @@ -1,4 +1,5 @@ -const { Menu } = require('electron'); +const { app, Menu } = require('electron'); +const { toggleTrayIcon } = require('./tools'); function getMenu(/** @type Electron.BrowserWindow */mainWindow, miniWindow, current) { const template = [{ @@ -25,8 +26,12 @@ function getMenu(/** @type Electron.BrowserWindow */mainWindow, miniWindow, curr click: () => current.webContents.openDevTools() }, { - label: "退出", - role: 'quit' + label: "显示托盘图标", + click: () => toggleTrayIcon() + }, + { + label: "退出程序", + click: () => app.exit(0) } ]) }]; diff --git a/src/mini.js b/src/mini.js index 392f294..e4347da 100644 --- a/src/mini.js +++ b/src/mini.js @@ -2,13 +2,6 @@ const path = require('path'); const { BrowserWindow } = require('electron'); const { config } = require('./config'); -const miniControl = { - /** 迷你窗口是否处于可视区域 */ - isMiniWindowVisible: true, - previousPos: null -} - - function createMiniWindow () { let miniWindow = new BrowserWindow({ width: 500, @@ -17,7 +10,7 @@ function createMiniWindow () { minHeight: 315, maxWidth: 500, maxHeight: 315, - icon: path.resolve(__dirname, './assets/icon.ico'), + icon: path.resolve(__dirname, './assets/icon.png'), webPreferences: { nodeIntegration: false }, @@ -29,7 +22,6 @@ function createMiniWindow () { alwaysOnTop: true, fullscreenable: false, skipTaskbar: false, - }); miniWindow.on('focus', () => { @@ -94,14 +86,11 @@ function createMiniWindow () { miniWindow.insertCSS(config.extraCssForMini); } }); - miniControl.previousPos = miniWindow.getPosition(); - toggleMiniWindowVisibility(miniWindow); - miniWindow.show(); let interval = config.keepActiveInterval | 0; if (miniWindow && interval !== 0) { interval = Math.max(1000, interval); setInterval(() => { - if (!miniControl.isMiniWindowVisible) { + if (!miniWindow.isVisible()) { miniWindow.webContents.executeJavaScript(` var source = document.getElementById('source'); if (source) { @@ -114,28 +103,17 @@ function createMiniWindow () { return miniWindow; } -function toggleMiniWindowVisibility(window, mainWindow) { - if (!window) { return; } - miniControl.isMiniWindowVisible = !miniControl.isMiniWindowVisible; - if (miniControl.isMiniWindowVisible) { - if (miniControl.previousPos) { - window.setPosition(...miniControl.previousPos); - } - else { - window.show(); - } - if (!mainWindow || !mainWindow.isVisible()) { - window.setSkipTaskbar(false); - } - clearInput(window); - focusInput(window); - window.focus(); +function toggleMiniWindowVisibility(miniWindow, mainWindow) { + if (!miniWindow) { return; } + if (miniWindow.isVisible()) { + miniWindow.hide(); + clearInput(miniWindow); } else { - miniControl.previousPos = window.getPosition(); - window.setPosition(-1000, -1000, false); - window.setSkipTaskbar(true); - clearInput(window); + miniWindow.show(); + clearInput(miniWindow); + focusInput(miniWindow); + miniWindow.focus(); } } diff --git a/src/notify.js b/src/notify.js deleted file mode 100644 index 7f0d5d8..0000000 --- a/src/notify.js +++ /dev/null @@ -1,38 +0,0 @@ -const path = require('path'); -const { Notification, dialog } = require('electron'); - -let current = null; - -function notify(message, title, ops) { - const use = ops ? ops.use : 'auto'; - if (use === 'dialog' || (!Notification.isSupported() && use !== 'notification')) { - let options = { message, title: title || "信息" }; - if (ops && ops.messageType) { - options.type = ops.messageType; - } - dialog.showMessageBox(null, options); - return; - } - if (current) { - current.close(); - } - current = new Notification({ - title: "Google Translate Desktop", - body: message, - subtitle: ops && ops.subtitle, - icon: path.resolve(__dirname, './assets/icon.ico') - }); - current.show(); - if (ops && ops.clickCallback) { - current.on('click', ops.clickCallback); - } -} - -function dismiss() { - current && current.close(); -} - -module.exports = { - show: notify, - dismiss -}; diff --git a/src/tools.js b/src/tools.js new file mode 100644 index 0000000..0feacf4 --- /dev/null +++ b/src/tools.js @@ -0,0 +1,151 @@ +const { app, globalShortcut, ipcMain } = require('electron'); +const path = require('path'); +const { Menu, Tray, Notification, dialog } = require('electron'); +const { config, flushConfig } = require('./config'); +const { toggleMainWindowVisibility } = require('./main'); +const { toggleMiniWindowVisibility } = require('./mini'); + + +let mainWindow, miniWindow, tray, currentNotification; + +function initialSetup(_mainWindow, _miniWindow) { + mainWindow = _mainWindow; + miniWindow = _miniWindow; +} +//启用/禁用mini窗口快捷键 +function toggleMiniShortcut(initial) { + let enabled = initial ? config.miniWindowEnabled : !config.miniWindowEnabled; + let success = true; + if (enabled) { + if (!globalShortcut.register(config.miniShortcut, () => toggleMiniWindowVisibility(miniWindow, mainWindow))) { + notify("快捷键注册失败,请检查设置的快捷键是否被其他软件占用。", "错误", { + type: 'error' + }); + success = false; + } + } + else { + globalShortcut.unregister(config.miniShortcut); + } + if (success) { + config.miniWindowEnabled = enabled; + if (!initial) { + flushConfig(); + } + } + return enabled; +} + +//切换是否自动启动 +function toggleAutoStart(initial) { + if (!initial) { + config.autoStart = !config.autoStart; + } + app.setLoginItemSettings({ + openAtLogin: config.autoStart, + path: process.execPath, + openAsHidden: false, + args: [ + '--autoStart' + ] + }); + if (config.autoStart) { + notify("已允许Google Translate Electron在您登录时自动启动。", "提示"); + } + else { + notify("已禁止Google Translate Electron在您登录时自动启动。", "提示"); + } + if (!initial) { + flushConfig(); + } + return config.autoStart; +} + +function notify(message, title, ops) { + const use = ops ? ops.use : 'auto'; + if (use === 'dialog' || (!Notification.isSupported() && use !== 'notification')) { + let options = { message, title: title || "信息" }; + if (ops && ops.messageType) { + options.type = ops.messageType; + } + dialog.showMessageBox(null, options); + return; + } + if (currentNotification) { + currentNotification.close(); + } + let extName = process.platform === 'win32' ? 'ico' : 'png'; + currentNotification = new Notification({ + title: "Google Translate Electron", + body: message, + subtitle: ops && ops.subtitle, + icon: path.resolve(__dirname, './assets/icon.' + extName) + }); + currentNotification.show(); + if (ops && ops.clickCallback) { + currentNotification.on('click', ops.clickCallback); + } +} + +function dismissNotify() { + currentNotification && currentNotification.close(); +} + +function setupTrayIcon() { + if (tray) { return; } + let extName = process.platform === 'win32' ? 'ico' : 'png'; + tray = new Tray(path.resolve(__dirname, 'assets/icon.' + extName)); + const contextMenu = Menu.buildFromTemplate([ + { label: "显示主界面", click: () => toggleMainWindowVisibility(mainWindow) }, + { label: "显示Mini窗口", click: () => toggleMiniWindowVisibility(miniWindow, mainWindow) }, + { + type: 'checkbox', + label: "开机启动", + checked: config.autoStart, + click: menu => menu.checked = toggleAutoStart() + }, + { + type: 'checkbox', + label: "启用MINI窗口快捷键", + checked: config.miniWindowEnabled, + click: menu => menu.checked = toggleMiniShortcut() + }, + { label: "退出", click: () => app.exit() } + ]); + + tray.setTitle("Google Translate Electron"); + tray.setToolTip("Google Translate Electron"); + tray.on('click', () => toggleMainWindowVisibility(mainWindow)); + tray.setContextMenu(contextMenu); +} +function destroyTrayIcon() { + if (tray) { + tray.destroy(); + } + tray = null; +} +function toggleTrayIcon(show) { + if (typeof show === 'boolean') { + config.skipTrayIcon = show; + } + else { + config.skipTrayIcon = !config.skipTrayIcon; + } + if (config.skipTrayIcon) { + destroyTrayIcon(); + } + else { + setupTrayIcon(); + } + flushConfig(); +} + + +module.exports = { + initialSetup, + notify, + dismissNotify, + toggleTrayIcon, + toggleAutoStart, + toggleMiniShortcut, +} \ No newline at end of file