diff --git a/package-lock.json b/package-lock.json index d1dca185..2362cd1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "0.17.0", + "version": "0.18.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -26,33 +26,34 @@ } }, "@babel/compat-data": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.8.6.tgz", - "integrity": "sha1-fuqg36F+UMfZwIMlFe7gm1bwTjU=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.9.0.tgz?cache=0&sync_timestamp=1584718854366&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.9.0.tgz", + "integrity": "sha1-BIFVVvyQsMF0q9LAwbuWb6oDamw=", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.9.1", "invariant": "^2.2.4", "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.8.7.tgz?cache=0&sync_timestamp=1583373458796&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.8.7.tgz", - "integrity": "sha1-tpAX0iHM3rIDFFrp2iadcs8QLzs=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.9.0.tgz?cache=0&sync_timestamp=1584720334651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.9.0.tgz", + "integrity": "sha1-rJd7U4t34TL/cG87ik260JwDxW4=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.7", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.7", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.7", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -69,12 +70,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -110,20 +111,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -138,29 +139,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -195,14 +196,20 @@ } }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.1.tgz", - "integrity": "sha1-gbbLBOm6SW8ccAXQe0NoomOPkLY=", + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.2.tgz?cache=0&sync_timestamp=1584388298930&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.2.tgz", + "integrity": "sha1-Q+8fCvmDXdYkdRprf6SIdPstYI4=", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", @@ -263,12 +270,12 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -286,12 +293,12 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -319,12 +326,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -360,20 +367,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -388,29 +395,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -472,14 +479,14 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.8.6.tgz", - "integrity": "sha1-f6BAyX+4rr4SR6XGRTMMMtCDBms=", + "version": "7.8.8", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha1-XYQYC1iPVgt4ZO+u6okkPlgxIIc=", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", "@babel/helper-regex": "^7.8.3", - "regexpu-core": "^4.6.0" + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { @@ -523,20 +530,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -551,12 +558,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -603,12 +610,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -644,20 +651,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -672,29 +679,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -772,12 +779,12 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -794,12 +801,12 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -816,12 +823,12 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -829,9 +836,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.8.6.tgz", - "integrity": "sha1-ahO17srcNWkgRwc6ZOQpd7l2VKQ=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.9.0.tgz?cache=0&sync_timestamp=1584718808099&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.9.0.tgz", + "integrity": "sha1-Q7NN/hWWGRhwfSRzJ0MTiOn+luU=", "dev": true, "requires": { "@babel/helper-module-imports": "^7.8.3", @@ -839,7 +846,7 @@ "@babel/helper-simple-access": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", "@babel/template": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" }, "dependencies": { @@ -862,20 +869,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -890,12 +897,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -932,12 +939,12 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -982,12 +989,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -1023,20 +1030,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -1051,29 +1058,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1143,12 +1150,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -1184,20 +1191,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -1212,29 +1219,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1302,20 +1309,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -1330,12 +1337,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1371,6 +1378,12 @@ "@babel/types": "^7.4.4" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha1-rVNWKn/Cmzuakbv30QOX/RRjRu0=", + "dev": true + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.8.3.tgz", @@ -1393,12 +1406,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -1434,20 +1447,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -1462,29 +1475,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1533,14 +1546,14 @@ } }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.8.4.tgz?cache=0&sync_timestamp=1580388006568&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.8.4.tgz", - "integrity": "sha1-dU6z7nJ8Fl4KJA1sIH3nxFXzb3M=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.9.0.tgz", + "integrity": "sha1-qywbxIIa92bKtR1IaKUDiHTqWhI=", "dev": true, "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" }, "dependencies": { "@babel/code-frame": { @@ -1553,12 +1566,12 @@ } }, "@babel/generator": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz", - "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.9.0.tgz", + "integrity": "sha1-D2et6k7Dna1uYzRfcO7DMBTXjIk=", "dev": true, "requires": { - "@babel/types": "^7.8.7", + "@babel/types": "^7.9.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -1594,20 +1607,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -1622,29 +1635,29 @@ } }, "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz?cache=0&sync_timestamp=1582806154496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.8.6.tgz", - "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.9.0.tgz?cache=0&sync_timestamp=1584720333049&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.9.0.tgz", + "integrity": "sha1-04gsKDDlE/T+TOyf526hzHh0eJI=", "dev": true, "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", + "@babel/generator": "^7.9.0", "@babel/helper-function-name": "^7.8.3", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -1772,10 +1785,20 @@ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-proposal-object-rest-spread": { + "@babel/plugin-proposal-numeric-separator": { "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.8.3.tgz", - "integrity": "sha1-61rjZhGN3KZ77Vg7U9dVTK2ZUbs=", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha1-XWdpQJaZ7Js7aGhM2BFs7f+Tutg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.9.0.tgz?cache=0&sync_timestamp=1584718852115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.9.0.tgz", + "integrity": "sha1-oomTaZ/BPfFlmVNiaTliumsGHW8=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -1793,9 +1816,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.8.3.tgz", - "integrity": "sha1-rhCzIUyyX3rbHzvIe6QsoQt+JUM=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha1-MdsWsVTDnWuKZFKSRyuYOUwpKlg=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3", @@ -1803,12 +1826,12 @@ } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.3.tgz", - "integrity": "sha1-tkbDrepfmIAMmrRRBaw00GzUpH8=", + "version": "7.8.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha1-7jqV6QzcBP6M2S7DJ5+gF9aKDR0=", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-create-regexp-features-plugin": "^7.8.8", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -1848,6 +1871,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha1-Dj+2Pgm+obEelkZyccgwgAfnxB8=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", @@ -1924,9 +1956,9 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.8.6.tgz?cache=0&sync_timestamp=1582806192447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.8.6.tgz", - "integrity": "sha1-d1NER6R3y+WZWuSu4+OfvICQxG0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.9.0.tgz?cache=0&sync_timestamp=1584718850861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.9.0.tgz", + "integrity": "sha1-q4nBdez1tMiREZSqhleWZhUyTOk=", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.8.3", @@ -1978,20 +2010,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -2006,12 +2038,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -2048,9 +2080,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.8.3.tgz?cache=0&sync_timestamp=1578951936021&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-destructuring%2Fdownload%2F%40babel%2Fplugin-transform-destructuring-7.8.3.tgz", - "integrity": "sha1-IN372eRnaQaxBW7mCviFkMx6qgs=", + "version": "7.8.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.8.8.tgz", + "integrity": "sha1-+tsryOkMyvVljeb41NIv9icqL0s=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -2086,9 +2118,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.8.6", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.8.6.tgz?cache=0&sync_timestamp=1582805904560&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.8.6.tgz", - "integrity": "sha1-oFG9G0AsYa+Xon/1G0aDIcfCoIU=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.9.0.tgz?cache=0&sync_timestamp=1584718807470&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.9.0.tgz", + "integrity": "sha1-DyYOJ9PinNG7MSjaXnbHYapsEI4=", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -2134,20 +2166,20 @@ } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz?cache=0&sync_timestamp=1578951935730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.8.3.tgz", - "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.9.0.tgz", + "integrity": "sha1-TptFzLgreWBycbKXmtgse2gWMHk=", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz", - "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.9.0.tgz?cache=0&sync_timestamp=1584720331146&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.9.0.tgz", + "integrity": "sha1-+CGzIxPwfuVwl20/Yjjo0tZuCo4=", "dev": true }, "@babel/template": { @@ -2162,12 +2194,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -2213,47 +2245,47 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.8.3.tgz", - "integrity": "sha1-ZWBtRGFrUCJedvVXjzPFaKC4dqU=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.9.0.tgz?cache=0&sync_timestamp=1584718810466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.9.0.tgz", + "integrity": "sha1-GXVe5yGRLPW7BMB9UCgK80hO/vQ=", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.8.3.tgz", - "integrity": "sha1-3yUXBuwzG9BYo0vdcmE5FfgpKKU=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.9.0.tgz", + "integrity": "sha1-4+cvTLybSiYOML4OpZvfWjl0iUA=", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-simple-access": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.8.3.tgz", - "integrity": "sha1-2LvyIsHb42YfRA8vAMFum7fQ1CA=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.9.0.tgz?cache=0&sync_timestamp=1584718810247&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.9.0.tgz", + "integrity": "sha1-6f1Gopb8keAJtk4H3aqG1vDt65A=", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.8.3", - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.8.3", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.8.3.tgz", - "integrity": "sha1-WS1XjOBsUvW5iwL5E9ZT/+lyZho=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha1-6Qmsridv7CgPm4IaXzjh8ItIBpc=", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", "@babel/helper-plugin-utils": "^7.8.3" } }, @@ -2286,9 +2318,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.8.7.tgz?cache=0&sync_timestamp=1583373459270&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.8.7.tgz", - "integrity": "sha1-ZvovHeQSm04ER1CSI6xxvaSVU5U=", + "version": "7.8.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.8.8.tgz", + "integrity": "sha1-A4HeRmyF1UBFZSQ2YMRJZFlSXa8=", "dev": true, "requires": { "@babel/helper-call-delegate": "^7.8.7", @@ -2306,12 +2338,12 @@ } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -2421,12 +2453,12 @@ } }, "@babel/preset-env": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.8.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.8.7.tgz", - "integrity": "sha1-H8fYnH910tcMK2do3mwuBJs8uds=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.9.0.tgz", + "integrity": "sha1-pfxCSA6VCuj12fjyu8A/UnIt86g=", "dev": true, "requires": { - "@babel/compat-data": "^7.8.6", + "@babel/compat-data": "^7.9.0", "@babel/helper-compilation-targets": "^7.8.7", "@babel/helper-module-imports": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3", @@ -2434,14 +2466,16 @@ "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-json-strings": "^7.8.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", "@babel/plugin-syntax-async-generators": "^7.8.0", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-json-strings": "^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", @@ -2450,20 +2484,20 @@ "@babel/plugin-transform-async-to-generator": "^7.8.3", "@babel/plugin-transform-block-scoped-functions": "^7.8.3", "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.8.6", + "@babel/plugin-transform-classes": "^7.9.0", "@babel/plugin-transform-computed-properties": "^7.8.3", "@babel/plugin-transform-destructuring": "^7.8.3", "@babel/plugin-transform-dotall-regex": "^7.8.3", "@babel/plugin-transform-duplicate-keys": "^7.8.3", "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.8.6", + "@babel/plugin-transform-for-of": "^7.9.0", "@babel/plugin-transform-function-name": "^7.8.3", "@babel/plugin-transform-literals": "^7.8.3", "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.8.3", - "@babel/plugin-transform-modules-systemjs": "^7.8.3", - "@babel/plugin-transform-modules-umd": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", "@babel/plugin-transform-new-target": "^7.8.3", "@babel/plugin-transform-object-super": "^7.8.3", @@ -2477,8 +2511,9 @@ "@babel/plugin-transform-template-literals": "^7.8.3", "@babel/plugin-transform-typeof-symbol": "^7.8.4", "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/types": "^7.8.7", - "browserslist": "^4.8.5", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", "levenary": "^1.1.1", @@ -2486,22 +2521,35 @@ }, "dependencies": { "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz", - "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.9.0.tgz", + "integrity": "sha1-ALBkw9+DrTKy2/X/BzErFcfx77U=", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.0", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } } } }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.3.tgz", + "integrity": "sha1-EyQrU7XvjIg8PPfd3VWzbOgPvHI=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.8.7.tgz?cache=0&sync_timestamp=1583373718614&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.8.7.tgz", - "integrity": "sha1-j+/OmALbVIgbpZ+Quyhxm0mWMk0=", + "version": "7.9.0", + "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.9.0.tgz", + "integrity": "sha1-M37aZ0AfWwZqbyBaMRPUrBi6SVs=", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -2775,7 +2823,7 @@ "dependencies": { "postcss-selector-parser": { "version": "6.0.2", - "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz?cache=0&sync_timestamp=1582039646348&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.2.tgz", + "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz", "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=", "dev": true, "requires": { @@ -3745,22 +3793,94 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.6.tgz", - "integrity": "sha1-4zvbbzYrA/S7FBoMIauHxQG3Dfs=", + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584715910722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz", + "integrity": "sha1-xhHVESvVIJq+i5+oTD5NolJ18cM=", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.0.tgz?cache=0&sync_timestamp=1582379551272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.0.tgz", + "integrity": "sha1-BtYLlth7hFSlrauobnhU2mKdtLc=", + "dev": 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" + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.1.tgz", + "integrity": "sha1-VFFFB3xQFJHjOxXsQIwpQ3bpSuQ=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1584388298930&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz?cache=0&sync_timestamp=1584445207623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-utils%2Fdownload%2Floader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.3.tgz?cache=0&sync_timestamp=1584725805588&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.3.tgz", + "integrity": "sha1-WlFLcXklkoeVKIHpRBDsVGVln4w=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + } + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz", "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", "dev": true + }, + "schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.6.5.tgz", + "integrity": "sha1-x1jwp+YkJjBz05binNQKoQEVLYo=", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } } } }, @@ -6992,9 +7112,9 @@ } }, "electron-to-chromium": { - "version": "1.3.379", - "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.379.tgz", - "integrity": "sha1-gdxegqPnK7uDDZPhW8Ne2iu8kQ4=", + "version": "1.3.380", + "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.380.tgz?cache=0&sync_timestamp=1584763392925&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.380.tgz", + "integrity": "sha1-Hh8HCRtCtUvM0K1tOhTytztg3J0=", "dev": true }, "electron-updater": { @@ -7333,9 +7453,9 @@ } }, "eslint-config-standard": { - "version": "14.1.0", - "resolved": "https://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-14.1.0.tgz?cache=0&sync_timestamp=1566945938020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-standard%2Fdownload%2Feslint-config-standard-14.1.0.tgz", - "integrity": "sha1-sj2it2/louumaDdPJGRU5wWPFdQ=", + "version": "14.1.1", + "resolved": "https://registry.npm.taobao.org/eslint-config-standard/download/eslint-config-standard-14.1.1.tgz", + "integrity": "sha1-gwqOROeu995nRkl5rQa0BgJsVuo=", "dev": true }, "eslint-formatter-friendly": { @@ -8307,11 +8427,6 @@ "resolve-dir": "^1.0.1" } }, - "flac-metadata": { - "version": "0.1.1", - "resolved": "https://registry.npm.taobao.org/flac-metadata/download/flac-metadata-0.1.1.tgz", - "integrity": "sha1-wC+KBtJL1bad4rhVEsbkW9j5F2w=" - }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz", @@ -11660,9 +11775,9 @@ "dev": true }, "node-id3": { - "version": "0.1.14", - "resolved": "https://registry.npm.taobao.org/node-id3/download/node-id3-0.1.14.tgz", - "integrity": "sha1-ruJTX92blVny3W3YwZNQdc3OlgM=", + "version": "0.1.15", + "resolved": "https://registry.npm.taobao.org/node-id3/download/node-id3-0.1.15.tgz", + "integrity": "sha1-C8up+P+tGIjQmj+8eipXDV6ITxU=", "requires": { "iconv-lite": "^0.4.15" } @@ -13537,9 +13652,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha1-71Hg8OpK1CS3e/fLQfPgFccKPw4=", + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", "dev": true, "requires": { "regenerate": "^1.4.0" @@ -13552,9 +13667,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.14.2", - "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.2.tgz", - "integrity": "sha1-lJ2dh0aP+I1afkc067mUqJLeH/I=", + "version": "0.14.4", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.4.tgz", + "integrity": "sha1-UmaFeJZRjRYWp4oEeTN6MOqXTMc=", "dev": true, "requires": { "@babel/runtime": "^7.8.4", @@ -13641,17 +13756,17 @@ "dev": true }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.6.0.tgz", - "integrity": "sha1-IDfBizJ8/Oim/qKk7EQfJDKvuLY=", + "version": "4.7.0", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.0.tgz", + "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "registry-auth-token": { @@ -13679,9 +13794,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.3", - "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.3.tgz", - "integrity": "sha1-dBksWAXTXp9evjwftbQNQKijhGA=", + "version": "0.6.4", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz", + "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -15574,15 +15689,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha1-W0tCbgjROoA2Xg1lesemwexGonc=", + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha1-qcxsx85joKMCP8meNBuUQx1AWlc=", + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583945910569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", "dev": true }, "union-value": { diff --git a/package.json b/package.json index 6cf5a92e..922e5b38 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lx-music-desktop", - "version": "0.17.0", + "version": "0.18.0", "description": "一个免费的音乐下载助手", "main": "./dist/electron/main.js", "productName": "lx-music-desktop", @@ -141,13 +141,13 @@ }, "homepage": "https://github.com/lyswhut/lx-music-desktop#readme", "devDependencies": { - "@babel/core": "^7.8.7", + "@babel/core": "^7.9.0", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/polyfill": "^7.8.7", - "@babel/preset-env": "^7.8.7", + "@babel/preset-env": "^7.9.0", "autoprefixer": "^9.7.4", "babel-eslint": "^10.0.3", - "babel-loader": "^8.0.6", + "babel-loader": "^8.1.0", "babel-minify-webpack-plugin": "^0.3.1", "babel-preset-minify": "^0.5.1", "browserslist": "^4.10.0", @@ -164,9 +164,9 @@ "electron-builder": "^22.4.1", "electron-debug": "^3.0.1", "electron-devtools-installer": "^2.2.4", - "electron-to-chromium": "^1.3.379", + "electron-to-chromium": "^1.3.380", "eslint": "^6.8.0", - "eslint-config-standard": "^14.1.0", + "eslint-config-standard": "^14.1.1", "eslint-formatter-friendly": "^7.0.0", "eslint-loader": "^3.0.3", "eslint-plugin-html": "^6.0.0", @@ -209,11 +209,10 @@ "electron-log": "^4.1.0", "electron-store": "^5.1.1", "electron-updater": "^4.2.5", - "flac-metadata": "^0.1.1", "js-htmlencode": "^0.3.0", "lrc-file-parser": "^1.0.1", "needle": "^2.3.3", - "node-id3": "^0.1.14", + "node-id3": "^0.1.15", "request": "^2.88.2", "vue": "^2.6.11", "vue-electron": "^1.0.6", diff --git a/publish/changeLog.md b/publish/changeLog.md index 29d24a52..cabbe35f 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,5 +1,6 @@ ### 新增 +- 新增FLAC格式音乐标签信息写入 ### 优化 diff --git a/src/main/utils/flac-metadata/index.js b/src/main/utils/flac-metadata/index.js new file mode 100644 index 00000000..34641291 --- /dev/null +++ b/src/main/utils/flac-metadata/index.js @@ -0,0 +1,10 @@ +// https://github.com/claus/flac-metadata + +module.exports.Processor = require('./lib/Processor') + +module.exports.data = { + MetaDataBlock: require('./lib/data/MetaDataBlock'), + MetaDataBlockStreamInfo: require('./lib/data/MetaDataBlockStreamInfo'), + MetaDataBlockVorbisComment: require('./lib/data/MetaDataBlockVorbisComment'), + MetaDataBlockPicture: require('./lib/data/MetaDataBlockPicture'), +} diff --git a/src/main/utils/flac-metadata/lib/Processor.js b/src/main/utils/flac-metadata/lib/Processor.js new file mode 100644 index 00000000..239c793a --- /dev/null +++ b/src/main/utils/flac-metadata/lib/Processor.js @@ -0,0 +1,214 @@ +const Transform = require('stream').Transform + +const MetaDataBlock = require('./data/MetaDataBlock') +const MetaDataBlockStreamInfo = require('./data/MetaDataBlockStreamInfo') +const MetaDataBlockVorbisComment = require('./data/MetaDataBlockVorbisComment') +const MetaDataBlockPicture = require('./data/MetaDataBlockPicture') + +const STATE_IDLE = 0 +const STATE_MARKER = 1 +const STATE_MDB_HEADER = 2 +const STATE_MDB = 3 +const STATE_PASS_THROUGH = 4 + +class Processor extends Transform { + constructor(options) { + super(options) + // MDB types + this.MDB_TYPE_STREAMINFO = 0 + this.MDB_TYPE_PADDING = 1 + this.MDB_TYPE_APPLICATION = 2 + this.MDB_TYPE_SEEKTABLE = 3 + this.MDB_TYPE_VORBIS_COMMENT = 4 + this.MDB_TYPE_CUESHEET = 5 + this.MDB_TYPE_PICTURE = 6 + this.MDB_TYPE_INVALID = 127 + + this.state = STATE_IDLE + + this.isFlac = false + + this.buf = null + this.bufPos = 0 + + this.mdb = null + this.mdbLen = 0 + this.mdbLast = false + this.mdbPush = false + this.mdbLastWritten = false + + this.parseMetaDataBlocks = false + + if (!(this instanceof Processor)) return new Processor(options) + if (options && !!options.parseMetaDataBlocks) { this.parseMetaDataBlocks = true } + } + + _transform(chunk, enc, done) { + let chunkPos = 0 + let chunkLen = chunk.length + let isChunkProcessed = false + let _this = this + + function _safePush(minCapacity, persist, validate) { + let slice + let chunkAvailable = chunkLen - chunkPos + let isDone = (chunkAvailable + this.bufPos >= minCapacity) + validate = (typeof validate === 'function') ? validate : function() { return true } + if (isDone) { + // Enough data available + if (persist) { + // Persist the entire block so it can be parsed + if (this.bufPos > 0) { + // Part of this block's data is in backup buffer, copy rest over + chunk.copy(this.buf, this.bufPos, chunkPos, chunkPos + minCapacity - this.bufPos) + slice = this.buf.slice(0, minCapacity) + } else { + // Entire block fits in current chunk + slice = chunk.slice(chunkPos, chunkPos + minCapacity) + } + } else { + slice = chunk.slice(chunkPos, chunkPos + minCapacity - this.bufPos) + } + // Push block after validation + validate(slice, isDone) && _this.push(slice) + chunkPos += minCapacity - this.bufPos + this.bufPos = 0 + this.buf = null + } else { + // Not enough data available + if (persist) { + // Copy/append incomplete block to backup buffer + this.buf = this.buf || Buffer.alloc(minCapacity) + chunk.copy(this.buf, this.bufPos, chunkPos, chunkLen) + } else { + // Push incomplete block after validation + slice = chunk.slice(chunkPos, chunkLen) + validate(slice, isDone) && _this.push(slice) + } + this.bufPos += chunkLen - chunkPos + } + return isDone + }; + let safePush = _safePush.bind(this) + + while (!isChunkProcessed) { + switch (this.state) { + case STATE_IDLE: + this.state = STATE_MARKER + break + case STATE_MARKER: + if (safePush(4, true, this._validateMarker.bind(this))) { + this.state = this.isFlac ? STATE_MDB_HEADER : STATE_PASS_THROUGH + } else { + isChunkProcessed = true + } + break + case STATE_MDB_HEADER: + if (safePush(4, true, this._validateMDBHeader.bind(this))) { + this.state = STATE_MDB + } else { + isChunkProcessed = true + } + break + case STATE_MDB: + if (safePush(this.mdbLen, this.parseMetaDataBlocks, this._validateMDB.bind(this))) { + if (this.mdb.isLast) { + // This MDB has the isLast flag set to true. + // Ignore all following MDBs. + this.mdbLastWritten = true + } + this.emit('postprocess', this.mdb) + this.state = this.mdbLast ? STATE_PASS_THROUGH : STATE_MDB_HEADER + } else { + isChunkProcessed = true + } + break + case STATE_PASS_THROUGH: + safePush(chunkLen - chunkPos, false) + isChunkProcessed = true + break + } + } + + done() + } + + _validateMarker(slice, isDone) { + this.isFlac = (slice.toString('utf8', 0) === 'fLaC') + // TODO: completely bail out if file is not a FLAC? + return true + } + + _validateMDBHeader(slice, isDone) { + // Parse MDB header + let header = slice.readUInt32BE(0) + let type = (header >>> 24) & 0x7f + this.mdbLast = (((header >>> 24) & 0x80) !== 0) + this.mdbLen = header & 0xffffff + + // Create appropriate MDB object + // (data is injected later in _validateMDB, if parseMetaDataBlocks option is set to true) + switch (type) { + case Processor.MDB_TYPE_STREAMINFO: + this.mdb = new MetaDataBlockStreamInfo(this.mdbLast) + break + case Processor.MDB_TYPE_VORBIS_COMMENT: + this.mdb = new MetaDataBlockVorbisComment(this.mdbLast) + break + case Processor.MDB_TYPE_PICTURE: + this.mdb = new MetaDataBlockPicture(this.mdbLast) + break + case Processor.MDB_TYPE_PADDING: + case Processor.MDB_TYPE_APPLICATION: + case Processor.MDB_TYPE_SEEKTABLE: + case Processor.MDB_TYPE_CUESHEET: + case Processor.MDB_TYPE_INVALID: + default: + this.mdb = new MetaDataBlock(this.mdbLast, type) + break + } + + this.emit('preprocess', this.mdb) + + if (this.mdbLastWritten) { + // A previous MDB had the isLast flag set to true. + // Ignore all following MDBs. + this.mdb.remove() + } else { + // The consumer may change the MDB's isLast flag in the preprocess handler. + // Here that flag is updated in the MDB header. + if (this.mdbLast !== this.mdb.isLast) { + if (this.mdb.isLast) { + header |= 0x80000000 + } else { + header &= 0x7fffffff + } + slice.writeUInt32BE(header >>> 0, 0) + } + } + this.mdbPush = !this.mdb.removed + return this.mdbPush + } + + _validateMDB(slice, isDone) { + // Parse the MDB if parseMetaDataBlocks option is set to true + if (this.parseMetaDataBlocks && isDone) { + this.mdb.parse(slice) + } + return this.mdbPush + } + + _flush(done) { + // All chunks have been processed + // Clean up + this.state = STATE_IDLE + this.mdbLastWritten = false + this.isFlac = false + this.bufPos = 0 + this.buf = null + this.mdb = null + done() + } +} + +module.exports = Processor diff --git a/src/main/utils/flac-metadata/lib/data/MetaDataBlock.js b/src/main/utils/flac-metadata/lib/data/MetaDataBlock.js new file mode 100644 index 00000000..790dbc12 --- /dev/null +++ b/src/main/utils/flac-metadata/lib/data/MetaDataBlock.js @@ -0,0 +1,25 @@ +class MetaDataBlock { + constructor(isLast, type) { + this.isLast = isLast + this.type = type + this.error = null + this.hasData = false + this.removed = false + } + + remove() { + this.removed = true + } + + parse(buffer) { + } + + toString() { + let str = '[MetaDataBlock]' + str += ' type: ' + this.type + str += ', isLast: ' + this.isLast + return str + } +} + +module.exports = MetaDataBlock diff --git a/src/main/utils/flac-metadata/lib/data/MetaDataBlockPicture.js b/src/main/utils/flac-metadata/lib/data/MetaDataBlockPicture.js new file mode 100644 index 00000000..bf54476f --- /dev/null +++ b/src/main/utils/flac-metadata/lib/data/MetaDataBlockPicture.js @@ -0,0 +1,130 @@ +const MetaDataBlock = require('./MetaDataBlock') + +class MetaDataBlockPicture extends MetaDataBlock { + constructor(isLast) { + super(isLast, 6) + + this.pictureType = 0 + this.mimeType = '' + this.description = '' + this.width = 0 + this.height = 0 + this.bitsPerPixel = 0 + this.colors = 0 + this.pictureData = null + } + + static create(isLast, pictureType, mimeType, description, width, height, bitsPerPixel, colors, pictureData) { + let mdb = new MetaDataBlockPicture(isLast) + mdb.pictureType = pictureType + mdb.mimeType = mimeType + mdb.description = description + mdb.width = width + mdb.height = height + mdb.bitsPerPixel = bitsPerPixel + mdb.colors = colors + mdb.pictureData = pictureData + mdb.hasData = true + return mdb + } + + + parse(buffer) { + try { + let pos = 0 + + this.pictureType = buffer.readUInt32BE(pos) + pos += 4 + + let mimeTypeLength = buffer.readUInt32BE(pos) + this.mimeType = buffer.toString('utf8', pos + 4, pos + 4 + mimeTypeLength) + pos += 4 + mimeTypeLength + + let descriptionLength = buffer.readUInt32BE(pos) + this.description = buffer.toString('utf8', pos + 4, pos + 4 + descriptionLength) + pos += 4 + descriptionLength + + this.width = buffer.readUInt32BE(pos) + this.height = buffer.readUInt32BE(pos + 4) + this.bitsPerPixel = buffer.readUInt32BE(pos + 8) + this.colors = buffer.readUInt32BE(pos + 12) + pos += 16 + + let pictureDataLength = buffer.readUInt32BE(pos) + this.pictureData = Buffer.alloc(pictureDataLength) + buffer.copy(this.pictureData, 0, pos + 4, pictureDataLength) + + this.hasData = true + } catch (e) { + this.error = e + this.hasData = false + } + } + + publish() { + let pos = 0 + let size = this.getSize() + let buffer = Buffer.alloc(4 + size) + + let header = size + header |= (this.type << 24) + header |= (this.isLast ? 0x80000000 : 0) + buffer.writeUInt32BE(header >>> 0, pos) + pos += 4 + + buffer.writeUInt32BE(this.pictureType, pos) + pos += 4 + + let mimeTypeLen = Buffer.byteLength(this.mimeType) + buffer.writeUInt32BE(mimeTypeLen, pos) + buffer.write(this.mimeType, pos + 4) + pos += 4 + mimeTypeLen + + let descriptionLen = Buffer.byteLength(this.description) + buffer.writeUInt32BE(descriptionLen, pos) + buffer.write(this.description, pos + 4) + pos += 4 + descriptionLen + + buffer.writeUInt32BE(this.width, pos) + buffer.writeUInt32BE(this.height, pos + 4) + buffer.writeUInt32BE(this.bitsPerPixel, pos + 8) + buffer.writeUInt32BE(this.colors, pos + 12) + pos += 16 + + buffer.writeUInt32BE(this.pictureData.length, pos) + this.pictureData.copy(buffer, pos + 4) + + return buffer + } + + getSize() { + let size = 4 + size += 4 + Buffer.byteLength(this.mimeType) + size += 4 + Buffer.byteLength(this.description) + size += 16 + size += 4 + this.pictureData.length + return size + } + + toString() { + let str = '[MetaDataBlockPicture]' + str += ' type: ' + this.type + str += ', isLast: ' + this.isLast + if (this.error) { + str += '\n ERROR: ' + this.error + } + if (this.hasData) { + str += '\n pictureType: ' + this.pictureType + str += '\n mimeType: ' + this.mimeType + str += '\n description: ' + this.description + str += '\n width: ' + this.width + str += '\n height: ' + this.height + str += '\n bitsPerPixel: ' + this.bitsPerPixel + str += '\n colors: ' + this.colors + str += '\n pictureData: ' + (this.pictureData ? this.pictureData.length : '') + } + return str + } +} + +module.exports = MetaDataBlockPicture diff --git a/src/main/utils/flac-metadata/lib/data/MetaDataBlockStreamInfo.js b/src/main/utils/flac-metadata/lib/data/MetaDataBlockStreamInfo.js new file mode 100644 index 00000000..645eef78 --- /dev/null +++ b/src/main/utils/flac-metadata/lib/data/MetaDataBlockStreamInfo.js @@ -0,0 +1,84 @@ +const MetaDataBlock = require('./MetaDataBlock') + +function pad(n, width) { + n = '' + n + return (n.length >= width) ? n : new Array(width - n.length + 1).join('0') + n +} + +class MetaDataBlockStreamInfo extends MetaDataBlock { + constructor(isLast) { + super(isLast, 0) + + this.minBlockSize = 0 + this.maxBlockSize = 0 + this.minFrameSize = 0 + this.maxFrameSize = 0 + this.sampleRate = 0 + this.channels = 0 + this.bitsPerSample = 0 + this.samples = 0 + this.checksum = null + this.duration = 0 + this.durationStr = '0:00.000' + } + + remove() { + console.error("WARNING: Can't remove StreamInfo block!") + } + + parse(buffer) { + try { + let pos = 0 + + this.minBlockSize = buffer.readUInt16BE(pos) + this.maxBlockSize = buffer.readUInt16BE(pos + 2) + this.minFrameSize = (buffer.readUInt8(pos + 4) << 16) | buffer.readUInt16BE(pos + 5) + this.maxFrameSize = (buffer.readUInt8(pos + 7) << 16) | buffer.readUInt16BE(pos + 8) + + let tmp = buffer.readUInt32BE(pos + 10) + this.sampleRate = tmp >>> 12 + this.channels = (tmp >>> 9) & 0x07 + this.bitsPerSample = (tmp >>> 4) & 0x1f + this.samples = +((tmp & 0x0f) << 4) + buffer.readUInt32BE(pos + 14) + + this.checksum = Buffer.alloc(16) + buffer.copy(this.checksum, 0, 18, 34) + + this.duration = this.samples / this.sampleRate + + let minutes = '' + Math.floor(this.duration / 60) + let seconds = pad(Math.floor(this.duration % 60), 2) + let milliseconds = pad(Math.round(((this.duration % 60) - Math.floor(this.duration % 60)) * 1000), 3) + this.durationStr = minutes + ':' + seconds + '.' + milliseconds + + this.hasData = true + } catch (e) { + this.error = e + this.hasData = false + } + } + + toString() { + let str = '[MetaDataBlockStreamInfo]' + str += ' type: ' + this.type + str += ', isLast: ' + this.isLast + if (this.error) { + str += '\n ERROR: ' + this.error + } + if (this.hasData) { + str += '\n minBlockSize: ' + this.minBlockSize + str += '\n maxBlockSize: ' + this.maxBlockSize + str += '\n minFrameSize: ' + this.minFrameSize + str += '\n maxFrameSize: ' + this.maxFrameSize + str += '\n samples: ' + this.samples + str += '\n sampleRate: ' + this.sampleRate + str += '\n channels: ' + (this.channels + 1) + str += '\n bitsPerSample: ' + (this.bitsPerSample + 1) + str += '\n duration: ' + this.durationStr + str += '\n checksum: ' + (this.checksum ? this.checksum.toString('hex') : '') + } + return str + } +} + +module.exports = MetaDataBlockStreamInfo diff --git a/src/main/utils/flac-metadata/lib/data/MetaDataBlockVorbisComment.js b/src/main/utils/flac-metadata/lib/data/MetaDataBlockVorbisComment.js new file mode 100644 index 00000000..f7b7b21e --- /dev/null +++ b/src/main/utils/flac-metadata/lib/data/MetaDataBlockVorbisComment.js @@ -0,0 +1,105 @@ +const MetaDataBlock = require('./MetaDataBlock') + +class MetaDataBlockVorbisComment extends MetaDataBlock { + constructor(isLast) { + super(isLast, 4) + + this.vendor = '' + this.comments = [] + } + + static create(isLast, vendor, comments) { + let mdb = new MetaDataBlockVorbisComment(isLast) + mdb.vendor = vendor + mdb.comments = comments + mdb.hasData = true + return mdb + } + + parse(buffer) { + try { + let pos = 0 + + let vendorLen = buffer.readUInt32LE(pos) + let vendor = buffer.toString('utf8', pos + 4, pos + 4 + vendorLen) + this.vendor = vendor + pos += 4 + vendorLen + + let commentCount = buffer.readUInt32LE(pos) + pos += 4 + + while (commentCount-- > 0) { + let commentLen = buffer.readUInt32LE(pos) + let comment = buffer.toString('utf8', pos + 4, pos + 4 + commentLen) + this.comments.push(comment) + pos += 4 + commentLen + } + + this.hasData = true + } catch (e) { + this.error = e + this.hasData = false + } + } + + publish() { + let pos = 0 + let size = this.getSize() + let buffer = Buffer.alloc(4 + size) + + let header = size + header |= (this.type << 24) + header |= (this.isLast ? 0x80000000 : 0) + buffer.writeUInt32BE(header >>> 0, pos) + pos += 4 + let vendorLen = Buffer.byteLength(this.vendor) + buffer.writeUInt32LE(vendorLen, pos) + buffer.write(this.vendor, pos + 4) + pos += 4 + vendorLen + + let commentCount = this.comments.length + buffer.writeUInt32LE(commentCount, pos) + pos += 4 + + for (let i = 0; i < commentCount; i++) { + let comment = this.comments[i] + let commentLen = Buffer.byteLength(comment) + buffer.writeUInt32LE(commentLen, pos) + buffer.write(comment, pos + 4) + pos += 4 + commentLen + } + + return buffer + } + + getSize() { + let size = 8 + Buffer.byteLength(this.vendor) + for (let i = 0; i < this.comments.length; i++) { + size += 4 + Buffer.byteLength(this.comments[i]) + } + return size + } + + toString() { + let str = '[MetaDataBlockVorbisComment]' + str += ' type: ' + this.type + str += ', isLast: ' + this.isLast + if (this.error) { + str += '\n ERROR: ' + this.error + } + if (this.hasData) { + str += '\n vendor: ' + this.vendor + if (this.comments.length) { + str += '\n comments:' + for (let i = 0; i < this.comments.length; i++) { + str += '\n ' + this.comments[i].split('=').join(': ') + } + } else { + str += '\n comments: none' + } + } + return str + } +} + +module.exports = MetaDataBlockVorbisComment diff --git a/src/main/utils/flacMeta.js b/src/main/utils/flacMeta.js index e0150c25..64bfad45 100644 --- a/src/main/utils/flacMeta.js +++ b/src/main/utils/flacMeta.js @@ -1,32 +1,32 @@ const fs = require('fs') -const flac = require('flac-metadata') +const { Processor: FlacProcessor, data: { MetaDataBlockVorbisComment: FlacComment } } = require('./flac-metadata') +const vendor = 'reference libFLAC 1.2.1 20070917' module.exports = (filenPath, meta) => { const reader = fs.createReadStream(filenPath) const tempPath = filenPath + '.lxmtemp' const writer = fs.createWriteStream(tempPath) - const processor = new flac.Processor() + const flacProcessor = new FlacProcessor() if (meta.APIC) delete meta.APIC const comments = [] for (const key in meta) { comments.push(`${key.toUpperCase()}=${meta[key]}`) } - const vendor = 'lx-music-desktop' - processor.on('preprocess', function(mdb) { + let isInjected = false + flacProcessor.on('preprocess', function(mdb) { // Remove existing VORBIS_COMMENT block, if any. - if (mdb.type === flac.Processor.MDB_TYPE_VORBIS_COMMENT) { - mdb.remove() - } + if (mdb.type === flacProcessor.MDB_TYPE_VORBIS_COMMENT) mdb.remove() // Inject new VORBIS_COMMENT block. - if (mdb.removed || mdb.isLast) { - let mdbVorbis = flac.data.MetaDataBlockVorbisComment.create(mdb.isLast, vendor, comments) + if ((mdb.removed || mdb.isLast) && !isInjected) { + isInjected = true + let mdbVorbis = FlacComment.create(mdb.isLast, vendor, comments) this.push(mdbVorbis.publish()) } }) - reader.pipe(processor).pipe(writer).on('finish', () => { + reader.pipe(flacProcessor).pipe(writer).on('finish', () => { fs.unlink(filenPath, err => { if (err) return console.log(err.message) fs.rename(tempPath, filenPath, err => { diff --git a/src/renderer/store/modules/download.js b/src/renderer/store/modules/download.js index c81d2981..1a3031f2 100644 --- a/src/renderer/store/modules/download.js +++ b/src/renderer/store/modules/download.js @@ -91,7 +91,7 @@ const getUrl = (downloadInfo, isRefresh) => { * @param {*} isEmbedPic // 是否嵌入图片 */ const saveMeta = (downloadInfo, filePath, isEmbedPic) => { - if (downloadInfo.type === 'ape' || downloadInfo.type === 'flac') return + if (downloadInfo.type === 'ape') return const promise = isEmbedPic ? downloadInfo.musicInfo.img ? Promise.resolve(downloadInfo.musicInfo.img) @@ -104,6 +104,12 @@ const saveMeta = (downloadInfo, filePath, isEmbedPic) => { album: downloadInfo.musicInfo.albumName, APIC: url, }) + }).catch(() => { + setMeta(filePath, { + title: downloadInfo.musicInfo.name, + artist: downloadInfo.musicInfo.singer, + album: downloadInfo.musicInfo.albumName, + }) }) } diff --git a/src/renderer/utils/request.js b/src/renderer/utils/request.js index c2f22bb5..0b4b9dda 100644 --- a/src/renderer/utils/request.js +++ b/src/renderer/utils/request.js @@ -9,7 +9,6 @@ import { getProxyInfo } from './index' const request = (url, options, callback) => { let data - if (options.method == 'get') options.headers['Content-Length'] = 0 if (options.body) { data = options.body } else if (options.form) {