From 49097826b482fe4b91613895af0d961ee57dc78f Mon Sep 17 00:00:00 2001 From: Howard Wu Date: Fri, 29 Dec 2023 10:08:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(balh):=20=E4=BF=AE=E5=A4=8D=E6=B8=AF?= =?UTF-8?q?=E6=BE=B3=E5=8F=B0=E5=9C=B0=E5=8C=BA=E7=95=AA=E5=89=A7=E6=92=AD?= =?UTF-8?q?=E6=94=BE=20(#1289)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(balh): 修复港澳台地区番剧播放 同步 https://github.com/Howard20181/bilibili-multiplatform/commit/78944a3928ad7a7869943b2c62d568a23dc68a4c https://github.com/Howard20181/bilibili-multiplatform/commit/5cb6cb4b437096a4b1cf98902a4b2fac1385f559 * chore: update version & format code --------- Co-authored-by: ipcjs.mac --- package-lock.json | 4222 ++--------------- package.json | 2 +- .../unblock-area-limit/src/api/bilibili.ts | 503 +- .../src/feature/bili/area_limit_for_vue.ts | 64 +- packages/unblock-area-limit/src/main.user.js | 2 +- .../unblock-area-limit/src/util/converters.ts | 3 +- .../bilibili_bangumi_area_limit_hack.user.js | 2931 ++++++------ 7 files changed, 2477 insertions(+), 5250 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4325c1f9..64041b58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,87 +16,14 @@ "@rollup/plugin-typescript": "^6.1.0", "@types/greasemonkey": "^4.0.2", "magic-string": "^0.25.7", - "node-sass": "^6.0.1", "rollup": "^2.32.1", "rollup-plugin-html": "^0.2.1", "rollup-plugin-scss": "^3.0.0", + "sass": "^1.69.5", "tslib": "^2.0.3", "typescript": "^5.3.3" } }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz?cache=0&sync_timestamp=1623280394200&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.14.5.tgz", - "integrity": "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz?cache=0&sync_timestamp=1631920110587&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.15.7.tgz", - "integrity": "sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz?cache=0&sync_timestamp=1623280393681&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.14.5.tgz", - "integrity": "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", @@ -267,149 +194,32 @@ "integrity": "sha1-yzeO4rDVZ6uYiBntSr5lqVCvo1I=", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.nlark.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1629708337116&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz", - "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.nlark.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1629708548426&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz", - "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.nlark.com/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", - "dev": true - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1631470912358&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", - "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.nlark.com/aproba/download/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.nlark.com/are-we-there-yet/download/are-we-there-yet-1.1.7.tgz", - "integrity": "sha1-sVR0qTKtq0/4pQ2a36fk6SbyEUY=", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/arrify/download/arrify-1.0.1.tgz?cache=0&sync_timestamp=1619599497996&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farrify%2Fdownload%2Farrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/async-foreach/download/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": "*" + "node": ">= 8" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.nlark.com/aws4/download/aws4-1.11.0.tgz", - "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=", - "dev": true - }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" + "engines": { + "node": ">=8" } }, "node_modules/brace-expansion": { @@ -422,6 +232,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/camel-case": { "version": "3.0.0", "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867585340&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz", @@ -432,58 +254,31 @@ "upper-case": "^1.1.1" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.nlark.com/camelcase-keys/download/camelcase-keys-6.2.2.tgz?cache=0&sync_timestamp=1624608993530&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-6.2.2.tgz", - "integrity": "sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A=", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "node": ">= 8.10.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/chownr/download/chownr-2.0.0.tgz", - "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=", - "dev": true, - "engines": { - "node": ">=10" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/clean-css": { @@ -498,97 +293,6 @@ "node": ">= 4.0" } }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.nlark.com/cliui/download/cliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1631350330859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.nlark.com/combined-stream/download/combined-stream-1.0.8.tgz", - "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.17.1", "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1607931331670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", @@ -607,2042 +311,470 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/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=", + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/estree-walker/download/estree-walker-0.6.1.tgz", + "integrity": "sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I=", "dev": true }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.nlark.com/cross-spawn/download/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073454623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffunction-bind%2Fdownload%2Ffunction-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.nlark.com/decamelize-keys/download/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4.0" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/map-obj/download/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", "dev": true, - "engines": { - "node": ">=0.10.0" + "bin": { + "he": "bin/he" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", + "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", "dev": true, + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", "dev": true }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", - "dev": true - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.nlark.com/env-paths/download/env-paths-2.2.1.tgz?cache=0&sync_timestamp=1630095479786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenv-paths%2Fdownload%2Fenv-paths-2.2.1.tgz", - "integrity": "sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.nlark.com/error-ex/download/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/estree-walker/download/estree-walker-0.6.1.tgz", - "integrity": "sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I=", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.nlark.com/extend/download/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", - "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", - "dev": true - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz", - "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffunction-bind%2Fdownload%2Ffunction-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.nlark.com/gauge/download/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/gaze/download/gaze-1.1.3.tgz", - "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=", - "dev": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.nlark.com/get-stdin/download/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.nlark.com/getpass/download/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz", - "integrity": "sha1-qmCKL2xXetNX4a5aXCbZqNGWklU=", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globule": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/globule/download/globule-1.2.1.tgz", - "integrity": "sha1-Xf+xsZHyLSB5epNptJ6rTpg5aW0=", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.nlark.com/graceful-fs/download/graceful-fs-4.2.8.tgz?cache=0&sync_timestamp=1628194078324&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.8.tgz", - "integrity": "sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo=", - "dev": true - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/har-schema/download/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.nlark.com/har-validator/download/har-validator-5.1.5.tgz", - "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/hard-rejection/download/hard-rejection-2.1.0.tgz", - "integrity": "sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.nlark.com/has-unicode/download/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-4.0.2.tgz", - "integrity": "sha1-XkJVB+7eT+qEa3Ji8IOEVsQgmWE=", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", - "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=", - "dev": true, - "dependencies": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.nlark.com/http-signature/download/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.nlark.com/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1622604582006&other_urls=https%3A%2F%2Fregistry.nlark.com%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz", - "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.6.0.tgz?cache=0&sync_timestamp=1629224656971&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.6.0.tgz", - "integrity": "sha1-11U7JSb+Wbkro+QMjfdX7Ipwnhk=", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600489644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.nlark.com/isstream/download/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.nlark.com/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1631612462945&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz", - "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", - "dev": true - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.nlark.com/jsbn/download/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.nlark.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553637722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.nlark.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.nlark.com/lines-and-columns/download/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.15", - "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz", - "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=", - "dev": true - }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz", - "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz", - "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.nlark.com/map-obj/download/map-obj-4.3.0.tgz", - "integrity": "sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.nlark.com/meow/download/meow-9.0.0.tgz", - "integrity": "sha1-zZUQvFysne59A8c+4fmtlZ9Oo2Q=", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz", - "integrity": "sha1-89/eYMmenPO8lwHWh3ePU3ABy+0=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.32.tgz?cache=0&sync_timestamp=1627407652875&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.32.tgz", - "integrity": "sha1-HQDonn3n/gIAjbYQAdngKFJnD9U=", - "dev": true, - "dependencies": { - "mime-db": "1.49.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/min-indent/download/min-indent-1.0.1.tgz", - "integrity": "sha1-pj9oFnOzBXH76LwlaGrnRu76mGk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/minimist-options/download/minimist-options-4.1.0.tgz", - "integrity": "sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk=", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "3.1.5", - "resolved": "https://registry.nlark.com/minipass/download/minipass-3.1.5.tgz?cache=0&sync_timestamp=1631656314228&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminipass%2Fdownload%2Fminipass-3.1.5.tgz", - "integrity": "sha1-cfYlGwozpJwBs8+X/3ftoDDf9zI=", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.nlark.com/minizlib/download/minizlib-2.1.2.tgz", - "integrity": "sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", - "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz", - "integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=", - "dev": true - }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1606867586747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz", - "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", - "dev": true, - "dependencies": { - "lower-case": "^1.1.1" - } - }, - "node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.nlark.com/node-gyp/download/node-gyp-7.1.2.tgz?cache=0&sync_timestamp=1629701686704&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-gyp%2Fdownload%2Fnode-gyp-7.1.2.tgz", - "integrity": "sha1-IagQrrsYcSAlHDvOyXmvFYexiK4=", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-sass": { - "version": "6.0.1", - "resolved": "https://registry.nlark.com/node-sass/download/node-sass-6.0.1.tgz", - "integrity": "sha1-ytHM0M5j41xxgfVF2LmG86moh/4=", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "meow": "^9.0.0", - "nan": "^2.13.2", - "node-gyp": "^7.1.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "2.2.5", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "bin": { - "node-sass": "bin/node-sass" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-5.0.0.tgz", - "integrity": "sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-3.0.3.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-3.0.3.tgz", - "integrity": "sha1-28w+LaWVCaCYNCKITNFy7v36Ul4=", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.nlark.com/npmlog/download/npmlog-4.1.2.tgz", - "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", - "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/number-is-nan/download/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.nlark.com/oauth-sign/download/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618847043548&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opencc-js": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/opencc-js/-/opencc-js-1.0.5.tgz", - "integrity": "sha512-LD+1SoNnZdlRwtYTjnQdFrSVCAaYpuDqL5CkmOaHOkKoKh7mFxUicLTRVNLU5C+Jmi1vXQ3QL4jWdgSaa4sKjg==" - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.nlark.com/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.nlark.com/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1606867587234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/parse-json/download/parse-json-5.2.0.tgz", - "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.nlark.com/performance-now/download/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/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=", - "dev": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz", - "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", - "dev": true - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz?cache=0&sync_timestamp=1622604519710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpunycode%2Fdownload%2Fpunycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.nlark.com/qs/download/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.nlark.com/quick-lru/download/quick-lru-4.0.1.tgz", - "integrity": "sha1-W4h48ROlgheEjGSCAmxz4bpXcn8=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-5.2.0.tgz", - "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz?cache=0&sync_timestamp=1616916344510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-7.0.1.tgz", - "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz", - "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz", - "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz", - "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1622604551741&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz", - "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", - "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", - "dev": true, - "dependencies": { - "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" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/redent/download/redent-3.0.0.tgz", - "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.nlark.com/request/download/request-2.88.2.tgz", - "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz", - "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz", - "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-html": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/rollup-plugin-html/download/rollup-plugin-html-0.2.1.tgz", - "integrity": "sha1-oYYuyoeuVLZ3aJ0NQTORHoImRj0=", - "dev": true, - "dependencies": { - "html-minifier": "^3.0.2", - "rollup-pluginutils": "^1.5.0" - } - }, - "node_modules/rollup-plugin-html/node_modules/estree-walker": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/estree-walker/download/estree-walker-0.2.1.tgz", - "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", - "dev": true - }, - "node_modules/rollup-plugin-html/node_modules/rollup-pluginutils": { - "version": "1.5.2", - "resolved": "https://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-1.5.2.tgz", - "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", - "dev": true, - "dependencies": { - "estree-walker": "^0.2.1", - "minimatch": "^3.0.2" - } - }, - "node_modules/rollup-plugin-scss": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/rollup-plugin-scss/download/rollup-plugin-scss-3.0.0.tgz", - "integrity": "sha1-Na0K3GFCF+AnjnAtimdIIPqgkp4=", - "dev": true, - "dependencies": { - "rollup-pluginutils": "^2.3.3" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.1", - "resolved": "https://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-2.8.1.tgz", - "integrity": "sha1-j6bdBpc0STjvJsLAnSSIzp4zzpc=", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", - "dev": true - }, - "node_modules/sass-graph": { - "version": "2.2.5", - "resolved": "https://registry.nlark.com/sass-graph/download/sass-graph-2.2.5.tgz", - "integrity": "sha1-qYHIdEa4MZ2W3OBnHkh4eb0kwug=", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^13.3.2" - }, - "bin": { - "sassgraph": "bin/sassgraph" - } - }, - "node_modules/scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.nlark.com/scss-tokenizer/download/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "dependencies": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - } - }, - "node_modules/scss-tokenizer/node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.nlark.com/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1622604551741&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", - "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/shebang-command/download/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.4", - "resolved": "https://registry.nlark.com/signal-exit/download/signal-exit-3.0.4.tgz", - "integrity": "sha1-NmpGhNF1ucqyCB42gf2jdHtsUdc=", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", - "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz", - "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", - "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.nlark.com/spdx-license-ids/download/spdx-license-ids-3.0.10.tgz?cache=0&sync_timestamp=1628483278047&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.10.tgz", - "integrity": "sha1-DZvszN5wA9bGWNSH3UijLwvzAUs=", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&sync_timestamp=1560975547815&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", "dev": true }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", - "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "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" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/stdout-stream/download/stdout-stream-1.4.1.tgz", - "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" + "node": ">=8" } }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.6.0.tgz?cache=0&sync_timestamp=1629224656971&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-core-module%2Fdownload%2Fis-core-module-2.6.0.tgz", + "integrity": "sha1-11U7JSb+Wbkro+QMjfdX7Ipwnhk=", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "has": "^1.0.3" } }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.nlark.com/string-width/download/string-width-1.0.2.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-3.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-3.0.0.tgz", - "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.nlark.com/tar/download/tar-6.1.11.tgz?cache=0&sync_timestamp=1629994598621&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftar%2Fdownload%2Ftar-6.1.11.tgz", - "integrity": "sha1-Z2CjjwA6+hsv/Q/+npq70Oqz1iE=", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, "engines": { - "node": ">= 10" + "node": ">=0.12.0" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz", - "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" + "@types/estree": "*" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.nlark.com/trim-newlines/download/trim-newlines-3.0.1.tgz?cache=0&sync_timestamp=1623341510447&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftrim-newlines%2Fdownload%2Ftrim-newlines-3.0.1.tgz", - "integrity": "sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ=", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true }, - "node_modules/true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/true-case-path/download/true-case-path-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftrue-case-path%2Fdownload%2Ftrue-case-path-1.0.3.tgz", - "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=", + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz", + "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=", "dev": true, "dependencies": { - "glob": "^7.1.2" + "sourcemap-codec": "^1.4.4" } }, - "node_modules/tslib": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.0.3.tgz?cache=0&sync_timestamp=1602287078861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-2.0.3.tgz", - "integrity": "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw=", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.nlark.com/tunnel-agent/download/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.18.1.tgz", - "integrity": "sha1-20vBUaSiz07r+a3V23VQjbbMhB8=", + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1606867586747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "lower-case": "^1.1.1" } }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, "engines": { - "node": ">=14.17" + "node": ">=0.10.0" } }, - "node_modules/uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1609477622017&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz", - "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" + "wrappy": "1" } }, - "node_modules/uglify-js/node_modules/commander": { - "version": "2.19.0", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1607931331670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", - "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=", - "dev": true - }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true + "node_modules/opencc-js": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/opencc-js/-/opencc-js-1.0.5.tgz", + "integrity": "sha512-LD+1SoNnZdlRwtYTjnQdFrSVCAaYpuDqL5CkmOaHOkKoKh7mFxUicLTRVNLU5C+Jmi1vXQ3QL4jWdgSaa4sKjg==" }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237624359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", - "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1606867587234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "no-case": "^2.2.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1622213136953&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.nlark.com/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.nlark.com/which/download/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=6" + "node": ">=8.10.0" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npm.taobao.org/relateurl/download/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz", + "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=6" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1631350330859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "node_modules/rollup-plugin-html": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/rollup-plugin-html/download/rollup-plugin-html-0.2.1.tgz", + "integrity": "sha1-oYYuyoeuVLZ3aJ0NQTORHoImRj0=", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" + "html-minifier": "^3.0.2", + "rollup-pluginutils": "^1.5.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.3.tgz", - "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", - "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "node_modules/rollup-plugin-html/node_modules/estree-walker": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/estree-walker/download/estree-walker-0.2.1.tgz", + "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", "dev": true }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1628889096518&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", - "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "node_modules/rollup-plugin-html/node_modules/rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", "dev": true, "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "estree-walker": "^0.2.1", + "minimatch": "^3.0.2" } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.9.tgz", - "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=", + "node_modules/rollup-plugin-scss": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/rollup-plugin-scss/download/rollup-plugin-scss-3.0.0.tgz", + "integrity": "sha1-Na0K3GFCF+AnjnAtimdIIPqgkp4=", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "rollup-pluginutils": "^2.3.3" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "node_modules/rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npm.taobao.org/rollup-pluginutils/download/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha1-j6bdBpc0STjvJsLAnSSIzp4zzpc=", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "estree-walker": "^0.6.1" } }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/find-up/download/find-up-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "node_modules/sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" }, "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", + "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.0" } }, - "node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.0.3.tgz?cache=0&sync_timestamp=1602287078861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftslib%2Fdownload%2Ftslib-2.0.3.tgz", + "integrity": "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw=", + "dev": true }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=6" + "node": ">=14.17" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1631350330859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1609477622017&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz", + "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz", - "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz?cache=0&sync_timestamp=1623280394200&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.14.5.tgz", - "integrity": "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" + "node": ">=0.8.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.15.7.tgz?cache=0&sync_timestamp=1631920110587&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.15.7.tgz", - "integrity": "sha1-Ig35k7/pBKSmsCq08zhaXr9uI4k=", + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1607931331670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz", + "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=", "dev": true }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz?cache=0&sync_timestamp=1623280393681&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.14.5.tgz", - "integrity": "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646697260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + }, + "dependencies": { "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", @@ -2769,129 +901,27 @@ "integrity": "sha1-yzeO4rDVZ6uYiBntSr5lqVCvo1I=", "dev": true }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.nlark.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1629708337116&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz", - "integrity": "sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w=", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.nlark.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1629708548426&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz", - "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.nlark.com/abbrev/download/abbrev-1.1.1.tgz", - "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1631470912358&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fajv%2Fdownload%2Fajv-6.12.6.tgz", - "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", - "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" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/amdefine/download/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.nlark.com/aproba/download/aproba-1.2.0.tgz", - "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.nlark.com/are-we-there-yet/download/are-we-there-yet-1.1.7.tgz", - "integrity": "sha1-sVR0qTKtq0/4pQ2a36fk6SbyEUY=", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/arrify/download/arrify-1.0.1.tgz?cache=0&sync_timestamp=1619599497996&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farrify%2Fdownload%2Farrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", - "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npm.taobao.org/async-foreach/download/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.nlark.com/aws4/download/aws4-1.11.0.tgz", - "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "brace-expansion": { "version": "1.1.11", @@ -2900,266 +930,69 @@ "dev": true, "requires": { "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867585340&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.nlark.com/camelcase-keys/download/camelcase-keys-6.2.2.tgz?cache=0&sync_timestamp=1624608993530&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-6.2.2.tgz", - "integrity": "sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A=", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/chownr/download/chownr-2.0.0.tgz", - "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=", - "dev": true - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", - "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.nlark.com/cliui/download/cliui-5.0.0.tgz", - "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1631350330859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.nlark.com/combined-stream/download/combined-stream-1.0.8.tgz", - "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1607931331670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", - "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": 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=", - "dev": true + "concat-map": "0.0.1" + } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.nlark.com/cross-spawn/download/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "fill-range": "^7.0.1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073454623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867585340&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.nlark.com/decamelize-keys/download/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/map-obj/download/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/clean-css/download/clean-css-4.2.3.tgz", + "integrity": "sha1-UHtd59l7SO5T2ErbAWD/YhY4D3g=", "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "source-map": "~0.6.0" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1607931331670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz", + "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=", "dev": true }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.nlark.com/env-paths/download/env-paths-2.2.1.tgz?cache=0&sync_timestamp=1630095479786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fenv-paths%2Fdownload%2Fenv-paths-2.2.1.tgz", - "integrity": "sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=", + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.nlark.com/error-ex/download/error-ex-1.3.2.tgz", - "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "estree-walker": { @@ -3168,64 +1001,13 @@ "integrity": "sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I=", "dev": true }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.nlark.com/extend/download/extend-3.0.2.tgz", - "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", - "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", - "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz", - "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "minipass": "^3.0.0" + "to-regex-range": "^5.0.1" } }, "fs.realpath": { @@ -3247,105 +1029,15 @@ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.nlark.com/gauge/download/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/gaze/download/gaze-1.1.3.tgz", - "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.nlark.com/get-stdin/download/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.nlark.com/getpass/download/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.4.tgz", - "integrity": "sha1-qmCKL2xXetNX4a5aXCbZqNGWklU=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/globule/download/globule-1.2.1.tgz", - "integrity": "sha1-Xf+xsZHyLSB5epNptJ6rTpg5aW0=", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.nlark.com/graceful-fs/download/graceful-fs-4.2.8.tgz?cache=0&sync_timestamp=1628194078324&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.8.tgz", - "integrity": "sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/har-schema/download/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.nlark.com/har-validator/download/har-validator-5.1.5.tgz", - "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "is-glob": "^4.0.1" } }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npm.taobao.org/hard-rejection/download/hard-rejection-2.1.0.tgz", - "integrity": "sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM=", - "dev": true - }, "has": { "version": "1.0.3", "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", @@ -3355,42 +1047,12 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.nlark.com/has-unicode/download/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, "he": { "version": "1.2.0", "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", "dev": true }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-4.0.2.tgz", - "integrity": "sha1-XkJVB+7eT+qEa3Ji8IOEVsQgmWE=", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "html-minifier": { "version": "3.5.21", "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz", @@ -3406,21 +1068,10 @@ "uglify-js": "3.4.x" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.nlark.com/http-signature/download/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": "4.0.0", - "resolved": "https://registry.nlark.com/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1622604582006&other_urls=https%3A%2F%2Fregistry.nlark.com%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz", - "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", "dev": true }, "inflight": { @@ -3439,11 +1090,14 @@ "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", "dev": true }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } }, "is-core-module": { "version": "2.6.0", @@ -3454,19 +1108,25 @@ "has": "^1.0.3" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "is-extglob": "^2.1.1" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz?cache=0&sync_timestamp=1618600489644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-obj%2Fdownload%2Fis-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-reference": { @@ -3478,126 +1138,12 @@ "@types/estree": "*" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.nlark.com/isstream/download/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.nlark.com/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1631612462945&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz", - "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.nlark.com/jsbn/download/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.nlark.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553637722&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.nlark.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz", - "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/jsprim/download/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" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz", - "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", - "dev": true - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.nlark.com/lines-and-columns/download/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.nlark.com/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz", - "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=", - "dev": true - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz", "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.nlark.com/lru-cache/download/lru-cache-6.0.0.tgz", - "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "magic-string": { "version": "0.25.7", "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz", @@ -3607,104 +1153,15 @@ "sourcemap-codec": "^1.4.4" } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.nlark.com/map-obj/download/map-obj-4.3.0.tgz", - "integrity": "sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo=", - "dev": true - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.nlark.com/meow/download/meow-9.0.0.tgz", - "integrity": "sha1-zZUQvFysne59A8c+4fmtlZ9Oo2Q=", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - } - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz", - "integrity": "sha1-89/eYMmenPO8lwHWh3ePU3ABy+0=", - "dev": true - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.nlark.com/mime-types/download/mime-types-2.1.32.tgz?cache=0&sync_timestamp=1627407652875&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmime-types%2Fdownload%2Fmime-types-2.1.32.tgz", - "integrity": "sha1-HQDonn3n/gIAjbYQAdngKFJnD9U=", - "dev": true, - "requires": { - "mime-db": "1.49.0" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/min-indent/download/min-indent-1.0.1.tgz", - "integrity": "sha1-pj9oFnOzBXH76LwlaGrnRu76mGk=", - "dev": true - }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/minimist-options/download/minimist-options-4.1.0.tgz", - "integrity": "sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk=", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "3.1.5", - "resolved": "https://registry.nlark.com/minipass/download/minipass-3.1.5.tgz?cache=0&sync_timestamp=1631656314228&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fminipass%2Fdownload%2Fminipass-3.1.5.tgz", - "integrity": "sha1-cfYlGwozpJwBs8+X/3ftoDDf9zI=", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.nlark.com/minizlib/download/minizlib-2.1.2.tgz", - "integrity": "sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", - "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", - "dev": true - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz", - "integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=", - "dev": true - }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1606867586747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz", @@ -3714,96 +1171,10 @@ "lower-case": "^1.1.1" } }, - "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.nlark.com/node-gyp/download/node-gyp-7.1.2.tgz?cache=0&sync_timestamp=1629701686704&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-gyp%2Fdownload%2Fnode-gyp-7.1.2.tgz", - "integrity": "sha1-IagQrrsYcSAlHDvOyXmvFYexiK4=", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - } - }, - "node-sass": { - "version": "6.0.1", - "resolved": "https://registry.nlark.com/node-sass/download/node-sass-6.0.1.tgz", - "integrity": "sha1-ytHM0M5j41xxgfVF2LmG86moh/4=", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "meow": "^9.0.0", - "nan": "^2.13.2", - "node-gyp": "^7.1.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "2.2.5", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-5.0.0.tgz", - "integrity": "sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-3.0.3.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-3.0.3.tgz", - "integrity": "sha1-28w+LaWVCaCYNCKITNFy7v36Ul4=", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.nlark.com/npmlog/download/npmlog-4.1.2.tgz", - "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.nlark.com/number-is-nan/download/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.nlark.com/oauth-sign/download/oauth-sign-0.9.0.tgz", - "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.nlark.com/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1618847043548&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "once": { @@ -3820,203 +1191,34 @@ "resolved": "https://registry.npmjs.org/opencc-js/-/opencc-js-1.0.5.tgz", "integrity": "sha512-LD+1SoNnZdlRwtYTjnQdFrSVCAaYpuDqL5CkmOaHOkKoKh7mFxUicLTRVNLU5C+Jmi1vXQ3QL4jWdgSaa4sKjg==" }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.nlark.com/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1628812766275&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/p-locate/download/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.nlark.com/p-try/download/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true - }, "param-case": { "version": "2.1.1", "resolved": "https://registry.npm.taobao.org/param-case/download/param-case-2.1.1.tgz?cache=0&sync_timestamp=1606867587234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparam-case%2Fdownload%2Fparam-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/parse-json/download/parse-json-5.2.0.tgz", - "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "no-case": "^2.2.0" } }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.nlark.com/path-exists/download/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1617971695678&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true - }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.nlark.com/performance-now/download/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "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=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz", - "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz?cache=0&sync_timestamp=1622604519710&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpunycode%2Fdownload%2Fpunycode-2.1.1.tgz", - "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.nlark.com/qs/download/qs-6.5.2.tgz", - "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.nlark.com/quick-lru/download/quick-lru-4.0.1.tgz", - "integrity": "sha1-W4h48ROlgheEjGSCAmxz4bpXcn8=", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/read-pkg/download/read-pkg-5.2.0.tgz", - "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.nlark.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz", - "integrity": "sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.nlark.com/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz", - "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.nlark.com/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1622604551741&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz", - "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-7.0.1.tgz?cache=0&sync_timestamp=1616916344510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-7.0.1.tgz", - "integrity": "sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc=", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz", - "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.6.tgz", - "integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=", - "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" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/redent/download/redent-3.0.0.tgz", - "integrity": "sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8=", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "picomatch": "^2.2.1" } }, "relateurl": { @@ -4025,46 +1227,6 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.nlark.com/request/download/request-2.88.2.tgz", - "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", - "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" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.nlark.com/require-directory/download/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", - "dev": true - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz", @@ -4075,15 +1237,6 @@ "path-parse": "^1.0.6" } }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz", - "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -4139,238 +1292,42 @@ "estree-walker": "^0.6.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", - "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", - "dev": true - }, - "sass-graph": { - "version": "2.2.5", - "resolved": "https://registry.nlark.com/sass-graph/download/sass-graph-2.2.5.tgz", - "integrity": "sha1-qYHIdEa4MZ2W3OBnHkh4eb0kwug=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^13.3.2" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.nlark.com/scss-tokenizer/download/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.nlark.com/source-map/download/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1622604551741&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", - "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/set-blocking/download/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.nlark.com/shebang-command/download/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "dev": true, "requires": { - "shebang-regex": "^3.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896299850&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true - }, - "signal-exit": { - "version": "3.0.4", - "resolved": "https://registry.nlark.com/signal-exit/download/signal-exit-3.0.4.tgz", - "integrity": "sha1-NmpGhNF1ucqyCB42gf2jdHtsUdc=", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz", - "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz", - "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.nlark.com/spdx-license-ids/download/spdx-license-ids-3.0.10.tgz?cache=0&sync_timestamp=1628483278047&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.10.tgz", - "integrity": "sha1-DZvszN5wA9bGWNSH3UijLwvzAUs=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", - "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", - "dev": true, - "requires": { - "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" - } - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/stdout-stream/download/stdout-stream-1.4.1.tgz", - "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz?cache=0&sync_timestamp=1565170823020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring_decoder%2Fdownload%2Fstring_decoder-1.1.1.tgz", - "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.nlark.com/string-width/download/string-width-1.0.2.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-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" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/strip-indent/download/strip-indent-3.0.0.tgz?cache=0&sync_timestamp=1620053310624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-indent%2Fdownload%2Fstrip-indent-3.0.0.tgz", - "integrity": "sha1-wy4c7pQLazQyx3G8LFS8znPNMAE=", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.nlark.com/tar/download/tar-6.1.11.tgz?cache=0&sync_timestamp=1629994598621&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftar%2Fdownload%2Ftar-6.1.11.tgz", - "integrity": "sha1-Z2CjjwA6+hsv/Q/+npq70Oqz1iE=", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz", - "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.nlark.com/trim-newlines/download/trim-newlines-3.0.1.tgz?cache=0&sync_timestamp=1623341510447&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftrim-newlines%2Fdownload%2Ftrim-newlines-3.0.1.tgz", - "integrity": "sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npm.taobao.org/true-case-path/download/true-case-path-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftrue-case-path%2Fdownload%2Ftrue-case-path-1.0.3.tgz", - "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "glob": "^7.1.2" + "is-number": "^7.0.0" } }, "tslib": { @@ -4379,27 +1336,6 @@ "integrity": "sha1-jgdBrEX8DCJuWKF7/D5kubxsphw=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.nlark.com/tunnel-agent/download/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.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.nlark.com/type-fest/download/type-fest-0.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.18.1.tgz", - "integrity": "sha1-20vBUaSiz07r+a3V23VQjbbMhB8=", - "dev": true - }, "typescript": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", @@ -4430,245 +1366,11 @@ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", "dev": true }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237624359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", - "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.nlark.com/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1622213136953&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.nlark.com/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npm.taobao.org/verror/download/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" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.nlark.com/which/download/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.nlark.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz", - "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1631350330859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npm.taobao.org/wrappy/download/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz?cache=0&sync_timestamp=1617822684820&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.3.tgz", - "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", - "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1628889096518&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", - "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.nlark.com/ansi-regex/download/ansi-regex-4.1.0.tgz?cache=0&sync_timestamp=1631634988487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-regex%2Fdownload%2Fansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/find-up/download/find-up-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1629895724478&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/p-locate/download/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.nlark.com/path-exists/download/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.nlark.com/string-width/download/string-width-3.1.0.tgz?cache=0&sync_timestamp=1631551445892&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstring-width%2Fdownload%2Fstring-width-3.1.0.tgz", - "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1631350330859&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz", - "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.9.tgz", - "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=", - "dev": true } } } diff --git a/package.json b/package.json index ffc47f2c..aa871e9b 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,10 @@ "@rollup/plugin-typescript": "^6.1.0", "@types/greasemonkey": "^4.0.2", "magic-string": "^0.25.7", - "node-sass": "^6.0.1", "rollup": "^2.32.1", "rollup-plugin-html": "^0.2.1", "rollup-plugin-scss": "^3.0.0", + "sass": "^1.69.5", "tslib": "^2.0.3", "typescript": "^5.3.3" }, diff --git a/packages/unblock-area-limit/src/api/bilibili.ts b/packages/unblock-area-limit/src/api/bilibili.ts index 69258b15..90602da6 100644 --- a/packages/unblock-area-limit/src/api/bilibili.ts +++ b/packages/unblock-area-limit/src/api/bilibili.ts @@ -1,5 +1,6 @@ import { Async } from "../util/async" import { generateMobiPlayUrlParams } from "./biliplus" +import { Converters } from "../util/converters" interface SeasonInfo { code: number @@ -27,38 +28,468 @@ interface SeasonInfo { } } -export interface SeasonInfoOnBangumi { - code: number - result: { - season_id: number - season_title: string // 季度标题,如 “TV” “第一季” +export interface AppSeasonInfo { + result?: { + actor: { + info: string + title: string + } + alias: string + all_buttons: { + watch_fornal: string + } + all_up_infos: any + areas: [{ + id: number + name: string + }] + badge: string + badge_info: { + bg_color: string + bg_color_night: string + text: string + } + cover: string + detail: string + dialog: { + code: number + config: any + image: { + url: string + } + msg: string + style_type: string + title: { + text: string + text_color: string + } + type: string + } + dynamic_subtitle: string + earphone_conf: { + sp_phones: any[] + } + enable_vt: boolean + evaluate: string + icon_font: { + name: string + text: string + } + link: string + media_badge_info: any media_id: number - episodes: [{ - aid: number - bvid: string - cid: number - ep_id: number - index: string // 集数/简短名,显示在缩略集数 - index_title: string // 分集标题,泰区番剧通常为空 - episode_status: number - episode_type: number - titleFormat?: string - loaded?: boolean - epStatus?: number - sectionType?: number - i?: number - id?: number - link?: string - title?: string + mode: number + modules: any[] + new_ep: { + desc: string + id: number + is_new: number + more: string + title: string + } + new_keep_activity_material: { + activityId: number + } + origin_name: string + payment?: { + dialog: any + pay_type: { + allow_ticket: number + } + price: string + report_type: number + tv_price: string + vip_discount_price: string + vip_promotion: string + } | undefined + play_strategy: { + auto_play_toast: string + recommend_show_strategy: number + strategies: any[] + } + premieres: any[] + publish: { + is_finish: number + is_started: number + pub_time: string + pub_time_show: string + release_date_show: string + time_length_show: string + unknow_pub_date: number + update_info_desc: string + weekday: number + } + record: string + refine_cover: string + reserve: { + episodes: any[] + tip: string + } + rights: { + allow_bp: number + allow_bp_rank: number + allow_download: number + allow_review: number + area_limit: number + ban_area_show: number + can_watch: number + copyright: string + forbid_pre: number + freya_white: number + is_cover_show: number + is_preview: number + only_vip_download: number + resource: string + watch_platform: number + } + season_id: number + season_title: string + series: { + display_type: number + series_id: number + series_title: string + } + share_copy: string + share_url: string + short_link: string + show_season_type: number + square_cover: string + staff: { + info: string + title: string + } + stat: { + coins: number + danmakus: number + favorite: number + favorites: number + followers: string + likes: number + play: string + reply: number + share: number + views: number + vt: number + } + status: number + jp_title?: string | undefined + styles: [{ + name: string }] - evaluate: string // 简介 + subtitle: string + test_switch: { + channel_entrance_exp_action: number + enable_ep_vt: boolean + hide_ep_vv_vt_dm: number + is_merge_preview_section: boolean + is_ogv_fav_exp: boolean + mergeSeasonEpUpperExp: number + movie_mark_action: number + optimize_display_info_exp: number + player_ip_community_exp: number + short_space_title_exp: number + was_freya_double: number + was_hit_four_crowd: number + was_ios_pip_exp: boolean + was_merge_exp: boolean + was_pugv_style_optimize: boolean + } + title: string + total: number + type: number + type_desc: string + type_name: string + user_status: { + follow: number + follow_bubble: number + follow_status: number + pay: number + pay_for: number + progress: { + last_ep_id: number + last_ep_index: string + last_time: number + } + review: { + article_url: string + is_open: number + score: number + } + sponsor: number + vip: number + vip_frozen: number + } + season_status?: number | undefined + is_paster_ads: number + user_thumbup: { + url_image_ani: string + url_image_ani_cut: string + url_image_bright: string + url_image_dim: string + } + seasons?: any[] + episodes?: any[] + section?: any[] + positive?: any + up_info?: { + attribute: number + avatar: string + is_follow: number + mid: number + uname: number + } + } + code: number + data: { + actor: { + info: string + title: string + } + alias: string + all_buttons: { watch_fornal: string } + all_up_infos: any + areas: [{ id: number, name: string }] + badge: string + badge_info: { + bg_color: string + bg_color_night: string + text: string + } cover: string - title: string // 番剧名 - total_ep: number - up_info: { + detail: string + dialog: { + code: number + config: any + image: { + url: string + } + msg: string + style_type: string + title: { + text: string + text_color: string + } + type: string + } + dynamic_subtitle: string + earphone_conf: { sp_phones: any[] } + enable_vt: boolean + evaluate: string + icon_font: { + name: string + text: string + } + link: string + media_badge_info: any + media_id: number + mode: number + modules: any[] + new_ep: { + desc: string + id: number + is_new: number + more: string + title: string + } + new_keep_activity_material: { activityId: number } + origin_name: string + payment?: { + dialog: any + pay_type: { allow_ticket: number } + price: string + report_type: number + tv_price: string + vip_discount_price: string + vip_promotion: string + } + play_strategy: { + auto_play_toast: string + recommend_show_strategy: number + strategies: any[] + } + premieres: any[] + publish: { + is_finish: number + is_started: number + pub_time: string + pub_time_show: string + release_date_show: string + time_length_show: string + unknow_pub_date: number + update_info_desc: string + weekday: number + } + record: string + refine_cover: string + reserve: { + episodes: any[] + tip: string + } + rights: { + allow_bp: number + allow_bp_rank: number + allow_download: number + allow_review: number + area_limit: number + ban_area_show: number + can_watch: number + copyright: string + forbid_pre: number + freya_white: number + is_cover_show: number + is_preview: number + only_vip_download: number + resource: string + watch_platform: number + } + season_id: number + season_title: string + series: { + display_type: number + series_id: number + series_title: string + } + share_copy: string + share_url: string + short_link: string + show_season_type: number + square_cover: string + staff: { + info: string + title: string + } + stat: { + coins: number + danmakus: number + favorite: number + favorites: number + followers: string + likes: number + play: string + reply: number + share: number + views: number + vt: number + } + status: number + jp_title?: string + styles: [{ + name: string + }] + subtitle: string + test_switch: { + channel_entrance_exp_action: number + enable_ep_vt: boolean + hide_ep_vv_vt_dm: number + is_merge_preview_section: boolean + is_ogv_fav_exp: boolean + mergeSeasonEpUpperExp: number + movie_mark_action: number + optimize_display_info_exp: number + player_ip_community_exp: number + short_space_title_exp: number + was_freya_double: number + was_hit_four_crowd: number + was_ios_pip_exp: boolean + was_merge_exp: boolean + was_pugv_style_optimize: boolean + } + title: string + total: number + type: number + type_desc: string + type_name: string + user_status: { + follow: number + follow_bubble: number + follow_status: number + pay: number + pay_for: number + progress: { + last_ep_id: number + last_ep_index: string + last_time: number + } + review: { + article_url: string + is_open: number + score: number + } + sponsor: number + vip: number + vip_frozen: number + } + season_status?: number + is_paster_ads: number + user_thumbup: { + url_image_ani: string + url_image_ani_cut: string + url_image_bright: string + url_image_dim: string + } + // seasons?: any[] + } + message: string +} + +export interface SectionInfo { + code: number + message: string + result: { + main_section: { + title: any + id: any + episodes: [{ + aid: number + badge: string + badge_info: { + bg_color: string + bg_color_night: string + text: string + } + badge_type: string + cid: number + cover: string + from: string + id: number + is_premiere: number + long_title: string + share_url: string + status: number + title: string + vid: string + }] + } + section: any[] + } +} + +export interface EpisodeInfo { + code: number + data: { + episode_id: number + related_up: [{ + attribute: number + avatar: string + is_follow: number mid: number + uname: number + }] + stat: { + coin: number + dm: number + like: number + reply: number + view: number + } + user_community: { + coin_number: number + favorite: number + is_original: number + like: number } } + message: string } interface SeasonInfoOnThailand { @@ -122,8 +553,24 @@ export class BiliBiliApi { getSeasonInfo(season_id: string | number) { return Async.ajax(`${this.server}/pgc/view/web/season?season_id=${season_id}`) } - getSeasonInfoByEpSsIdOnBangumi(ep_id: string, season_id: string) { - return Async.ajax('//bangumi.bilibili.com/view/web_api/season?' + (ep_id != '' ? `ep_id=${ep_id}` : `season_id=${season_id}`)) + getSeasonInfoById(season_id: string, ep_id: string) { + let paramDict = { + access_key: localStorage.access_key, + appkey: '27eb53fc9058f8c3', + season_id: '', + ep_id: '' + } + + if (ep_id) paramDict.ep_id = ep_id + else if (season_id) paramDict.season_id = season_id + const { sign, params } = Converters.generateSign(paramDict, 'c2ed53a74eeefe3cf99fbd01d8c9c375') + return Async.ajax('//api.bilibili.com/pgc/view/v2/app/season?' + params + '&sign=' + sign) + } + getSeasonSectionBySsId(season_id: string) { + return Async.ajax('//api.bilibili.com/pgc/web/season/section?' + `season_id=${season_id}`) + } + getEpisodeInfoByEpId(ep_id: string) { + return Async.ajax('//api.bilibili.com/pgc/season/episode/web/info?' + `ep_id=${ep_id}`) } getSeasonInfoByEpSsIdOnThailand(ep_id: string, season_id: string) { const params = '?' + (ep_id != '' ? `ep_id=${ep_id}` : `season_id=${season_id}`) + `&mobi_app=bstar_a&s_locale=zh_SG` diff --git a/packages/unblock-area-limit/src/feature/bili/area_limit_for_vue.ts b/packages/unblock-area-limit/src/feature/bili/area_limit_for_vue.ts index b490a5e4..3137c047 100644 --- a/packages/unblock-area-limit/src/feature/bili/area_limit_for_vue.ts +++ b/packages/unblock-area-limit/src/feature/bili/area_limit_for_vue.ts @@ -1,10 +1,9 @@ -import { BiliBiliApi } from "../../api/bilibili" -import { SeasonInfoOnBangumi } from "../../api/bilibili" +import { AppSeasonInfo, BiliBiliApi } from "../../api/bilibili" import { BiliPlusApi } from "../../api/biliplus" import { Converters } from "../../util/converters" import { cookieStorage } from "../../util/cookie" import { util_init } from "../../util/initiator" -import { log, util_debug, util_warn } from "../../util/log" +import { log, util_warn } from "../../util/log" import { Objects } from "../../util/objects" import { _ } from "../../util/react" import { Strings } from "../../util/strings" @@ -143,7 +142,7 @@ async function fixThailandSeason(ep_id: string, season_id: string) { origin.result.style.push(it.name) }) - let result: SeasonInfoOnBangumi = JSON.parse(JSON.stringify(origin)) + let result: AppSeasonInfo = JSON.parse(JSON.stringify(origin)) return result } @@ -165,7 +164,7 @@ function fixBangumiPlayPage() { let appOnly = invalidInitialState?.mediaInfo?.rights?.appOnly ?? false try { // 读取保存的season_id - const season_id = (window.location.pathname.match(/\/bangumi\/play\/ss(\d+)/) || ['', cookieStorage.get('balh_curr_season_id')])[1] + let season_id = (window.location.pathname.match(/\/bangumi\/play\/ss(\d+)/) || ['', cookieStorage.get('balh_curr_season_id')])[1] const ep_id = (window.location.pathname.match(/\/bangumi\/play\/ep(\d+)/) || ['', ''])[1] const bilibiliApi = new BiliBiliApi(balh_config.server_bilibili_api_proxy) let templateArgs: TemplateArgs | null = null @@ -173,33 +172,70 @@ function fixBangumiPlayPage() { // 不限制地区的接口,可以查询泰区番剧,该方法前置给代理服务器和BP节省点请求 // 如果该接口失效,自动尝试后面的方法 try { - let result = await bilibiliApi.getSeasonInfoByEpSsIdOnBangumi(ep_id, season_id) - if (balh_config.server_custom_th && (result.code == -404 || result.result.up_info.mid == 677043260 /* 主站残留泰区数据,部分不完整 */)) { + let result = await bilibiliApi.getSeasonInfoById(season_id, ep_id) + if (balh_config.server_custom_th && (result.code == -404)) { result = await fixThailandSeason(ep_id, season_id) appOnly = true } - if (result.code) { + if (result.code != 0) { throw result } + if (ep_id != '') season_id = result.data.season_id.toString() + result.result = result.data + result.result.modules.forEach((module: { data: { [x: string]: any }; id: any }, mid: number) => { + if (module.data) { + let sid = module.id ? module.id : mid + 1 + module.data['id'] = sid + } + }) + let seasons: any[] = [] + result.result.modules.forEach((module: { data: { seasons: any[] } }) => { + module.data.seasons.forEach(season => { + seasons.push(season) + }) + }) + result.result['seasons'] = seasons + let section = await bilibiliApi.getSeasonSectionBySsId(season_id) + result.result['episodes'] = section.result.main_section.episodes + result.result['section'] = section.result.section + result.result['positive'] = { id: section.result.main_section.id, title: section.result.main_section.title } + let episodeInfo = await bilibiliApi.getEpisodeInfoByEpId(result.result.episodes[0].id) + result.result['up_info'] = episodeInfo.data.related_up[0] + result.result.episodes.forEach((ep: { [x: string]: any; id: any }) => { + ep['bvid'] = Converters.aid2bv(ep.aid) + ep['ep_id'] = ep.id + ep['link'] = `https://www.bilibili.com/bangumi/play/ep${ep.id}` + ep['rights'] = { allow_download: 1, area_limit: 0, allow_dm: 1 } + ep['short_link'] = `https://b23.tv/ep${ep.id}` + }) + result.result.section.forEach(section => { + section.episodes.forEach((ep: { [x: string]: any; id: any }) => { + ep['bvid'] = Converters.aid2bv(ep.aid) + ep['ep_id'] = ep.id + ep['link'] = `https://www.bilibili.com/bangumi/play/ep${ep.id}` + ep['rights'] = { allow_download: 1, area_limit: 0, allow_dm: 1 } + ep['short_link'] = `https://b23.tv/ep${ep.id}` + }) + }) const ep = ep_id != '' ? result.result.episodes.find(ep => ep.ep_id === +ep_id) : result.result.episodes[0] if (!ep) { throw `通过bangumi接口未找到${ep_id}对应的视频信息` } const eps = JSON.stringify(result.result.episodes.map((item, index) => { // 返回的数据是有序的,不需要另外排序 - if (/^\d+(\.\d+)?$/.exec(item.index)) { - item.titleFormat = "第" + item.index + "话 " + item.index_title + if (/^\d+(\.\d+)?$/.exec(item.title)) { + item.titleFormat = "第" + item.title + "话 " + item.long_title } else { - item.titleFormat = item.index - item.index_title = item.index + item.titleFormat = item.long_title } + item.index_title = item.long_title item.loaded = true - item.epStatus = item.episode_status + item.epStatus = item.status item.sectionType = 0 item.id = +item.ep_id item.i = index item.link = 'https://www.bilibili.com/bangumi/play/ep' + item.ep_id - item.title = item.index + item.title = item.titleFormat return item })) let titleForma diff --git a/packages/unblock-area-limit/src/main.user.js b/packages/unblock-area-limit/src/main.user.js index 348e7d80..3275018b 100644 --- a/packages/unblock-area-limit/src/main.user.js +++ b/packages/unblock-area-limit/src/main.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name 解除B站区域限制 // @namespace https://github.com/ipcjs -// @version 8.4.4 +// @version 8.4.5 // @description 通过替换获取视频地址接口的方式, 实现解除B站区域限制; // @author ipcjs // @supportURL https://github.com/ipcjs/bilibili-helper/blob/user.js/packages/unblock-area-limit/README.md diff --git a/packages/unblock-area-limit/src/util/converters.ts b/packages/unblock-area-limit/src/util/converters.ts index b0436bea..2f687def 100644 --- a/packages/unblock-area-limit/src/util/converters.ts +++ b/packages/unblock-area-limit/src/util/converters.ts @@ -95,7 +95,8 @@ export namespace Converters { export function generateSign(params: StringStringObject, key: string) { let s_keys = []; for (let i in params) { - s_keys.push(i); + if (i != '') + s_keys.push(i); } s_keys.sort(); let data = ""; diff --git a/scripts/bilibili_bangumi_area_limit_hack.user.js b/scripts/bilibili_bangumi_area_limit_hack.user.js index ba5d59cc..7941fa02 100644 --- a/scripts/bilibili_bangumi_area_limit_hack.user.js +++ b/scripts/bilibili_bangumi_area_limit_hack.user.js @@ -76,6 +76,117 @@ if (!Object.getOwnPropertyDescriptor(window, 'XMLHttpRequest').writable) { /** 脚本的主体部分, 在GM4中, 需要把这个函数转换成字符串, 注入到页面中, 故不要引用外部的变量 */ function scriptSource(invokeBy) { // @template-content + function getCookies() { + var map = document.cookie.split('; ').reduce(function (obj, item) { + var entry = item.split('='); + obj[entry[0]] = entry[1]; + return obj; + }, {}); + return map; + } + function getCookie(key) { + return getCookies()[key]; + } + /** + * @param key key + * @param value 为undefined时, 表示删除cookie + * @param options 为undefined时, 表示过期时间为3年 + * 为''时, 表示Session cookie + * 为数字时, 表示指定过期时间 + * 为{}时, 表示指定所有的属性 + * */ + function setCookie(key, value, options) { + if (typeof options !== 'object') { + options = { + domain: '.bilibili.com', + path: '/', + 'max-age': value === undefined ? 0 : (options === undefined ? 94608000 : options) + }; + } + var c = Object.keys(options).reduce(function (str, key) { + return str + '; ' + key + '=' + options[key]; + }, key + '=' + value); + document.cookie = c; + return c; + } + const target = { + set: setCookie, + get: getCookie, + all: getCookies, + }; + /** + * 模仿localStorage + */ + const cookieStorage = new Proxy(target, { + get: function (target, prop) { + if (prop in target) + return target[prop]; + if (typeof prop !== 'string') + throw new TypeError(`unsupported prop=${String(prop)}`); + return getCookie(prop); + }, + set: function (target, prop, value) { + if (typeof prop !== 'string') + return false; + setCookie(prop, value); + return true; + } + }); + + const r_text = { + ok: { en: 'OK', zh_cn: '确定', }, + close: { en: 'Close', zh_cn: '关闭' }, + welcome_to_acfun: '

缺B乐 了解下?

', + version_remind: ``, + }; + function _t(key) { + const text = r_text[key]; + const lang = 'zh_cn'; + return typeof text === 'string' ? text : text[lang]; + } + const TRUE = 'Y'; + const FALSE = ''; + const r = { + html: {}, + attr: {}, + url: { + issue: 'https://github.com/ipcjs/bilibili-helper/issues', + issue_new: 'https://github.com/ipcjs/bilibili-helper/issues/new', + readme: 'https://github.com/ipcjs/bilibili-helper/blob/user.js/packages/unblock-area-limit/README.md#%E8%A7%A3%E9%99%A4b%E7%AB%99%E5%8C%BA%E5%9F%9F%E9%99%90%E5%88%B6', + }, + script: { + is_dev: GM_info.script.name.includes('.dev'), + }, + const: { + mode: { + /** 默认模式, 自动判断使用何种模式, 推荐; */ + DEFAULT: 'default', + /** 替换模式, 替换有区域限制的视频的接口的返回值; */ + REPLACE: 'replace', + /** 重定向模式, 直接重定向所有番剧视频的接口到代理服务器; 所有番剧视频都通过代理服务器获取视频地址, 如果代理服务器不稳定, 可能加载不出视频; */ + REDIRECT: 'redirect', + }, + server: { + S0: 'https://biliplus.ipcjs.top', + S1: 'https://www.biliplus.com', + CUSTOM: '__custom__', + defaultServer: function () { + return this.S1; + }, + }, + TRUE: TRUE, + FALSE: FALSE, + }, + regex: { + /** api.bilibili.com的全站代理 */ + bilibili_api_proxy: /^https?:\/\/(?[\p{L}\d:_-]+@)?(?[\p{L}\d_-]+(\.[\p{L}\d_-]+)+(:\d+)?)$/u, + }, + baipiao: [ + { key: 'zomble_land_saga', match: () => { var _a, _b; return ((_b = (_a = window.__INITIAL_STATE__) === null || _a === void 0 ? void 0 : _a.epInfo) === null || _b === void 0 ? void 0 : _b.ep_id) === 251255; }, link: 'http://www.acfun.cn/bangumi/ab5022161_31405_278830', message: r_text.welcome_to_acfun }, + { key: 'zomble_land_saga', match: () => { var _a, _b; return ((_b = (_a = window.__INITIAL_STATE__) === null || _a === void 0 ? void 0 : _a.mediaInfo) === null || _b === void 0 ? void 0 : _b.media_id) === 140772; }, link: 'http://www.acfun.cn/bangumi/aa5022161', message: r_text.welcome_to_acfun }, + ] + }; + var Strings; (function (Strings) { function multiply(str, multiplier) { @@ -152,60 +263,6 @@ function scriptSource(invokeBy) { Objects.stringifyArray = stringifyArray; })(Objects || (Objects = {})); - const r_text = { - ok: { en: 'OK', zh_cn: '确定', }, - close: { en: 'Close', zh_cn: '关闭' }, - welcome_to_acfun: '

缺B乐 了解下?

', - version_remind: ``, - }; - function _t(key) { - const text = r_text[key]; - const lang = 'zh_cn'; - return typeof text === 'string' ? text : text[lang]; - } - const TRUE = 'Y'; - const FALSE = ''; - const r = { - html: {}, - attr: {}, - url: { - issue: 'https://github.com/ipcjs/bilibili-helper/issues', - issue_new: 'https://github.com/ipcjs/bilibili-helper/issues/new', - readme: 'https://github.com/ipcjs/bilibili-helper/blob/user.js/packages/unblock-area-limit/README.md#%E8%A7%A3%E9%99%A4b%E7%AB%99%E5%8C%BA%E5%9F%9F%E9%99%90%E5%88%B6', - }, - script: { - is_dev: GM_info.script.name.includes('.dev'), - }, - const: { - mode: { - /** 默认模式, 自动判断使用何种模式, 推荐; */ - DEFAULT: 'default', - /** 替换模式, 替换有区域限制的视频的接口的返回值; */ - REPLACE: 'replace', - /** 重定向模式, 直接重定向所有番剧视频的接口到代理服务器; 所有番剧视频都通过代理服务器获取视频地址, 如果代理服务器不稳定, 可能加载不出视频; */ - REDIRECT: 'redirect', - }, - server: { - S0: 'https://biliplus.ipcjs.top', - S1: 'https://www.biliplus.com', - CUSTOM: '__custom__', - defaultServer: function () { - return this.S1; - }, - }, - TRUE: TRUE, - FALSE: FALSE, - }, - regex: { - /** api.bilibili.com的全站代理 */ - bilibili_api_proxy: /^https?:\/\/(?[\p{L}\d:_-]+@)?(?[\p{L}\d_-]+(\.[\p{L}\d_-]+)+(:\d+)?)$/u, - }, - baipiao: [ - { key: 'zomble_land_saga', match: () => { var _a, _b; return ((_b = (_a = window.__INITIAL_STATE__) === null || _a === void 0 ? void 0 : _a.epInfo) === null || _b === void 0 ? void 0 : _b.ep_id) === 251255; }, link: 'http://www.acfun.cn/bangumi/ab5022161_31405_278830', message: r_text.welcome_to_acfun }, - { key: 'zomble_land_saga', match: () => { var _a, _b; return ((_b = (_a = window.__INITIAL_STATE__) === null || _a === void 0 ? void 0 : _a.mediaInfo) === null || _b === void 0 ? void 0 : _b.media_id) === 140772; }, link: 'http://www.acfun.cn/bangumi/aa5022161', message: r_text.welcome_to_acfun }, - ] - }; - const tag = GM_info.script.name + '.msg'; // 计算"楼层", 若当前window就是顶层的window, 则floor为0, 以此类推 function computeFloor(w = window, floor = 0) { @@ -228,7 +285,8 @@ function scriptSource(invokeBy) { } const logHub = { msg: function (msg) { - window.top.postMessage([tag, floor, msg], '*'); + var _a; + (_a = window.top) === null || _a === void 0 ? void 0 : _a.postMessage([tag, floor, msg], '*'); }, getAllMsg: function (replaces = {}) { let allMsg = msgList.join('\n'); @@ -258,128 +316,148 @@ function scriptSource(invokeBy) { const util_warn = logImpl('warn'); const util_error = logImpl('error'); - /** @see https://github.com/yujincheng08/BiliRoaming/blob/f689b138da7ac45d2591d375f19698c969844324/app/src/main/res/values/strings.xml#L112-L131 */ - const uposMap = { - ali: 'upos-sz-mirrorali.bilivideo.com', - alib: 'upos-sz-mirroralib.bilivideo.com', - ks3: 'upos-sz-mirrorks3.bilivideo.com', - ks3b: 'upos-sz-mirrorks3b.bilivideo.com', - ks3c: 'upos-sz-mirrorks3c.bilivideo.com', - ks32: 'upos-sz-mirrorks32.bilivideo.com', - kodo: 'upos-sz-mirrorkodo.bilivideo.com', - kodob: 'upos-sz-mirrorkodob.bilivideo.com', - cos: 'upos-sz-mirrorcos.bilivideo.com', - cosb: 'upos-sz-mirrorcosb.bilivideo.com', - bos: 'upos-sz-mirrorbos.bilivideo.com', - /** 不限CROS, 限制UA */ - hw: 'upos-sz-mirrorhw.bilivideo.com', - hwb: 'upos-sz-mirrorhwb.bilivideo.com', - upbda2: 'upos-sz-upcdnbda2.bilivideo.com', - upws: 'upos-sz-upcdnws.bilivideo.com', - uptx: 'upos-sz-upcdntx.bilivideo.com', - uphw: 'upos-sz-upcdnhw.bilivideo.com', - js: 'upos-tf-all-js.bilivideo.com', - hk: 'cn-hk-eq-bcache-01.bilivideo.com', - akamai: 'upos-hz-mirrorakam.akamaized.net', - }; - var Converters; - (function (Converters) { - // https://greasyfork.org/zh-CN/scripts/398535-bv2av/code - const table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'; - const tr = {}; - for (var i = 0; i < 58; ++i) { - tr[table[i]] = i; + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + var Func; + (function (Func) { + function noop() { } + Func.noop = noop; + function runCatching(func, onError) { + let ret = function () { + try { + return func.apply(this, arguments); + } + catch (e) { + if (onError) + return onError(e); // onError可以处理报错时的返回值 + // 否则打印log, 并返回undefined + util_error('Exception while run %o: %o\n%o', func, e, e.stack); + return undefined; + } + }; + // 函数的name属性是不可写+可配置的, 故需要如下代码实现类似这样的效果: ret.name = func.name + // 在Edge上匿名函数的name的描述符会为undefined, 需要做特殊处理, fuck + let funcNameDescriptor = Object.getOwnPropertyDescriptor(func, 'name') || { + value: '', + writable: false, + configurable: true, + }; + Object.defineProperty(ret, 'name', funcNameDescriptor); + return ret; } - const s = [11, 10, 3, 8, 4, 6]; - const xor = 177451812; - const add = 8728348608; - function bv2aid(bv) { - let r = 0; - for (let i = 0; i < 6; ++i) { - r += tr[bv[s[i]]] * (58 ** i); - } - return String((r - add) ^ xor); - } - Converters.bv2aid = bv2aid; - function aid2bv(x) { - x = (x ^ xor) + add; - const r = Array.from('BV1 4 1 7 '); - for (let i = 0; i < 6; i++) { - r[s[i]] = table[Math.trunc(x / (58 ** i)) % 58]; - } - return r.join(''); - } - Converters.aid2bv = aid2bv; - function xml2obj(xml) { - try { - var obj = {}, text; - var children = xml.children; - if (children.length > 0) { - for (var i = 0; i < children.length; i++) { - var item = children.item(i); - var nodeName = item.nodeName; - if (typeof (obj[nodeName]) == "undefined") { // 若是新的属性, 则往obj中添加 - obj[nodeName] = xml2obj(item); - } - else { - if (typeof (obj[nodeName].push) == "undefined") { // 若老的属性没有push方法, 则把属性改成Array - var old = obj[nodeName]; - obj[nodeName] = []; - obj[nodeName].push(old); - } - obj[nodeName].push(xml2obj(item)); - } - } - } - else { - text = xml.textContent; // todo: 强转为非空是否有问题? - if (/^\d+(\.\d+)?$/.test(text)) { - obj = Number(text); - } - else if (text === 'true' || text === 'false') { - obj = Boolean(text); - } - else { - obj = text; - } - } - return obj; - } - catch (e) { - util_error(e); - } + Func.runCatching = runCatching; + })(Func || (Func = {})); + /** + * TS不支持可选链赋值, 详见: https://github.com/tc39/proposal-optional-chaining#not-supported + * 可以使用该方法简化书写 + * */ + function ifNotNull(value, block) { + if (value != null) { + block(value); } - Converters.xml2obj = xml2obj; - function generateSign(params, key) { - let s_keys = []; - for (let i in params) { - s_keys.push(i); - } - s_keys.sort(); - let data = ""; - for (let i = 0; i < s_keys.length; i++) { - // encodeURIComponent 返回的转义数字必须为大写( 如 %2F ) - data += (data ? "&" : "") + s_keys[i] + "=" + encodeURIComponent(params[s_keys[i]]); - } - return { - sign: hex_md5(data + key), - params: data, - }; + } + + const RUN_AT = { + // readyState = loading + LOADING: -1, + // readyState = interactive + DOM_LOADED: 0, + // readyState = interactive + DOM_LOADED_AFTER: 1, + // readyState = complete + COMPLETE: 2, + }; + const PRIORITY = { + FIRST: 1e6, + HIGH: 1e5, + BEFORE: 1e3, + DEFAULT: 0, + AFTER: -1e3, + LOW: -1e5, + LAST: -1e6, + }; + const callbacks = { + [RUN_AT.LOADING]: [], + [RUN_AT.DOM_LOADED]: [], + [RUN_AT.DOM_LOADED_AFTER]: [], + [RUN_AT.COMPLETE]: [], + }; + function showWarn() { + util_warn(`${GM_info.script.name} ${window.document.readyState} 加载时机不太对, 不能保证正常工作\n\n1. 尝试刷新页面, 重载脚本\n2. 若依然出现该提示, 请尝试'硬性重新加载'(快捷键一般为ctrl+f5)\n3. 若还是出现该提示, 请尝试关闭再重新打开该页面\n4. 若反复出现该提示, 那也没其他办法了_(:3」∠)_\n`); + } + let atRun; // 用来表示当前运行到什么状态 + switch (window.document.readyState) { + case 'loading': + atRun = RUN_AT.LOADING; + break; + case 'interactive': + showWarn(); + atRun = RUN_AT.DOM_LOADED_AFTER; + break; + case 'complete': + showWarn(); + atRun = RUN_AT.COMPLETE; + break; + } + util_debug(`atRun: ${atRun}, ${window.document.readyState}`); + const util_page_valid = () => true; // 是否要运行 + const dclCreator = function (runAt) { + let dcl = function () { + util_debug(`atRun: ${runAt}, ${window.document.readyState}`); + atRun = runAt; // 更新运行状态 + const valid = util_page_valid(); + // 优先级从大到小, index从小到大, 排序 + callbacks[runAt].sort((a, b) => b.priority - a.priority || a.index - b.index) + .filter(item => valid ) + .forEach(item => item.func(valid)); + }; + return dcl; + }; + window.document.addEventListener('DOMContentLoaded', dclCreator(RUN_AT.DOM_LOADED)); + window.addEventListener('DOMContentLoaded', dclCreator(RUN_AT.DOM_LOADED_AFTER)); + window.addEventListener('load', dclCreator(RUN_AT.COMPLETE)); + const util_init = function (func, priority = PRIORITY.DEFAULT, runAt = RUN_AT.DOM_LOADED, always = false) { + func = Func.runCatching(func); + if (atRun < runAt) { // 若还没运行到runAt指定的状态, 则放到队列里去 + callbacks[runAt].push({ + priority, + index: callbacks[runAt].length, // 使用callback数组的长度, 作为添加元素的index属性 + func, + always + }); } - Converters.generateSign = generateSign; - /** - * 直接替换host大多数时候似乎不行, 即使可以视频的分辨率也很低, 原因未知 - * @param replaceAkamai 详见:`BalhConfig.upos_replace_akamai` - */ - function replaceUpos(data, host = uposMap.uptx, replaceAkamai) { - var str = JSON.stringify(data); - if (!str.includes("akamaized.net") || replaceAkamai) { - str = str.replace(/:\\?\/\\?\/[^\/]+\\?\//g, `://${host}/`); + else { // 否则直接运行, TODO: 这种情况下优先级得不到保证... + let valid = util_page_valid(); + { + func(valid); } - return JSON.parse(str); } - Converters.replaceUpos = replaceUpos; - })(Converters || (Converters = {})); + }; + util_init.RUN_AT = RUN_AT; + util_init.PRIORITY = PRIORITY; /** * 创建元素的快捷方法: @@ -599,143 +677,121 @@ function scriptSource(invokeBy) { Async.jsonp = jsonp; })(Async || (Async = {})); - function getCookies() { - var map = document.cookie.split('; ').reduce(function (obj, item) { - var entry = item.split('='); - obj[entry[0]] = entry[1]; - return obj; - }, {}); - return map; - } - function getCookie(key) { - return getCookies()[key]; - } - /** - * @param key key - * @param value 为undefined时, 表示删除cookie - * @param options 为undefined时, 表示过期时间为3年 - * 为''时, 表示Session cookie - * 为数字时, 表示指定过期时间 - * 为{}时, 表示指定所有的属性 - * */ - function setCookie(key, value, options) { - if (typeof options !== 'object') { - options = { - domain: '.bilibili.com', - path: '/', - 'max-age': value === undefined ? 0 : (options === undefined ? 94608000 : options) - }; - } - var c = Object.keys(options).reduce(function (str, key) { - return str + '; ' + key + '=' + options[key]; - }, key + '=' + value); - document.cookie = c; - return c; - } - const target = { - set: setCookie, - get: getCookie, - all: getCookies, - }; - /** - * 模仿localStorage - */ - const cookieStorage = new Proxy(target, { - get: function (target, prop) { - if (prop in target) - return target[prop]; - if (typeof prop !== 'string') - throw new TypeError(`unsupported prop=${String(prop)}`); - return getCookie(prop); - }, - set: function (target, prop, value) { - if (typeof prop !== 'string') - return false; - setCookie(prop, value); - return true; + var ui; + (function (ui) { + ui.alert = function (message, resolve, reject) { + setTimeout(() => { + if (resolve) { + if (window.confirm(message)) { + resolve(); + } + else { + if (reject) { + reject(); + } + } + } + else { + window.alert(message); + } + }, 500); + }; + function prompt(message, defaultValue) { + return __awaiter(this, void 0, void 0, function* () { + yield Async.timeout(500); + return window.prompt(message, defaultValue); + }); } - }); - - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR - OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */ - - function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - var Func; - (function (Func) { - function noop() { } - Func.noop = noop; - function runCatching(func, onError) { - let ret = function () { - try { - return func.apply(this, arguments); - } - catch (e) { - if (onError) - return onError(e); // onError可以处理报错时的返回值 - // 否则打印log, 并返回undefined - util_error('Exception while run %o: %o\n%o', func, e, e.stack); - return undefined; + ui.prompt = prompt; + ui.copy = function (text, textarea) { + textarea.value = text; + textarea.select(); + try { + return document.execCommand('copy'); + } + catch (e) { + util_error('复制文本出错', e); + } + return false; + }; + /** + * - param.content: 内容元素数组/HTML + * - param.showConfirm: 是否显示确定按钮 + * - param.confirmBtn: 确定按钮的文字 + * - param.onConfirm: 确定回调 + * - param.onClose: 关闭回调 + */ + ui.pop = function (param) { + var _a; + if (typeof param.content === 'string') { + let template = createElement('template'); + template.innerHTML = param.content.trim(); + param.content = Array.from(template.content.childNodes); + } + else if (!(param.content instanceof Array)) { + util_log(`param.content(${param.content}) 不是数组`); + return; + } + if (document.getElementById('AHP_Notice_style') == null) { + let noticeWidth = Math.min(500, innerWidth - 40); + document.head.appendChild(createElement('style', { id: 'AHP_Notice_style' }, [createElement('text', `#AHP_Notice{ line-height:normal;position:fixed;left:0;right:0;top:0;height:0;z-index:20000;transition:.5s;cursor:default;pointer-events:none } .AHP_down_banner{ margin:2px;padding:2px;color:#FFFFFF;font-size:13px;font-weight:bold;background-color:green } .AHP_down_btn{ margin:2px;padding:4px;color:#1E90FF;font-size:14px;font-weight:bold;border:#1E90FF 2px solid;display:inline-block;border-radius:5px } body.ABP-FullScreen{ overflow:hidden } @keyframes pop-iframe-in{0%{opacity:0;transform:scale(.7);}100%{opacity:1;transform:scale(1)}} @keyframes pop-iframe-out{0%{opacity:1;transform:scale(1);}100%{opacity:0;transform:scale(.7)}} #AHP_Notice>div{ position:absolute;bottom:0;left:0;right:0;font-size:15px } #AHP_Notice>div>div{ border:1px #AAA solid;width:${noticeWidth}px;margin:0 auto;padding:20px 10px 5px;background:#EFEFF4;color:#000;border-radius:5px;box-shadow:0 0 5px -2px;pointer-events:auto;white-space:pre-wrap } #AHP_Notice>div>div *{ margin:5px 0; } #AHP_Notice input[type=text]{ border: none;border-bottom: 1px solid #AAA;width: 60%;background: transparent } #AHP_Notice input[type=text]:active{ border-bottom-color:#4285f4 } #AHP_Notice input[type=button] { border-radius: 2px; border: #adadad 1px solid; padding: 3px; margin: 0 5px; min-width:50px } #AHP_Notice input[type=button]:hover { background: #FFF; } #AHP_Notice input[type=button]:active { background: #CCC; } .noflash-alert{display:none}`)])); + } + (_a = document.querySelector('#AHP_Notice')) === null || _a === void 0 ? void 0 : _a.remove(); + let div = createElement('div', { id: 'AHP_Notice' }); + let children = []; + if (param.showConfirm || param.confirmBtn || param.onConfirm) { + children.push(createElement('input', { value: param.confirmBtn || _t('ok'), type: 'button', className: 'confirm', event: { click: param.onConfirm } })); + } + children.push(createElement('input', { + value: _t('close'), type: 'button', className: 'close', event: { + click: function () { + param.onClose && param.onClose(); + div.style.height = '0'; + setTimeout(function () { div.remove(); }, 500); + } } - }; - // 函数的name属性是不可写+可配置的, 故需要如下代码实现类似这样的效果: ret.name = func.name - // 在Edge上匿名函数的name的描述符会为undefined, 需要做特殊处理, fuck - let funcNameDescriptor = Object.getOwnPropertyDescriptor(func, 'name') || { - value: '', - writable: false, - configurable: true, - }; - Object.defineProperty(ret, 'name', funcNameDescriptor); - return ret; - } - Func.runCatching = runCatching; - Func.safeGet = (code) => { - return eval(` - (()=>{ - try{ - return ${code} - }catch(e){ - console.warn(e.toString()) - return null + })); + div.appendChild(createElement('div', {}, [createElement('div', {}, param.content.concat([createElement('hr'), createElement('div', { style: { textAlign: 'right' } }, children)]))])); + document.body.appendChild(div); + div.style.height = div.firstChild.offsetHeight + 'px'; + }; + ui.playerMsg = function (message) { + const msg = Objects.stringify(message); + util_info('player msg:', msg); + const $panel = document.querySelector('.bilibili-player-video-panel-text'); + if ($panel) { + let stage = $panel.children.length + 1000; // 加1000和B站自己发送消息的stage区别开来 + $panel.appendChild(createElement('div', { className: 'bilibili-player-video-panel-row', stage: stage }, [createElement('text', `[${GM_info.script.name}] ${msg}`)])); + } + }; + ui.popFrame = function (iframeSrc) { + if (!document.getElementById('balh-style-login')) { + var style = document.createElement('style'); + style.id = 'balh-style-login'; + document.head.appendChild(style).innerHTML = '@keyframes pop-iframe-in{0%{opacity:0;transform:scale(.7);}100%{opacity:1;transform:scale(1)}}@keyframes pop-iframe-out{0%{opacity:1;transform:scale(1);}100%{opacity:0;transform:scale(.7)}}.GMBiliPlusCloseBox{position:absolute;top:5%;right:8%;font-size:40px;color:#FFF}'; + } + var div = document.createElement('div'); + div.id = 'GMBiliPlusLoginContainer'; + div.innerHTML = '
×
'; + div.firstChild.addEventListener('click', function (e) { + if (e.target === this || e.target.className === 'GMBiliPlusCloseBox') { + if (!confirm('确认关闭?')) { + return false; + } + div.firstChild.style.animationName = 'pop-iframe-out'; + setTimeout(function () { + div.remove(); + }, 5e2); } - })() - `); + }); + document.body.appendChild(div); }; - })(Func || (Func = {})); - /** - * TS不支持可选链赋值, 详见: https://github.com/tc39/proposal-optional-chaining#not-supported - * 可以使用该方法简化书写 - * */ - function ifNotNull(value, block) { - if (value != null) { - block(value); - } - } + })(ui || (ui = {})); const util_page = { player: () => location.href.includes('www.bilibili.com/blackboard/html5player'), // 在av页面中的iframe标签形式的player - player_in_av: Func.runCatching(() => util_page.player() && window.top.location.href.includes('www.bilibili.com/video/av'), (e) => util_debug(e)), + player_in_av: Func.runCatching(() => { var _a; return util_page.player() && ((_a = window.top) === null || _a === void 0 ? void 0 : _a.location.href.includes('www.bilibili.com/video/av')); }, (e) => util_debug(e)), av: () => location.href.includes('www.bilibili.com/video/av') || location.href.includes('www.bilibili.com/video/BV'), av_new: function () { return this.av() && (window.__playinfo__ || window.__playinfo__origin); }, bangumi: () => location.href.match(new RegExp('^https?://bangumi\\.bilibili\\.com/anime/\\d+/?$')), @@ -757,6 +813,101 @@ function scriptSource(invokeBy) { }, }; + function switch_to_old_player() { + if (util_page.av() && !localStorage.balh_disable_switch_to_old_player) { + util_init(() => { + const $switchToOldBtn = document.querySelector('#entryOld > .old-btn > a'); + if ($switchToOldBtn) { + ui.pop({ + content: `${GM_info.script.name} 对新版播放器的支持还在测试阶段, 不稳定, 推荐切换回旧版`, + confirmBtn: '切换回旧版', + onConfirm: () => $switchToOldBtn.click(), + onClose: () => localStorage.balh_disable_switch_to_old_player = r.const.TRUE, + }); + } + }); + } + if (util_page.new_bangumi()) { + if (cookieStorage.stardustpgcv === '0606') { + util_init(() => { + let $panel = document.querySelector('.error-container > .server-error'); + if ($panel) { + $panel.insertBefore(createElement('text', '临时切换到旧版番剧页面中...'), $panel.firstChild); + cookieStorage.stardustpgcv = '0'; + localStorage.balh_temp_switch_to_old_page = r.const.TRUE; + location.reload(); + } + }); + } + if (localStorage.balh_temp_switch_to_old_page) { + cookieStorage.stardustpgcv = '0606'; + delete localStorage.balh_temp_switch_to_old_page; + } + } + } + + function version_remind() { + if (!util_page.new_bangumi()) + return; + util_init(() => { + if ((localStorage.balh_version || '0') < GM_info.script.version) { + localStorage.balh_version = GM_info.script.version; + let version_remind = _t('version_remind'); + if (version_remind) { + ui.pop({ content: `

${GM_info.script.name} v${GM_info.script.version} 更新日志

${version_remind}` }); + } + } + }); + } + + function isHtml5Player() { + return localStorage.defaulth5 === '1'; + } + function check_html5() { + function checkHtml5() { + var playerContent = document.querySelector('.player-content'); + if (!localStorage.balh_h5_not_first && !isHtml5Player() && window.GrayManager && playerContent) { + new MutationObserver(function (mutations, observer) { + var _a; + observer.disconnect(); + localStorage.balh_h5_not_first = r.const.TRUE; + if (window.confirm(GM_info.script.name + '只在HTML5播放器下有效,是否切换到HTML5?')) { + (_a = window.GrayManager) === null || _a === void 0 ? void 0 : _a.clickMenu('change_h5'); // change_flash, change_h5 + } + }).observe(playerContent, { + childList: true, // 监听child的增减 + attributes: false, // 监听属性的变化 + }); + } + } + util_init(() => { + // 除了播放器和番剧列表页面, 其他页面都需要检测html5 + if (!(util_page.bangumi() || util_page.bangumi_md() || util_page.player())) { + checkHtml5(); + } + }); + } + + function jump_to_baipiao() { + util_init(() => { + for (let bp of r.baipiao) { + const cookie_key = `balh_baipao_${bp.key}`; + if (bp.match() && !cookieStorage[cookie_key]) { + ui.pop({ + content: [ + createElement('text', '发现白嫖地址: '), createElement('a', { href: bp.link }, bp.link), + createElement('div', {}, bp.message), + ], + confirmBtn: '一键跳转', + onConfirm: () => { location.href = bp.link; }, + onClose: () => { cookieStorage.set(cookie_key, r.const.TRUE, ''); } + }); + break; + } + } + }, util_init.PRIORITY.DEFAULT, util_init.RUN_AT.DOM_LOADED_AFTER); + } + const cookies = cookieStorage.all(); // 缓存的cookies const balh_config = new Proxy({ /*保存config的对象*/}, { get: function (target, prop) { @@ -831,39 +982,172 @@ function scriptSource(invokeBy) { return balh_config.is_closed || !balh_config.server_custom; } - /** - * 构建 mobi api 解析链接 - * host 举例: 'https://example.com' - * - * 参考:https://github.com/kghost/bilibili-area-limit/issues/16 - */ - function getMobiPlayUrl(originUrl, host, area) { - // 合成泰区 url - if (area == 'th') { - return `${host}/intl/gateway/v2/ogv/playurl?${generateMobiPlayUrlParams(originUrl, area)}`; - } - // 合成完整 mobi api url - return `${host}/pgc/player/api/playurl?${generateMobiPlayUrlParams(originUrl, area)}`; - } - function generateMobiPlayUrlParams(originUrl, area) { - // 提取参数为数组 - let a = originUrl.split('?')[1].split('&'); - // 参数数组转换为对象 - let theRequest = {}; - for (let i = 0; i < a.length; i++) { - let key = a[i].split("=")[0]; - let value = a[i].split("=")[1]; - // 给对象赋值 - theRequest[key] = value; - } - // 追加 mobi api 需要的参数 - theRequest.access_key = localStorage.access_key; - if (area === 'th') { - theRequest.appkey = '7d089525d3611b1c'; - theRequest.area = 'th'; - theRequest.build = '1001310'; - theRequest.mobi_app = 'bstar_a'; - theRequest.platform = 'android'; + /** @see https://github.com/yujincheng08/BiliRoaming/blob/f689b138da7ac45d2591d375f19698c969844324/app/src/main/res/values/strings.xml#L112-L131 */ + const uposMap = { + ali: 'upos-sz-mirrorali.bilivideo.com', + alib: 'upos-sz-mirroralib.bilivideo.com', + ks3: 'upos-sz-mirrorks3.bilivideo.com', + ks3b: 'upos-sz-mirrorks3b.bilivideo.com', + ks3c: 'upos-sz-mirrorks3c.bilivideo.com', + ks32: 'upos-sz-mirrorks32.bilivideo.com', + kodo: 'upos-sz-mirrorkodo.bilivideo.com', + kodob: 'upos-sz-mirrorkodob.bilivideo.com', + cos: 'upos-sz-mirrorcos.bilivideo.com', + cosb: 'upos-sz-mirrorcosb.bilivideo.com', + bos: 'upos-sz-mirrorbos.bilivideo.com', + /** 不限CROS, 限制UA */ + hw: 'upos-sz-mirrorhw.bilivideo.com', + hwb: 'upos-sz-mirrorhwb.bilivideo.com', + upbda2: 'upos-sz-upcdnbda2.bilivideo.com', + upws: 'upos-sz-upcdnws.bilivideo.com', + uptx: 'upos-sz-upcdntx.bilivideo.com', + uphw: 'upos-sz-upcdnhw.bilivideo.com', + js: 'upos-tf-all-js.bilivideo.com', + hk: 'cn-hk-eq-bcache-01.bilivideo.com', + akamai: 'upos-hz-mirrorakam.akamaized.net', + }; + var Converters; + (function (Converters) { + // https://greasyfork.org/zh-CN/scripts/398535-bv2av/code + const table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'; + const tr = {}; + for (var i = 0; i < 58; ++i) { + tr[table[i]] = i; + } + const s = [11, 10, 3, 8, 4, 6]; + const xor = 177451812; + const add = 8728348608; + function bv2aid(bv) { + let r = 0; + for (let i = 0; i < 6; ++i) { + r += tr[bv[s[i]]] * (58 ** i); + } + return String((r - add) ^ xor); + } + Converters.bv2aid = bv2aid; + function aid2bv(x) { + x = (x ^ xor) + add; + const r = Array.from('BV1 4 1 7 '); + for (let i = 0; i < 6; i++) { + r[s[i]] = table[Math.trunc(x / (58 ** i)) % 58]; + } + return r.join(''); + } + Converters.aid2bv = aid2bv; + function xml2obj(xml) { + try { + var obj = {}, text; + var children = xml.children; + if (children.length > 0) { + for (var i = 0; i < children.length; i++) { + var item = children.item(i); + var nodeName = item.nodeName; + if (typeof (obj[nodeName]) == "undefined") { // 若是新的属性, 则往obj中添加 + obj[nodeName] = xml2obj(item); + } + else { + if (typeof (obj[nodeName].push) == "undefined") { // 若老的属性没有push方法, 则把属性改成Array + var old = obj[nodeName]; + obj[nodeName] = []; + obj[nodeName].push(old); + } + obj[nodeName].push(xml2obj(item)); + } + } + } + else { + text = xml.textContent; // todo: 强转为非空是否有问题? + if (/^\d+(\.\d+)?$/.test(text)) { + obj = Number(text); + } + else if (text === 'true' || text === 'false') { + obj = Boolean(text); + } + else { + obj = text; + } + } + return obj; + } + catch (e) { + util_error(e); + } + } + Converters.xml2obj = xml2obj; + function generateSign(params, key) { + let s_keys = []; + for (let i in params) { + if (i != '') + s_keys.push(i); + } + s_keys.sort(); + let data = ""; + for (let i = 0; i < s_keys.length; i++) { + // encodeURIComponent 返回的转义数字必须为大写( 如 %2F ) + data += (data ? "&" : "") + s_keys[i] + "=" + encodeURIComponent(params[s_keys[i]]); + } + return { + sign: hex_md5(data + key), + params: data, + }; + } + Converters.generateSign = generateSign; + /** + * 直接替换host大多数时候似乎不行, 即使可以视频的分辨率也很低, 原因未知 + * @param replaceAkamai 详见:`BalhConfig.upos_replace_akamai` + */ + function replaceUpos(data, host = uposMap.uptx, replaceAkamai) { + var str = JSON.stringify(data); + if (!str.includes("akamaized.net") || replaceAkamai) { + str = str.replace(/:\\?\/\\?\/[^\/]+\\?\//g, `://${host}/`); + } + return JSON.parse(str); + } + Converters.replaceUpos = replaceUpos; + })(Converters || (Converters = {})); + + const access_key_param_if_exist = function (isKghost = false) { + // access_key是由B站验证的, B站帐号和BP帐号不同时, access_key无效 + // kghost的服务器使用的B站帐号, access_key有效 + return (localStorage.access_key && (!balh_config.blocked_vip || isKghost)) ? `&access_key=${localStorage.access_key}` : ''; + }; + const platform_android_param_if_app_only = function () { + return window.__balh_app_only__ ? '&platform=android&fnval=0' : ''; + }; + + /** + * 构建 mobi api 解析链接 + * host 举例: 'https://example.com' + * + * 参考:https://github.com/kghost/bilibili-area-limit/issues/16 + */ + function getMobiPlayUrl(originUrl, host, area) { + // 合成泰区 url + if (area == 'th') { + return `${host}/intl/gateway/v2/ogv/playurl?${generateMobiPlayUrlParams(originUrl, area)}`; + } + // 合成完整 mobi api url + return `${host}/pgc/player/api/playurl?${generateMobiPlayUrlParams(originUrl, area)}`; + } + function generateMobiPlayUrlParams(originUrl, area) { + // 提取参数为数组 + let a = originUrl.split('?')[1].split('&'); + // 参数数组转换为对象 + let theRequest = {}; + for (let i = 0; i < a.length; i++) { + let key = a[i].split("=")[0]; + let value = a[i].split("=")[1]; + // 给对象赋值 + theRequest[key] = value; + } + // 追加 mobi api 需要的参数 + theRequest.access_key = localStorage.access_key; + if (area === 'th') { + theRequest.appkey = '7d089525d3611b1c'; + theRequest.area = 'th'; + theRequest.build = '1001310'; + theRequest.mobi_app = 'bstar_a'; + theRequest.platform = 'android'; } else { theRequest.appkey = '07da50c9a0bf829f'; @@ -902,46 +1186,46 @@ function scriptSource(invokeBy) { function fixMobiPlayUrlJson(originJson) { return __awaiter(this, void 0, void 0, function* () { const codecsMap = { - 30120: 'avc1.64003C', - 30121: 'hev1.1.6.L156.90', - 30112: 'avc1.640028', - 30102: 'hev1.1.6.L120.90', - 30080: 'avc1.640028', - 30077: 'hev1.1.6.L120.90', - 30064: 'avc1.64001F', - 30066: 'hev1.1.6.L120.90', - 30032: 'avc1.64001E', - 30033: 'hev1.1.6.L120.90', - 30011: 'hev1.1.6.L120.90', - 30016: 'avc1.64001E', - 30006: 'avc1.64001E', - 30005: 'avc1.64001E', - 30280: 'mp4a.40.2', - 30232: 'mp4a.40.2', - 30216: 'mp4a.40.2', - 'nb2-1-30016': 'avc1.64001E', - 'nb2-1-30032': 'avc1.64001F', - 'nb2-1-30064': 'avc1.640028', - 'nb2-1-30080': 'avc1.640032', - 'nb2-1-30216': 'mp4a.40.2', - 'nb2-1-30232': 'mp4a.40.2', + 30120: 'avc1.64003C', // 4K + 30121: 'hev1.1.6.L156.90', // HEVC 4K + 30112: 'avc1.640028', // 1080P+ + 30102: 'hev1.1.6.L120.90', // HEVC 1080P+ + 30080: 'avc1.640028', // 1080P + 30077: 'hev1.1.6.L120.90', // HEVC 1080P + 30064: 'avc1.64001F', // 720P + 30066: 'hev1.1.6.L120.90', // HEVC 720P + 30032: 'avc1.64001E', // 480P + 30033: 'hev1.1.6.L120.90', // HEVC 480P + 30011: 'hev1.1.6.L120.90', // HEVC 360P + 30016: 'avc1.64001E', // 360P + 30006: 'avc1.64001E', // 240P + 30005: 'avc1.64001E', // 144P + 30280: 'mp4a.40.2', // 高码音频 + 30232: 'mp4a.40.2', // 中码音频 + 30216: 'mp4a.40.2', // 低码音频 + 'nb2-1-30016': 'avc1.64001E', // APP源 360P + 'nb2-1-30032': 'avc1.64001F', // APP源 480P + 'nb2-1-30064': 'avc1.640028', // APP源 720P + 'nb2-1-30080': 'avc1.640032', // APP源 1080P + 'nb2-1-30216': 'mp4a.40.2', // APP源 低码音频 + 'nb2-1-30232': 'mp4a.40.2', // APP源 中码音频 'nb2-1-30280': 'mp4a.40.2' // APP源 高码音频 }; const resolutionMap = { - 30120: [3840, 2160], - 30121: [3840, 2160], - 30112: [1920, 1080], - 30102: [1920, 1080], - 30080: [1920, 1080], - 30077: [1920, 1080], - 30064: [1280, 720], - 30066: [1280, 720], - 30032: [852, 480], - 30033: [852, 480], - 30011: [640, 360], - 30016: [640, 360], - 30006: [426, 240], - 30005: [256, 144], + 30120: [3840, 2160], // 4K + 30121: [3840, 2160], // HEVC 4K + 30112: [1920, 1080], // 1080P+ + 30102: [1920, 1080], // HEVC 1080P+ + 30080: [1920, 1080], // 1080P + 30077: [1920, 1080], // HEVC 1080P + 30064: [1280, 720], // 720P + 30066: [1280, 720], // HEVC 720P + 30032: [852, 480], // 480P + 30033: [852, 480], // HEVC 480P + 30011: [640, 360], // HEVC 360P + 30016: [640, 360], // 360P + 30006: [426, 240], // 240P + 30005: [256, 144], // 144P }; const frameRateMap = { 30120: '16000/672', @@ -1119,547 +1403,71 @@ function scriptSource(invokeBy) { 'minBufferTime': 0.0, 'min_buffer_time': 0.0, 'audio': [] - }; - // 填充音频流数据 - origin.data.video_info.dash_audio.forEach((audio) => { - audio.backupUrl = audio.backup_url; - audio.backup_url = audio.backup_url; - audio.base_url = audio.base_url.includes(':8000') ? audio.backup_url[0] : audio.base_url; - audio.baseUrl = audio.base_url; - dash.audio.push(audio); - }); - // 填充视频流数据 - let accept_quality = []; - let accept_description = []; - let support_formats = []; - let dash_video = []; - origin.data.video_info.stream_list.forEach((stream) => { - support_formats.push(stream.stream_info); - accept_quality.push(stream.stream_info.quality); - accept_description.push(stream.stream_info.new_description); - // 只加入有视频链接的数据 - if (stream.dash_video && stream.dash_video.base_url) { - stream.dash_video.backupUrl = stream.dash_video.backup_url; - stream.dash_video.backup_url = stream.dash_video.backup_url; - stream.dash_video.base_url = stream.dash_video.base_url.includes(':8000') ? stream.dash_video.backup_url[0] : stream.dash_video.base_url; - stream.dash_video.baseUrl = stream.dash_video.base_url; - stream.dash_video.id = stream.stream_info.quality; - dash_video.push(stream.dash_video); - } - }); - dash['video'] = dash_video; - result['accept_quality'] = accept_quality; - result['accept_description'] = accept_description; - result['support_formats'] = support_formats; - result['dash'] = dash; - // 下面参数取自安达(ep359333),总之一股脑塞进去( - result['fnval'] = 80; - result['fnver'] = 0; - result['status'] = 2; - result['vip_status'] = 1; - result['vip_type'] = 2; - result['seek_param'] = 'start'; - result['seek_type'] = 'offset'; - result['bp'] = 0; - result['from'] = 'local'; - result['has_paid'] = false; - result['is_preview'] = 0; - return fixMobiPlayUrlJson(result); - }); - } - var BiliPlusApi; - (function (BiliPlusApi) { - BiliPlusApi.view = function (aid, update = true) { - return Async.ajax(`${balh_config.server}/api/view?id=${aid}&update=${update}${access_key_param_if_exist()}`); - }; - BiliPlusApi.season = function (season_id) { - return Async.ajax(`${balh_config.server}/api/bangumi?season=${season_id}${access_key_param_if_exist()}`); - }; - // https://www.biliplus.com/BPplayurl.php?otype=json&cid=30188339&module=bangumi&qn=16&src=vupload&vid=vupload_30188339 - // qn = 16, 能看 - BiliPlusApi.playurl = function (cid, qn = 16, bangumi = true) { - return Async.ajax(`${balh_config.server}/BPplayurl.php?otype=json&cid=${cid}${bangumi ? '&module=bangumi' : ''}&qn=${qn}&src=vupload&vid=vupload_${cid}${access_key_param_if_exist()}`); - }; - // https://www.biliplus.com/api/h5play.php?tid=33&cid=31166258&type=vupload&vid=vupload_31166258&bangumi=1 - BiliPlusApi.playurl_for_mp4 = (cid, bangumi = true) => Async.ajax(`${balh_config.server}/api/h5play.php?tid=33&cid=${cid}&type=vupload&vid=vupload_${cid}&bangumi=${bangumi ? 1 : 0}${access_key_param_if_exist()}`) - .then(text => (text.match(/srcUrl=\{"mp4":"(https?.*)"\};/) || ['', ''])[1]); // 提取mp4的url - })(BiliPlusApi || (BiliPlusApi = {})); - - const access_key_param_if_exist = function (isKghost = false) { - // access_key是由B站验证的, B站帐号和BP帐号不同时, access_key无效 - // kghost的服务器使用的B站帐号, access_key有效 - return (localStorage.access_key && (!balh_config.blocked_vip || isKghost)) ? `&access_key=${localStorage.access_key}` : ''; - }; - const platform_android_param_if_app_only = function () { - return window.__balh_app_only__ ? '&platform=android&fnval=0' : ''; - }; - class BiliBiliApi { - constructor(server = '//api.bilibili.com') { - this.server = server; - } - getSeasonInfoByEpId(ep_id) { - return Async.ajax(`${this.server}/pgc/view/web/season?ep_id=${ep_id}`); - } - getSeasonInfo(season_id) { - return Async.ajax(`${this.server}/pgc/view/web/season?season_id=${season_id}`); - } - getSeasonInfoByEpSsIdOnBangumi(ep_id, season_id) { - return Async.ajax('//bangumi.bilibili.com/view/web_api/season?' + (ep_id != '' ? `ep_id=${ep_id}` : `season_id=${season_id}`)); - } - getSeasonInfoByEpSsIdOnThailand(ep_id, season_id) { - const params = '?' + (ep_id != '' ? `ep_id=${ep_id}` : `season_id=${season_id}`) + `&mobi_app=bstar_a&s_locale=zh_SG`; - const newParams = generateMobiPlayUrlParams(params, 'th'); - return Async.ajax(`${this.server}/intl/gateway/v2/ogv/view/app/season?` + newParams); - } - } - - var ui; - (function (ui) { - ui.alert = function (message, resolve, reject) { - setTimeout(() => { - if (resolve) { - if (window.confirm(message)) { - resolve(); - } - else { - if (reject) { - reject(); - } - } - } - else { - window.alert(message); - } - }, 500); - }; - function prompt(message, defaultValue) { - return __awaiter(this, void 0, void 0, function* () { - yield Async.timeout(500); - return window.prompt(message, defaultValue); - }); - } - ui.prompt = prompt; - ui.copy = function (text, textarea) { - textarea.value = text; - textarea.select(); - try { - return document.execCommand('copy'); - } - catch (e) { - util_error('复制文本出错', e); - } - return false; - }; - /** - * - param.content: 内容元素数组/HTML - * - param.showConfirm: 是否显示确定按钮 - * - param.confirmBtn: 确定按钮的文字 - * - param.onConfirm: 确定回调 - * - param.onClose: 关闭回调 - */ - ui.pop = function (param) { - var _a; - if (typeof param.content === 'string') { - let template = createElement('template'); - template.innerHTML = param.content.trim(); - param.content = Array.from(template.content.childNodes); - } - else if (!(param.content instanceof Array)) { - util_log(`param.content(${param.content}) 不是数组`); - return; - } - if (document.getElementById('AHP_Notice_style') == null) { - let noticeWidth = Math.min(500, innerWidth - 40); - document.head.appendChild(createElement('style', { id: 'AHP_Notice_style' }, [createElement('text', `#AHP_Notice{ line-height:normal;position:fixed;left:0;right:0;top:0;height:0;z-index:20000;transition:.5s;cursor:default;pointer-events:none } .AHP_down_banner{ margin:2px;padding:2px;color:#FFFFFF;font-size:13px;font-weight:bold;background-color:green } .AHP_down_btn{ margin:2px;padding:4px;color:#1E90FF;font-size:14px;font-weight:bold;border:#1E90FF 2px solid;display:inline-block;border-radius:5px } body.ABP-FullScreen{ overflow:hidden } @keyframes pop-iframe-in{0%{opacity:0;transform:scale(.7);}100%{opacity:1;transform:scale(1)}} @keyframes pop-iframe-out{0%{opacity:1;transform:scale(1);}100%{opacity:0;transform:scale(.7)}} #AHP_Notice>div{ position:absolute;bottom:0;left:0;right:0;font-size:15px } #AHP_Notice>div>div{ border:1px #AAA solid;width:${noticeWidth}px;margin:0 auto;padding:20px 10px 5px;background:#EFEFF4;color:#000;border-radius:5px;box-shadow:0 0 5px -2px;pointer-events:auto;white-space:pre-wrap } #AHP_Notice>div>div *{ margin:5px 0; } #AHP_Notice input[type=text]{ border: none;border-bottom: 1px solid #AAA;width: 60%;background: transparent } #AHP_Notice input[type=text]:active{ border-bottom-color:#4285f4 } #AHP_Notice input[type=button] { border-radius: 2px; border: #adadad 1px solid; padding: 3px; margin: 0 5px; min-width:50px } #AHP_Notice input[type=button]:hover { background: #FFF; } #AHP_Notice input[type=button]:active { background: #CCC; } .noflash-alert{display:none}`)])); - } - (_a = document.querySelector('#AHP_Notice')) === null || _a === void 0 ? void 0 : _a.remove(); - let div = createElement('div', { id: 'AHP_Notice' }); - let children = []; - if (param.showConfirm || param.confirmBtn || param.onConfirm) { - children.push(createElement('input', { value: param.confirmBtn || _t('ok'), type: 'button', className: 'confirm', event: { click: param.onConfirm } })); - } - children.push(createElement('input', { - value: _t('close'), type: 'button', className: 'close', event: { - click: function () { - param.onClose && param.onClose(); - div.style.height = '0'; - setTimeout(function () { div.remove(); }, 500); - } - } - })); - div.appendChild(createElement('div', {}, [createElement('div', {}, param.content.concat([createElement('hr'), createElement('div', { style: { textAlign: 'right' } }, children)]))])); - document.body.appendChild(div); - div.style.height = div.firstChild.offsetHeight + 'px'; - }; - ui.playerMsg = function (message) { - const msg = Objects.stringify(message); - util_info('player msg:', msg); - const $panel = document.querySelector('.bilibili-player-video-panel-text'); - if ($panel) { - let stage = $panel.children.length + 1000; // 加1000和B站自己发送消息的stage区别开来 - $panel.appendChild(createElement('div', { className: 'bilibili-player-video-panel-row', stage: stage }, [createElement('text', `[${GM_info.script.name}] ${msg}`)])); - } - }; - ui.popFrame = function (iframeSrc) { - if (!document.getElementById('balh-style-login')) { - var style = document.createElement('style'); - style.id = 'balh-style-login'; - document.head.appendChild(style).innerHTML = '@keyframes pop-iframe-in{0%{opacity:0;transform:scale(.7);}100%{opacity:1;transform:scale(1)}}@keyframes pop-iframe-out{0%{opacity:1;transform:scale(1);}100%{opacity:0;transform:scale(.7)}}.GMBiliPlusCloseBox{position:absolute;top:5%;right:8%;font-size:40px;color:#FFF}'; - } - var div = document.createElement('div'); - div.id = 'GMBiliPlusLoginContainer'; - div.innerHTML = '
×
'; - div.firstChild.addEventListener('click', function (e) { - if (e.target === this || e.target.className === 'GMBiliPlusCloseBox') { - if (!confirm('确认关闭?')) { - return false; - } - div.firstChild.style.animationName = 'pop-iframe-out'; - setTimeout(function () { - div.remove(); - }, 5e2); - } - }); - document.body.appendChild(div); - }; - })(ui || (ui = {})); - - const RUN_AT = { - // readyState = loading - LOADING: -1, - // readyState = interactive - DOM_LOADED: 0, - // readyState = interactive - DOM_LOADED_AFTER: 1, - // readyState = complete - COMPLETE: 2, - }; - const PRIORITY = { - FIRST: 1e6, - HIGH: 1e5, - BEFORE: 1e3, - DEFAULT: 0, - AFTER: -1e3, - LOW: -1e5, - LAST: -1e6, - }; - const callbacks = { - [RUN_AT.LOADING]: [], - [RUN_AT.DOM_LOADED]: [], - [RUN_AT.DOM_LOADED_AFTER]: [], - [RUN_AT.COMPLETE]: [], - }; - function showWarn() { - util_warn(`${GM_info.script.name} ${window.document.readyState} 加载时机不太对, 不能保证正常工作\n\n1. 尝试刷新页面, 重载脚本\n2. 若依然出现该提示, 请尝试'硬性重新加载'(快捷键一般为ctrl+f5)\n3. 若还是出现该提示, 请尝试关闭再重新打开该页面\n4. 若反复出现该提示, 那也没其他办法了_(:3」∠)_\n`); - } - let atRun; // 用来表示当前运行到什么状态 - switch (window.document.readyState) { - case 'loading': - atRun = RUN_AT.LOADING; - break; - case 'interactive': - showWarn(); - atRun = RUN_AT.DOM_LOADED_AFTER; - break; - case 'complete': - showWarn(); - atRun = RUN_AT.COMPLETE; - break; - } - util_debug(`atRun: ${atRun}, ${window.document.readyState}`); - const util_page_valid = () => true; // 是否要运行 - const dclCreator = function (runAt) { - let dcl = function () { - util_debug(`atRun: ${runAt}, ${window.document.readyState}`); - atRun = runAt; // 更新运行状态 - const valid = util_page_valid(); - // 优先级从大到小, index从小到大, 排序 - callbacks[runAt].sort((a, b) => b.priority - a.priority || a.index - b.index) - .filter(item => valid ) - .forEach(item => item.func(valid)); - }; - return dcl; - }; - window.document.addEventListener('DOMContentLoaded', dclCreator(RUN_AT.DOM_LOADED)); - window.addEventListener('DOMContentLoaded', dclCreator(RUN_AT.DOM_LOADED_AFTER)); - window.addEventListener('load', dclCreator(RUN_AT.COMPLETE)); - const util_init = function (func, priority = PRIORITY.DEFAULT, runAt = RUN_AT.DOM_LOADED, always = false) { - func = Func.runCatching(func); - if (atRun < runAt) { // 若还没运行到runAt指定的状态, 则放到队列里去 - callbacks[runAt].push({ - priority, - index: callbacks[runAt].length, - func, - always - }); - } - else { // 否则直接运行, TODO: 这种情况下优先级得不到保证... - let valid = util_page_valid(); - { - func(valid); - } - } - }; - util_init.RUN_AT = RUN_AT; - util_init.PRIORITY = PRIORITY; - - // @ts-check-off - /** - * 通知模块 剽窃自 YAWF 用户脚本 硬广:https://tiansh.github.io/yawf/ - * - * 由于目前基本上没用上, 故懒得标注类型(-_-#) - * */ - - var available = {}; - var shown = []; - var use = { - 'hasPermission': function () { return null; }, - 'requestPermission': function (callback) { return null; }, - 'hideNotification': function (notify) { return null; }, - 'showNotification': function (id, title, body, icon, delay, onclick) { return null; } - }; - - // webkitNotifications - // Tab Notifier 扩展实现此接口,但显示的桌面提示最多只能显示前两行 - if (typeof webkitNotifications !== 'undefined') available.webkit = { - 'hasPermission': function () { - return [true, null, false][webkitNotifications.checkPermission()]; - }, - 'requestPermission': function (callback) { - return webkitNotifications.requestPermission(callback); - }, - 'hideNotification': function (notify) { - notify.cancel(); - afterHideNotification(notify); - }, - 'showNotification': function (id, title, body, icon, delay, onclick) { - var notify = webkitNotifications.createNotification(icon, title, body); - if (delay && delay > 0) notify.addEventListener('display', function () { - setTimeout(function () { hideNotification(notify); }, delay); - }); - if (onclick) notify.addEventListener('click', function () { - onclick.apply(this, arguments); - hideNotification(notify); - }); - notify.show(); - return notify; - }, - }; - - // Notification - // Firefox 22+ - // 显示4秒会自动关闭 https://bugzil.la/875114 - if (typeof Notification !== 'undefined') available.standard = { - 'hasPermission': function () { - return { - 'granted': true, - 'denied': false, - 'default': null, - }[Notification.permission]; - }, - 'requestPermission': function (callback) { - return Notification.requestPermission(callback); - }, - 'hideNotification': function (notify) { - notify.close(); - afterHideNotification(notify); - }, - 'showNotification': function (id, title, body, icon, delay, onclick) { - var notify = new Notification(title, { 'body': body, 'icon': icon, 'requireInteraction': !delay }); - if (delay && delay > 0) notify.addEventListener('show', function () { - setTimeout(function () { - hideNotification(notify); - }, delay); - }); - if (onclick) notify.addEventListener('click', function () { - onclick.apply(this, arguments); - hideNotification(notify); - }); - return notify; - }, - }; - // 选择用哪个接口 - var choseNotification = function (prefer) { - return (use = prefer && available[prefer] || available.standard); - }; - choseNotification(); - // 隐藏已经显示的消息 - var hideNotification = function (notify) { - use.hideNotification.apply(this, arguments); - return notify; - }; - var afterHideNotification = function (notify) { - shown = shown.filter(function (x) { return x !== notify; }); - }; - - document.addEventListener('unload', function () { - shown.forEach(hideNotification); - shown = []; - }); - - // @ts-check-off - /** - * {@link BiliMessageBox} - * MessageBox -> from base.core.js - * MessageBox.show(referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) - * MessageBox.close() - */ - let popMessage = null; - let alertPopMessage = { - show: function (referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) { - ui.alert(message, buttonTypeConfirmCallback); - }, - close: Func.noop - }; - util_init(() => { - if (!popMessage && window.MessageBox) { - popMessage = new window.MessageBox(); - let orignShow = popMessage.show; - popMessage.show = function (referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) { - // 这个窗,有一定机率弹不出来。。。不知道为什么 - orignShow.call(this, referenceElement, message.replace('\n', '
'), closeTime, boxType, buttonTypeConfirmCallback); - }; - popMessage.close = function () { - // 若没调用过show, 就调用close, msgbox会为null, 导致报错 - this.msgbox != null && window.MessageBox.prototype.close.apply(this, []); - }; - } - }, util_init.PRIORITY.FIRST, util_init.RUN_AT.DOM_LOADED_AFTER); - const util_ui_msg = { - _impl: function () { - return popMessage || alertPopMessage; - }, - show: function (referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) { - let pop = this._impl(); - return pop.show.apply(pop, arguments); - }, - close: function () { - let pop = this._impl(); - return pop.close.apply(pop, arguments); - }, - setMsgBoxFixed: function (fixed) { - if (popMessage) { - popMessage.msgbox[0].style.position = fixed ? 'fixed' : ''; - } - else { - util_log('MockMessageBox', 'setMsgBoxFixed', fixed); - } - }, - showOnNetError: function (e) { - if (e.readyState === 0) { - this.show(window.$('.balh_settings'), '哎呀,服务器连不上了,进入设置窗口,换个服务器试试?', 0, 'button', window.bangumi_area_limit_hack.showSettings); - } - }, - showOnNetErrorInPromise: function () { - return (p) => p - .catch((e) => { - this.showOnNetError(e); - return Promise.reject(e); - }); - } - }; - - var RegExps; - (function (RegExps) { - const _raw = (str) => str.replace(/(\.|\?)/g, '\\$1'); - RegExps.url = (url) => new RegExp(`^(https?:)?//${_raw(url)}`); - RegExps.urlPath = (path) => new RegExp(`^(https?:)?//[\\w\\-\\.]+${_raw(path)}`); - })(RegExps || (RegExps = {})); - - function switch_to_old_player() { - if (util_page.av() && !localStorage.balh_disable_switch_to_old_player) { - util_init(() => { - const $switchToOldBtn = document.querySelector('#entryOld > .old-btn > a'); - if ($switchToOldBtn) { - ui.pop({ - content: `${GM_info.script.name} 对新版播放器的支持还在测试阶段, 不稳定, 推荐切换回旧版`, - confirmBtn: '切换回旧版', - onConfirm: () => $switchToOldBtn.click(), - onClose: () => localStorage.balh_disable_switch_to_old_player = r.const.TRUE, - }); - } - }); - } - if (util_page.new_bangumi()) { - if (cookieStorage.stardustpgcv === '0606') { - util_init(() => { - let $panel = document.querySelector('.error-container > .server-error'); - if ($panel) { - $panel.insertBefore(createElement('text', '临时切换到旧版番剧页面中...'), $panel.firstChild); - cookieStorage.stardustpgcv = '0'; - localStorage.balh_temp_switch_to_old_page = r.const.TRUE; - location.reload(); - } - }); - } - if (localStorage.balh_temp_switch_to_old_page) { - cookieStorage.stardustpgcv = '0606'; - delete localStorage.balh_temp_switch_to_old_page; - } - } - } - - function version_remind() { - if (!util_page.new_bangumi()) - return; - util_init(() => { - if ((localStorage.balh_version || '0') < GM_info.script.version) { - localStorage.balh_version = GM_info.script.version; - let version_remind = _t('version_remind'); - if (version_remind) { - ui.pop({ content: `

${GM_info.script.name} v${GM_info.script.version} 更新日志

${version_remind}` }); - } - } - }); - } - - function isHtml5Player() { - return localStorage.defaulth5 === '1'; - } - function check_html5() { - function checkHtml5() { - var playerContent = document.querySelector('.player-content'); - if (!localStorage.balh_h5_not_first && !isHtml5Player() && window.GrayManager && playerContent) { - new MutationObserver(function (mutations, observer) { - var _a; - observer.disconnect(); - localStorage.balh_h5_not_first = r.const.TRUE; - if (window.confirm(GM_info.script.name + '只在HTML5播放器下有效,是否切换到HTML5?')) { - (_a = window.GrayManager) === null || _a === void 0 ? void 0 : _a.clickMenu('change_h5'); // change_flash, change_h5 - } - }).observe(playerContent, { - childList: true, - attributes: false, - }); - } - } - util_init(() => { - // 除了播放器和番剧列表页面, 其他页面都需要检测html5 - if (!(util_page.bangumi() || util_page.bangumi_md() || util_page.player())) { - checkHtml5(); - } - }); - } - - function jump_to_baipiao() { - util_init(() => { - for (let bp of r.baipiao) { - const cookie_key = `balh_baipao_${bp.key}`; - if (bp.match() && !cookieStorage[cookie_key]) { - ui.pop({ - content: [ - createElement('text', '发现白嫖地址: '), createElement('a', { href: bp.link }, bp.link), - createElement('div', {}, bp.message), - ], - confirmBtn: '一键跳转', - onConfirm: () => { location.href = bp.link; }, - onClose: () => { cookieStorage.set(cookie_key, r.const.TRUE, ''); } - }); - break; + }; + // 填充音频流数据 + origin.data.video_info.dash_audio.forEach((audio) => { + audio.backupUrl = audio.backup_url; + audio.backup_url = audio.backup_url; + audio.base_url = audio.base_url.includes(':8000') ? audio.backup_url[0] : audio.base_url; + audio.baseUrl = audio.base_url; + dash.audio.push(audio); + }); + // 填充视频流数据 + let accept_quality = []; + let accept_description = []; + let support_formats = []; + let dash_video = []; + origin.data.video_info.stream_list.forEach((stream) => { + support_formats.push(stream.stream_info); + accept_quality.push(stream.stream_info.quality); + accept_description.push(stream.stream_info.new_description); + // 只加入有视频链接的数据 + if (stream.dash_video && stream.dash_video.base_url) { + stream.dash_video.backupUrl = stream.dash_video.backup_url; + stream.dash_video.backup_url = stream.dash_video.backup_url; + stream.dash_video.base_url = stream.dash_video.base_url.includes(':8000') ? stream.dash_video.backup_url[0] : stream.dash_video.base_url; + stream.dash_video.baseUrl = stream.dash_video.base_url; + stream.dash_video.id = stream.stream_info.quality; + dash_video.push(stream.dash_video); } - } - }, util_init.PRIORITY.DEFAULT, util_init.RUN_AT.DOM_LOADED_AFTER); + }); + dash['video'] = dash_video; + result['accept_quality'] = accept_quality; + result['accept_description'] = accept_description; + result['support_formats'] = support_formats; + result['dash'] = dash; + // 下面参数取自安达(ep359333),总之一股脑塞进去( + result['fnval'] = 80; + result['fnver'] = 0; + result['status'] = 2; + result['vip_status'] = 1; + result['vip_type'] = 2; + result['seek_param'] = 'start'; + result['seek_type'] = 'offset'; + result['bp'] = 0; + result['from'] = 'local'; + result['has_paid'] = false; + result['is_preview'] = 0; + return fixMobiPlayUrlJson(result); + }); } + var BiliPlusApi; + (function (BiliPlusApi) { + BiliPlusApi.view = function (aid, update = true) { + return Async.ajax(`${balh_config.server}/api/view?id=${aid}&update=${update}${access_key_param_if_exist()}`); + }; + BiliPlusApi.season = function (season_id) { + return Async.ajax(`${balh_config.server}/api/bangumi?season=${season_id}${access_key_param_if_exist()}`); + }; + // https://www.biliplus.com/BPplayurl.php?otype=json&cid=30188339&module=bangumi&qn=16&src=vupload&vid=vupload_30188339 + // qn = 16, 能看 + BiliPlusApi.playurl = function (cid, qn = 16, bangumi = true) { + return Async.ajax(`${balh_config.server}/BPplayurl.php?otype=json&cid=${cid}${bangumi ? '&module=bangumi' : ''}&qn=${qn}&src=vupload&vid=vupload_${cid}${access_key_param_if_exist()}`); + }; + // https://www.biliplus.com/api/h5play.php?tid=33&cid=31166258&type=vupload&vid=vupload_31166258&bangumi=1 + BiliPlusApi.playurl_for_mp4 = (cid, bangumi = true) => Async.ajax(`${balh_config.server}/api/h5play.php?tid=33&cid=${cid}&type=vupload&vid=vupload_${cid}&bangumi=${bangumi ? 1 : 0}${access_key_param_if_exist()}`) + .then(text => (text.match(/srcUrl=\{"mp4":"(https?.*)"\};/) || ['', ''])[1]); // 提取mp4的url + })(BiliPlusApi || (BiliPlusApi = {})); function biliplus_check_area_limit() { if (!util_page.bangumi_md()) { @@ -1964,7 +1772,44 @@ function scriptSource(invokeBy) { }, util_init.PRIORITY.DEFAULT, util_init.RUN_AT.COMPLETE); } - var pageTemplate = "\n\n\n\n \n \n \n \n \n \n \n \n \n 【A站独播】___htmlTitle___ AcFun弹幕视频网 - 认真你就输啦 (?ω?)ノ- ( ゜- ゜)つロ\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n \n
\n \n

銀魂(僅限港澳台地區):01-02

点赞
--
分享
用手机观看
评论

选集

1/220
    部分集数受地区限制不予展示
    相关推荐
    \n \n \n \n \n\n\n"; + class BiliBiliApi { + constructor(server = '//api.bilibili.com') { + this.server = server; + } + getSeasonInfoByEpId(ep_id) { + return Async.ajax(`${this.server}/pgc/view/web/season?ep_id=${ep_id}`); + } + getSeasonInfo(season_id) { + return Async.ajax(`${this.server}/pgc/view/web/season?season_id=${season_id}`); + } + getSeasonInfoById(season_id, ep_id) { + let paramDict = { + access_key: localStorage.access_key, + appkey: '27eb53fc9058f8c3', + season_id: '', + ep_id: '' + }; + if (ep_id) + paramDict.ep_id = ep_id; + else if (season_id) + paramDict.season_id = season_id; + const { sign, params } = Converters.generateSign(paramDict, 'c2ed53a74eeefe3cf99fbd01d8c9c375'); + return Async.ajax('//api.bilibili.com/pgc/view/v2/app/season?' + params + '&sign=' + sign); + } + getSeasonSectionBySsId(season_id) { + return Async.ajax('//api.bilibili.com/pgc/web/season/section?' + `season_id=${season_id}`); + } + getEpisodeInfoByEpId(ep_id) { + return Async.ajax('//api.bilibili.com/pgc/season/episode/web/info?' + `ep_id=${ep_id}`); + } + getSeasonInfoByEpSsIdOnThailand(ep_id, season_id) { + const params = '?' + (ep_id != '' ? `ep_id=${ep_id}` : `season_id=${season_id}`) + `&mobi_app=bstar_a&s_locale=zh_SG`; + const newParams = generateMobiPlayUrlParams(params, 'th'); + return Async.ajax(`${this.server}/intl/gateway/v2/ogv/view/app/season?` + newParams); + } + } + + var pageTemplate = "\n\n\n\n \n \n \n \n \n \n \n \n \n 【A站独播】___htmlTitle___ AcFun弹幕视频网 - 认真你就输啦 (?ω?)ノ- ( ゜- ゜)つロ\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n \n \n
    \n \n

    銀魂(僅限港澳台地區):01-02

    点赞
    --
    分享
    用手机观看
    评论

    选集

    1/220
      部分集数受地区限制不予展示
      相关推荐
      \n \n \n \n \n\n\n"; function modifyGlobalValue(name, options) { const _window = window; @@ -2085,41 +1930,79 @@ function scriptSource(invokeBy) { let appOnly = (_e = (_d = (_c = invalidInitialState === null || invalidInitialState === void 0 ? void 0 : invalidInitialState.mediaInfo) === null || _c === void 0 ? void 0 : _c.rights) === null || _d === void 0 ? void 0 : _d.appOnly) !== null && _e !== void 0 ? _e : false; try { // 读取保存的season_id - const season_id = (window.location.pathname.match(/\/bangumi\/play\/ss(\d+)/) || ['', cookieStorage.get('balh_curr_season_id')])[1]; + let season_id = (window.location.pathname.match(/\/bangumi\/play\/ss(\d+)/) || ['', cookieStorage.get('balh_curr_season_id')])[1]; const ep_id = (window.location.pathname.match(/\/bangumi\/play\/ep(\d+)/) || ['', ''])[1]; const bilibiliApi = new BiliBiliApi(balh_config.server_bilibili_api_proxy); let templateArgs = null; // 不限制地区的接口,可以查询泰区番剧,该方法前置给代理服务器和BP节省点请求 // 如果该接口失效,自动尝试后面的方法 try { - let result = yield bilibiliApi.getSeasonInfoByEpSsIdOnBangumi(ep_id, season_id); - if (balh_config.server_custom_th && (result.code == -404 || result.result.up_info.mid == 677043260 /* 主站残留泰区数据,部分不完整 */)) { + let result = yield bilibiliApi.getSeasonInfoById(season_id, ep_id); + if (balh_config.server_custom_th && (result.code == -404)) { result = yield fixThailandSeason(ep_id, season_id); appOnly = true; } - if (result.code) { + if (result.code != 0) { throw result; } + if (ep_id != '') + season_id = result.data.season_id.toString(); + result.result = result.data; + result.result.modules.forEach((module, mid) => { + if (module.data) { + let sid = module.id ? module.id : mid + 1; + module.data['id'] = sid; + } + }); + let seasons = []; + result.result.modules.forEach((module) => { + module.data.seasons.forEach(season => { + seasons.push(season); + }); + }); + result.result['seasons'] = seasons; + let section = yield bilibiliApi.getSeasonSectionBySsId(season_id); + result.result['episodes'] = section.result.main_section.episodes; + result.result['section'] = section.result.section; + result.result['positive'] = { id: section.result.main_section.id, title: section.result.main_section.title }; + let episodeInfo = yield bilibiliApi.getEpisodeInfoByEpId(result.result.episodes[0].id); + result.result['up_info'] = episodeInfo.data.related_up[0]; + result.result.episodes.forEach((ep) => { + ep['bvid'] = Converters.aid2bv(ep.aid); + ep['ep_id'] = ep.id; + ep['link'] = `https://www.bilibili.com/bangumi/play/ep${ep.id}`; + ep['rights'] = { allow_download: 1, area_limit: 0, allow_dm: 1 }; + ep['short_link'] = `https://b23.tv/ep${ep.id}`; + }); + result.result.section.forEach(section => { + section.episodes.forEach((ep) => { + ep['bvid'] = Converters.aid2bv(ep.aid); + ep['ep_id'] = ep.id; + ep['link'] = `https://www.bilibili.com/bangumi/play/ep${ep.id}`; + ep['rights'] = { allow_download: 1, area_limit: 0, allow_dm: 1 }; + ep['short_link'] = `https://b23.tv/ep${ep.id}`; + }); + }); const ep = ep_id != '' ? result.result.episodes.find(ep => ep.ep_id === +ep_id) : result.result.episodes[0]; if (!ep) { throw `通过bangumi接口未找到${ep_id}对应的视频信息`; } const eps = JSON.stringify(result.result.episodes.map((item, index) => { // 返回的数据是有序的,不需要另外排序 - if (/^\d+(\.\d+)?$/.exec(item.index)) { - item.titleFormat = "第" + item.index + "话 " + item.index_title; + if (/^\d+(\.\d+)?$/.exec(item.title)) { + item.titleFormat = "第" + item.title + "话 " + item.long_title; } else { - item.titleFormat = item.index; - item.index_title = item.index; + item.titleFormat = item.long_title; } + item.index_title = item.long_title; item.loaded = true; - item.epStatus = item.episode_status; + item.epStatus = item.status; item.sectionType = 0; item.id = +item.ep_id; item.i = index; item.link = 'https://www.bilibili.com/bangumi/play/ep' + item.ep_id; - item.title = item.index; + item.title = item.titleFormat; return item; })); let titleForma; @@ -2556,7 +2439,165 @@ function scriptSource(invokeBy) { isLoginBiliBili, }; - var css$1 = "#balh-settings {\n font-size: 12px;\n color: #6d757a; }\n #balh-settings h1 {\n color: #161a1e; }\n #balh-settings a {\n color: #00a1d6; }\n #balh-settings a:hover {\n color: #f25d8e; }\n #balh-settings input {\n margin-left: 3px;\n margin-right: 3px; }\n #balh-settings label {\n width: 100%;\n display: inline-block;\n cursor: pointer; }\n #balh-settings label:after {\n content: \"\";\n width: 0;\n height: 1px;\n background: #4285f4;\n transition: width .3s;\n display: block; }\n #balh-settings label:hover:after {\n width: 100%; }\n #balh-settings form {\n margin: 0; }\n #balh-settings input[type=\"radio\"] {\n appearance: radio; }\n #balh-settings input[type=\"checkbox\"] {\n appearance: checkbox; }\n\n@keyframes balh-settings-bg {\n from {\n background: rgba(0, 0, 0, 0); }\n to {\n background: rgba(0, 0, 0, 0.7); } }\n"; + // @ts-nocheck + /** + * 通知模块 剽窃自 YAWF 用户脚本 硬广:https://tiansh.github.io/yawf/ + * + * 由于目前基本上没用上, 故懒得标注类型(-_-#) + * */ + var available = {}; + var shown = []; + var use = { + 'hasPermission': function () { return null; }, + 'requestPermission': function (callback) { return null; }, + 'hideNotification': function (notify) { return null; }, + 'showNotification': function (id, title, body, icon, delay, onclick) { return null; } + }; + // webkitNotifications + // Tab Notifier 扩展实现此接口,但显示的桌面提示最多只能显示前两行 + if (typeof webkitNotifications !== 'undefined') + available.webkit = { + 'hasPermission': function () { + return [true, null, false][webkitNotifications.checkPermission()]; + }, + 'requestPermission': function (callback) { + return webkitNotifications.requestPermission(callback); + }, + 'hideNotification': function (notify) { + notify.cancel(); + afterHideNotification(notify); + }, + 'showNotification': function (id, title, body, icon, delay, onclick) { + var notify = webkitNotifications.createNotification(icon, title, body); + if (delay && delay > 0) + notify.addEventListener('display', function () { + setTimeout(function () { hideNotification(notify); }, delay); + }); + if (onclick) + notify.addEventListener('click', function () { + onclick.apply(this, arguments); + hideNotification(notify); + }); + notify.show(); + return notify; + }, + }; + // Notification + // Firefox 22+ + // 显示4秒会自动关闭 https://bugzil.la/875114 + if (typeof Notification !== 'undefined') + available.standard = { + 'hasPermission': function () { + return { + 'granted': true, + 'denied': false, + 'default': null, + }[Notification.permission]; + }, + 'requestPermission': function (callback) { + return Notification.requestPermission(callback); + }, + 'hideNotification': function (notify) { + notify.close(); + afterHideNotification(notify); + }, + 'showNotification': function (id, title, body, icon, delay, onclick) { + var notify = new Notification(title, { 'body': body, 'icon': icon, 'requireInteraction': !delay }); + if (delay && delay > 0) + notify.addEventListener('show', function () { + setTimeout(function () { + hideNotification(notify); + }, delay); + }); + if (onclick) + notify.addEventListener('click', function () { + onclick.apply(this, arguments); + hideNotification(notify); + }); + return notify; + }, + }; + // 选择用哪个接口 + var choseNotification = function (prefer) { + return (use = prefer && available[prefer] || available.standard); + }; + choseNotification(); + // 隐藏已经显示的消息 + var hideNotification = function (notify) { + use.hideNotification.apply(this, arguments); + return notify; + }; + var afterHideNotification = function (notify) { + shown = shown.filter(function (x) { return x !== notify; }); + }; + document.addEventListener('unload', function () { + shown.forEach(hideNotification); + shown = []; + }); + + // @ts-check-off + /** + * {@link BiliMessageBox} + * MessageBox -> from base.core.js + * MessageBox.show(referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) + * MessageBox.close() + */ + let popMessage = null; + let alertPopMessage = { + show: function (referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) { + ui.alert(message, buttonTypeConfirmCallback); + }, + close: Func.noop + }; + util_init(() => { + if (!popMessage && window.MessageBox) { + popMessage = new window.MessageBox(); + let orignShow = popMessage.show; + popMessage.show = function (referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) { + // 这个窗,有一定机率弹不出来。。。不知道为什么 + orignShow.call(this, referenceElement, message.replace('\n', '
      '), closeTime, boxType, buttonTypeConfirmCallback); + }; + popMessage.close = function () { + // 若没调用过show, 就调用close, msgbox会为null, 导致报错 + this.msgbox != null && window.MessageBox.prototype.close.apply(this, []); + }; + } + }, util_init.PRIORITY.FIRST, util_init.RUN_AT.DOM_LOADED_AFTER); + const util_ui_msg = { + _impl: function () { + return popMessage || alertPopMessage; + }, + show: function (referenceElement, message, closeTime, boxType, buttonTypeConfirmCallback) { + let pop = this._impl(); + return pop.show.apply(pop, arguments); + }, + close: function () { + let pop = this._impl(); + return pop.close.apply(pop, arguments); + }, + setMsgBoxFixed: function (fixed) { + if (popMessage) { + popMessage.msgbox[0].style.position = fixed ? 'fixed' : ''; + } + else { + util_log('MockMessageBox', 'setMsgBoxFixed', fixed); + } + }, + showOnNetError: function (e) { + if (e.readyState === 0) { + this.show(window.$('.balh_settings'), '哎呀,服务器连不上了,进入设置窗口,换个服务器试试?', 0, 'button', window.bangumi_area_limit_hack.showSettings); + } + }, + showOnNetErrorInPromise: function () { + return (p) => p + .catch((e) => { + this.showOnNetError(e); + return Promise.reject(e); + }); + } + }; + + var css$1 = "#balh-settings {\n font-size: 12px;\n color: #6d757a;\n}\n#balh-settings h1 {\n color: #161a1e;\n}\n#balh-settings a {\n color: #00a1d6;\n}\n#balh-settings a:hover {\n color: #f25d8e;\n}\n#balh-settings input {\n margin-left: 3px;\n margin-right: 3px;\n}\n#balh-settings label {\n width: 100%;\n display: inline-block;\n cursor: pointer;\n}\n#balh-settings label:after {\n content: \"\";\n width: 0;\n height: 1px;\n background: #4285f4;\n transition: width 0.3s;\n display: block;\n}\n#balh-settings label:hover:after {\n width: 100%;\n}\n#balh-settings form {\n margin: 0;\n}\n#balh-settings input[type=radio] {\n appearance: radio;\n}\n#balh-settings input[type=checkbox] {\n appearance: checkbox;\n}\n\n@keyframes balh-settings-bg {\n from {\n background: rgba(0, 0, 0, 0);\n }\n to {\n background: rgba(0, 0, 0, 0.7);\n }\n}"; const balh_feature_runPing = function () { const pingOutput = document.getElementById('balh_server_ping'); @@ -2594,7 +2635,7 @@ function scriptSource(invokeBy) { }; pingLoop(); }; - function settings() { + function settings$1() { function addSettingsButton() { let indexNav = document.querySelector('.bangumi-nav-right, #index_nav, #fixnav_report'); let settingBtnSvgContainer; @@ -2701,7 +2742,8 @@ function scriptSource(invokeBy) { } // 往顶层窗口发显示设置的请求 function showSettings() { - window.top.postMessage('balh-show-setting', '*'); + var _a; + (_a = window.top) === null || _a === void 0 ? void 0 : _a.postMessage('balh-show-setting', '*'); } // 只有顶层窗口才接收请求 if (window === window.top) { @@ -2801,8 +2843,7 @@ function scriptSource(invokeBy) { createElement('label', { style: { flex: 2 } }, [ createElement('input', { type: 'radio', name: 'balh_server_inner', value: r.const.server.CUSTOM }), createElement('text', `自定义(首选服务器)`), createElement('input', { - type: 'text', name: 'balh_server_custom', placeholder: '一定要填,形如:https://hd.pilipili.com', - event: { + type: 'text', name: 'balh_server_custom', placeholder: '一定要填,形如:https://hd.pilipili.com', event: { input: (event) => { onSettingsFormChange(event); customServerCheckText.innerText = r.regex.bilibili_api_proxy.test(event.target.value.trim()) ? '✔️' : '🔗️'; @@ -2811,15 +2852,13 @@ function scriptSource(invokeBy) { }), customServerCheckText = createElement('span'), ]), - ]), - createElement('br'), + ]), createElement('br'), createElement('text', '自定义服务器列表'), createElement('a', { href: 'javascript:;', title: '脚本会缓存当前视频是否属于港/澳/台/泰;修改代理服务器地址后, 建议手动清除下这个缓存。', event: { click: () => localStorage.removeItem('balh_bangumi_area_cache') } }, [createElement('text', '(清除缓存)')]), createElement('div', { style: { display: 'flex', 'flex-wrap': 'wrap' } }, [ createElement('label', { style: { flex: '1 1 50%' } }, [ createElement('text', `台湾: `), createElement('input', { - type: 'text', name: 'balh_server_custom_tw', placeholder: '形如:https://hd.pilipili.com', - event: { + type: 'text', name: 'balh_server_custom_tw', placeholder: '形如:https://hd.pilipili.com', event: { input: (event) => { onSettingsFormChange(event); customTWServerCheckText.innerText = r.regex.bilibili_api_proxy.test(event.target.value.trim()) ? '✔️' : '🔗️'; @@ -2831,8 +2870,7 @@ function scriptSource(invokeBy) { createElement('label', { style: { flex: '1 1 50%' } }, [ createElement('text', `香港: `), createElement('input', { - type: 'text', name: 'balh_server_custom_hk', placeholder: '形如:https://hd.pilipili.com', - event: { + type: 'text', name: 'balh_server_custom_hk', placeholder: '形如:https://hd.pilipili.com', event: { input: (event) => { onSettingsFormChange(event); customHKServerCheckText.innerText = r.regex.bilibili_api_proxy.test(event.target.value.trim()) ? '✔️' : '🔗️'; @@ -2844,8 +2882,7 @@ function scriptSource(invokeBy) { createElement('label', { style: { flex: '1 1 50%' } }, [ createElement('text', `大陆: `), createElement('input', { - type: 'text', name: 'balh_server_custom_cn', placeholder: '形如:https://hd.pilipili.com', - event: { + type: 'text', name: 'balh_server_custom_cn', placeholder: '形如:https://hd.pilipili.com', event: { input: (event) => { onSettingsFormChange(event); customCNServerCheckText.innerText = r.regex.bilibili_api_proxy.test(event.target.value.trim()) ? '✔️' : '🔗️'; @@ -2857,8 +2894,7 @@ function scriptSource(invokeBy) { createElement('label', { style: { flex: '1 1 50%' } }, [ createElement('text', `泰国/东南亚: `), createElement('input', { - type: 'text', name: 'balh_server_custom_th', placeholder: '形如:https://hd.pilipili.com', - event: { + type: 'text', name: 'balh_server_custom_th', placeholder: '形如:https://hd.pilipili.com', event: { input: (event) => { onSettingsFormChange(event); customTHServerCheckText.innerText = r.regex.bilibili_api_proxy.test(event.target.value.trim()) ? '✔️' : '🔗️'; @@ -2867,8 +2903,7 @@ function scriptSource(invokeBy) { }), customTHServerCheckText = createElement('span'), ]) - ]), - createElement('br'), + ]), createElement('br'), createElement('div', { id: 'balh_server_ping', style: { whiteSpace: 'pre-wrap', overflow: 'auto' } }, []), createElement('div', { style: { display: '' } }, [ createElement('text', 'upos服务器:'), createElement('br'), @@ -2914,6 +2949,7 @@ function scriptSource(invokeBy) { createElement('label', { style: { flex: 1 } }, [createElement('input', { type: 'checkbox', name: 'balh_enable_in_av' }), createElement('text', '在AV页面启用'), createElement('a', { href: 'https://github.com/ipcjs/bilibili-helper/issues/172', target: '_blank' }, [createElement('text', '(?)')])]), createElement('div', { style: { flex: 1, display: 'flex' } }, [ createElement('label', { style: { flex: 1 } }, [createElement('input', { type: 'checkbox', name: 'balh_remove_pre_ad' }), createElement('text', '去前置广告')]), + // _('label', { style: { flex: 1 } }, [_('input', { type: 'checkbox', name: 'balh_flv_prefer_ws' }), _('text', '优先使用ws')]), ]) ]), createElement('br'), createElement('div', { style: { display: 'flex' } }, [ @@ -2968,7 +3004,7 @@ function scriptSource(invokeBy) { } } - var css = ".adblock-tips {\n display: none !important; }\n"; + var css = ".adblock-tips {\n display: none !important;\n}"; function hide_adblock_tips() { if (util_page.home()) { @@ -2976,6 +3012,13 @@ function scriptSource(invokeBy) { } } + var RegExps; + (function (RegExps) { + const _raw = (str) => str.replace(/(\.|\?)/g, '\\$1'); + RegExps.url = (url) => new RegExp(`^(https?:)?//${_raw(url)}`); + RegExps.urlPath = (path) => new RegExp(`^(https?:)?//[\\w\\-\\.]+${_raw(path)}`); + })(RegExps || (RegExps = {})); + function injectFetch() { // 当前未替换任何内容... const originFetch = window.fetch; @@ -3010,7 +3053,7 @@ function scriptSource(invokeBy) { "code": 0, "cid": `http://comment.bilibili.com/${cid}.xml`, "timelength": result.timelength, - "src": url || result.durl[0].url, + "src": url || result.durl[0].url, // 只取第一个片段的url... }; }); } @@ -3430,143 +3473,126 @@ function scriptSource(invokeBy) { })); } (full, fullExports)); - function scriptContent() { - let log = console.log.bind(console, 'injector:'); - if (document.getElementById('balh-injector-source') && invokeBy === GM_info.scriptHandler) { - // 当前, 在Firefox+GM4中, 当返回缓存的页面时, 脚本会重新执行, 并且此时XMLHttpRequest是可修改的(为什么会这样?) + 页面中存在注入的代码 - // 导致scriptSource的invokeBy直接是GM4... - log(`页面中存在注入的代码, 但invokeBy却等于${GM_info.scriptHandler}, 这种情况不合理, 终止脚本执行`); - return - } - if (document.readyState === 'uninitialized') { // Firefox上, 对于iframe中执行的脚本, 会出现这样的状态且获取到的href为about:blank... - log('invokeBy:', invokeBy, 'readState:', document.readyState, 'href:', location.href, '需要等待进入loading状态'); - setTimeout(() => scriptSource(invokeBy + '.timeout'), 0); // 这里会暴力执行多次, 直到状态不为uninitialized... - return - } - - log = util_debug; - log(`[${GM_info.script.name} v${GM_info.script.version} (${invokeBy})] run on: ${window.location.href}`); - - version_remind(); - switch_to_old_player(); - - area_limit_for_vue(); - - hide_adblock_tips(); - - ((function () { - if (isClosed()) return - injectFetch(); - /// 注入Xhr - /// - /// [transformRequest]: - /// {@macro xhr_transform_request} - /// - /// [transformResponse]: - /// {@macro xhr_transform_response} - function injectXhrImpl({ transformRequest, transformResponse }) { - util_debug('XMLHttpRequest的描述符:', Object.getOwnPropertyDescriptor(window, 'XMLHttpRequest')); - window.XMLHttpRequest = new Proxy(window.XMLHttpRequest, { - construct: function (target, args) { - let container = {}; // 用来替换responseText等变量 - const dispatchResultTransformer = p => { - let event = {}; // 伪装的event - return p - .then(r => { - container.readyState = 4; - container.response = r; - container.responseText = typeof r === 'string' ? r : JSON.stringify(r); - container.__onreadystatechange(event); // 直接调用会不会存在this指向错误的问题? => 目前没看到, 先这样(;¬_¬) - }) - .catch(e => { - // 失败时, 让原始的response可以交付 - container.__block_response = false; - if (container.__response != null) { - container.readyState = 4; - container.response = container.__response; - container.__onreadystatechange(event); // 同上 + // @ts-nocheck + /// 注入Xhr + /// + /// [transformRequest]: + /// {@macro xhr_transform_request} + /// + /// [transformResponse]: + /// {@macro xhr_transform_response} + function injectXhr({ transformRequest, transformResponse }) { + util_debug('XMLHttpRequest的描述符:', Object.getOwnPropertyDescriptor(window, 'XMLHttpRequest')); + window.XMLHttpRequest = new Proxy(window.XMLHttpRequest, { + construct: function (target, args) { + let container = {}; // 用来替换responseText等变量 + const dispatchResultTransformer = p => { + let event = {}; // 伪装的event + return p + .then(r => { + container.readyState = 4; + container.response = r; + container.responseText = typeof r === 'string' ? r : JSON.stringify(r); + container.__onreadystatechange(event); // 直接调用会不会存在this指向错误的问题? => 目前没看到, 先这样(;¬_¬) + }) + .catch(e => { + // 失败时, 让原始的response可以交付 + container.__block_response = false; + if (container.__response != null) { + container.readyState = 4; + container.response = container.__response; + container.__onreadystatechange(event); // 同上 + } + }); + }; + const dispatchResultTransformerCreator = () => { + container.__block_response = true; + return dispatchResultTransformer; + }; + return new Proxy(new target(...args), { + has: function (target, prop) { + if (prop === 'onloadend') { + // 没有onloadend时, 会回退到使用onreadystatechange处理响应, 这样就不要改已有的代码了_(:3」∠)_ + return false; + } + return prop in target; + }, + set: function (target, prop, value, receiver) { + if (prop === 'onreadystatechange') { + container.__onreadystatechange = value; + let cb = value; + value = function (event) { + if (target.readyState === 4) { + /// {@macro xhr_transform_response} + const response = transformResponse({ + url: target.responseURL, + response: target.response, + xhr: target, + container, + }); + if (response != null) { + if (typeof response === 'object' && response instanceof Promise) { + // 异步转换 + response.compose(dispatchResultTransformerCreator()); + } + else { + // 同步转换 + container.response = response; + container.responseText = typeof response === 'string' ? response : JSON.stringify(response); + } + } + if (container.__block_response) { + // 屏蔽并保存response + container.__response = target.response; + return; } - }) - }; - const dispatchResultTransformerCreator = () => { - container.__block_response = true; - return dispatchResultTransformer - }; - return new Proxy(new target(...args), { - has: function (target, prop) { - if (prop === 'onloadend') { - // 没有onloadend时, 会回退到使用onreadystatechange处理响应, 这样就不要改已有的代码了_(:3」∠)_ - return false } - return prop in target - }, - set: function (target, prop, value, receiver) { - if (prop === 'onreadystatechange') { - container.__onreadystatechange = value; - let cb = value; - value = function (event) { - if (target.readyState === 4) { - /// {@macro xhr_transform_response} - const response = transformResponse({ - url: target.responseURL, - response: target.response, - xhr: target, - container, - }); - if (response != null) { - if (typeof response === 'object' && response instanceof Promise$1) { - // 异步转换 - response.compose(dispatchResultTransformerCreator()); - } else { - // 同步转换 - container.response = response; - container.responseText = typeof response === 'string' ? response : JSON.stringify(response); - } - } - if (container.__block_response) { - // 屏蔽并保存response - container.__response = target.response; - return - } - } - // 这里的this是原始的xhr, 在container.responseText设置了值时需要替换成代理对象 - cb.apply(container.responseText ? receiver : this, arguments); - }; + // 这里的this是原始的xhr, 在container.responseText设置了值时需要替换成代理对象 + cb.apply(container.responseText ? receiver : this, arguments); + }; + } + target[prop] = value; + return true; + }, + get: function (target, prop, receiver) { + if (prop in container) + return container[prop]; + let value = target[prop]; + if (typeof value === 'function') { + let func = value; + // open等方法, 必须在原始的xhr对象上才能调用... + value = function () { + if (prop === 'open') { + container.__method = arguments[0]; + container.__url = arguments[1]; } - target[prop] = value; - return true - }, - get: function (target, prop, receiver) { - if (prop in container) return container[prop] - let value = target[prop]; - if (typeof value === 'function') { - let func = value; - // open等方法, 必须在原始的xhr对象上才能调用... - value = function () { - if (prop === 'open') { - container.__method = arguments[0]; - container.__url = arguments[1]; - } else if (prop === 'send') { - /// {@macro xhr_transform_request} - const promise = transformRequest({ - url: container.__url, - container, - }); - if (promise != null) { - promise.compose(dispatchResultTransformerCreator()); - } - } - return func.apply(target, arguments) - }; + else if (prop === 'send') { + /// {@macro xhr_transform_request} + const promise = transformRequest({ + url: container.__url, + container, + }); + if (promise != null) { + promise.compose(dispatchResultTransformerCreator()); + } } - return value - } - }) + return func.apply(target, arguments); + }; + } + return value; } }); } - function injectXhr() { - injectXhrImpl({ + }); + } + + const area_limit_xhr = (() => { + return function () { + if (isClosed()) + return; + injectFetch(); + function injectXhr$1() { + injectXhr({ /// {@template xhr_transform_response} /// 转换响应数据, 处理简单的情况 /// - url: 响应的url @@ -3587,9 +3613,10 @@ function scriptSource(invokeBy) { // processSeasonInfo(json.result) json.result.episodes.forEach(removeEpAreaLimit); json.result.rights.area_limit = false; - return json + return json; } - } else if (url.match(RegExps.url('bangumi.bilibili.com/view/web_api/season/user/status')) + } + else if (url.match(RegExps.url('bangumi.bilibili.com/view/web_api/season/user/status')) || url.match(RegExps.url('api.bilibili.com/pgc/view/web/season/user/status'))) { log('/season/user/status:', xhr.responseText); let json = JSON.parse(xhr.responseText); @@ -3605,20 +3632,22 @@ function scriptSource(invokeBy) { rewriteResult = true; } if (rewriteResult) { - return json + return json; } } - } else if (url.match(RegExps.url('bangumi.bilibili.com/web_api/season_area'))) { + } + else if (url.match(RegExps.url('bangumi.bilibili.com/web_api/season_area'))) { log('/season_area', url); let json = JSON.parse(xhr.responseText); if (json.code === 0 && json.result) { areaLimit(json.result.play === 0); if (json.result.play === 0) { json.result.play = 1; - return json + return json; } } - } else if (url.match(RegExps.url('api.bilibili.com/x/web-interface/nav'))) { + } + else if (url.match(RegExps.url('api.bilibili.com/x/web-interface/nav'))) { const isFromReport = Strings.getSearchParam(url, 'from') === 'report'; let json = JSON.parse(xhr.responseText); log('/x/web-interface/nav', (json.data && json.data.isLogin) @@ -3629,9 +3658,10 @@ function scriptSource(invokeBy) { ) { json.data.vipType = 2; // 类型, 年度大会员 json.data.vipStatus = 1; // 状态, 启用 - return json + return json; } - } else if (url.match(RegExps.url('api.bilibili.com/x/player.so'))) { + } + else if (url.match(RegExps.url('api.bilibili.com/x/player.so'))) { // 这个接口的返回数据貌似并不会影响界面... if (balh_config.blocked_vip) { log('/x/player.so'); @@ -3642,10 +3672,11 @@ function scriptSource(invokeBy) { vip.vipType = 2; // 同上 vip.vipStatus = 1; vipXml.innerHTML = JSON.stringify(vip); - return xml.documentElement.innerHTML + return xml.documentElement.innerHTML; } } - } else if (url.match(RegExps.url('api.bilibili.com/x/player/v2'))) { + } + else if (url.match(RegExps.url('api.bilibili.com/x/player/v2'))) { // 上一个接口的新版本 let json = JSON.parse(xhr.responseText); // 生成简体字幕 @@ -3691,38 +3722,40 @@ function scriptSource(invokeBy) { let requestUrl = container.__url; let thailand_sub_url = requestUrl.replace('https://api.bilibili.com/x/player/v2', `${balh_config.server_custom_th}/intl/gateway/v2/app/subtitle`); return Async.ajax(thailand_sub_url) - .then(async thailand_data => { - let subtitle = { subtitles: [] }; - thailand_data.data.subtitles.forEach((item) => { - let sub = { - 'id': item.id, - 'id_str': item.id.toString(), - 'lan': item.key, - 'lan_doc': item.title, - 'subtitle_url': item.url.replace(/https?:\/\//, '//') - }; - subtitle.subtitles.push(sub); - }); - let json = { code: 0, data: { subtitle: subtitle } }; - // todo: json.data中有许多字段, 需要想办法填充 - if (balh_config.blocked_vip) { - json.data.vip = { - type: 2, //年费大会员 - status: 1 //启用 - }; - } - return json - }) - } else if (!json.code && json.data && balh_config.blocked_vip) { + .then((thailand_data) => __awaiter(this, void 0, void 0, function* () { + let subtitle = { subtitles: [] }; + thailand_data.data.subtitles.forEach((item) => { + let sub = { + 'id': item.id, + 'id_str': item.id.toString(), + 'lan': item.key, + 'lan_doc': item.title, + 'subtitle_url': item.url.replace(/https?:\/\//, '//') + }; + subtitle.subtitles.push(sub); + }); + let json = { code: 0, data: { subtitle: subtitle } }; + // todo: json.data中有许多字段, 需要想办法填充 + if (balh_config.blocked_vip) { + json.data.vip = { + type: 2, //年费大会员 + status: 1 //启用 + }; + } + return json; + })); + } + else if (!json.code && json.data && balh_config.blocked_vip) { log('/x/player/v2', 'vip'); const vip = json.data.vip; if (vip) { vip.type = 2; // 同上 vip.status = 1; - return json + return json; } } - } else if (url.match(RegExps.urlPath('/bfs/subtitle/'))) { + } + else if (url.match(RegExps.urlPath('/bfs/subtitle/'))) { log('/bfs/subtitle', url); const parsedUrl = new URL(url); const translate = parsedUrl.searchParams.get('translate') == '1'; @@ -3733,21 +3766,21 @@ function scriptSource(invokeBy) { const to = parsedUrl.searchParams.get('to'); const translator = fullExports.Converter({ from: from, to: to }); const json = JSON.parse(xhr.responseText); - // 参考 https://github.com/Kr328/bilibili-subtitle-tweaks json.body.forEach((value) => { const original = value.content; - let result = original.replace(/\s[-—-]/, s => `\n${s.substring(1)}`); result = translator(result); value.content = result; }); return json; - } else if (url.match(RegExps.url('api.bilibili.com/x/player/playurl'))) { + } + else if (url.match(RegExps.url('api.bilibili.com/x/player/playurl'))) { log('/x/player/playurl', 'origin', `block: ${container.__block_response}`, xhr.response); // todo : 当前只实现了r.const.mode.REPLACE, 需要支持其他模式 // 2018-10-14: 等B站全面启用新版再说(;¬_¬) - } else if (url.match(RegExps.url('api.bilibili.com/pgc/player/web/playurl')) + } + else if (url.match(RegExps.url('api.bilibili.com/pgc/player/web/playurl')) && !Strings.getSearchParam(url, 'balh_ajax')) { log('/pgc/player/web/playurl', 'origin', `block: ${container.__block_response}`, xhr.response); if (!container.__redirect) { // 请求没有被重定向, 则需要检测结果是否有区域限制 @@ -3761,38 +3794,42 @@ function scriptSource(invokeBy) { } return bilibiliApis._playurl.asyncAjax(requestUrl) .then(data => { - if (!data.code) { - data = { code: 0, result: data, message: "0" }; - } - log('/pgc/player/web/playurl', 'proxy', data); - return data - }) - } else { + if (!data.code) { + data = { code: 0, result: data, message: "0" }; + } + log('/pgc/player/web/playurl', 'proxy', data); + return data; + }); + } + else { areaLimit(false); } } // 同上 - } else if (url.match(RegExps.url('api.bilibili.com/pgc/view/web/freya/season'))) { + } + else if (url.match(RegExps.url('api.bilibili.com/pgc/view/web/freya/season'))) { /* 一起看放映室用这个api来识别区域限制 */ let json = JSON.parse(xhr.response); log('/pgc/view/web/freya/season', 'origin', `area_limit`, json.data.viewUserStatus.area_limit); if (json.code == 0 && json.data.viewUserStatus.area_limit == 1) { areaLimit(true); json.data.viewUserStatus.area_limit = 0; - return json - } else { + return json; + } + else { areaLimit(false); } - } else if (url.match(RegExps.url('api.bilibili.com/x/space/acc/info?')) || url.match(RegExps.url('api.bilibili.com/x/space/wbi/acc/info?'))) { + } + else if (url.match(RegExps.url('api.bilibili.com/x/space/acc/info?')) || url.match(RegExps.url('api.bilibili.com/x/space/wbi/acc/info?'))) { const json = JSON.parse(xhr.responseText); if (json.code === -404) { const mid = new URL(url).searchParams.get('mid'); if (space_account_info_map[mid]) { - return space_account_info_map[mid] + return space_account_info_map[mid]; } } } - return null + return null; }, /// {@template xhr_transform_request} /// 转换请求 @@ -3809,19 +3846,19 @@ function scriptSource(invokeBy) { // debugger return bilibiliApis._playurl.asyncAjax(url) .then(data => { - if (!data.code) { - data = { - code: 0, - data: data, - message: "0", - ttl: 1 - }; - } - log('/x/player/playurl', 'proxy', data); - return data - }) - - } else if (url.match(RegExps.url('api.bilibili.com/pgc/player/web/playurl')) + if (!data.code) { + data = { + code: 0, + data: data, + message: "0", + ttl: 1 + }; + } + log('/x/player/playurl', 'proxy', data); + return data; + }); + } + else if (url.match(RegExps.url('api.bilibili.com/pgc/player/web/playurl')) && !Strings.getSearchParam(url, 'balh_ajax') && needRedirect()) { log('/pgc/player/web/playurl'); @@ -3832,22 +3869,21 @@ function scriptSource(invokeBy) { } return bilibiliApis._playurl.asyncAjax(url) .then(data => { - if (!data.code) { - data = { - code: 0, - result: data, - message: "0", - }; - } - log('/pgc/player/web/playurl', 'proxy(redirect)', data); - return data - }) + if (!data.code) { + data = { + code: 0, + result: data, + message: "0", + }; + } + log('/pgc/player/web/playurl', 'proxy(redirect)', data); + return data; + }); } - return null + return null; } }); } - function injectAjax() { log('injectAjax at:', window.jQuery); let originalAjax = $.ajax; @@ -3855,7 +3891,8 @@ function scriptSource(invokeBy) { let param; if (arg1 === undefined) { param = arg0; - } else { + } + else { arg0 && (arg1.url = arg0); param = arg1; } @@ -3865,9 +3902,9 @@ function scriptSource(invokeBy) { // 投递结果的transformer, 结果通过oriSuccess/Error投递 let dispatchResultTransformer = p => p .then(r => { - // debugger - oriSuccess(r); - }) + // debugger + oriSuccess(r); + }) .catch(e => oriError(e)); // 转换原始请求的结果的transformer let oriResultTransformer; @@ -3878,21 +3915,23 @@ function scriptSource(invokeBy) { one_api = bilibiliApis._get_source; oriResultTransformer = p => p .then(json => { - log(json); - if (json.code === -40301 // 区域限制 - || json.result.payment && json.result.payment.price != 0 && balh_config.blocked_vip) { // 需要付费的视频, 此时B站返回的cid是错了, 故需要使用代理服务器的接口 - areaLimit(true); - return one_api.asyncAjax(param.url) - .catch(e => json)// 新的请求报错, 也应该返回原来的数据 - } else { - areaLimit(false); - if ((balh_config.blocked_vip || balh_config.remove_pre_ad) && json.code === 0 && json.result.pre_ad) { - json.result.pre_ad = 0; // 去除前置广告 - } - return json; + log(json); + if (json.code === -40301 // 区域限制 + || json.result.payment && json.result.payment.price != 0 && balh_config.blocked_vip) { // 需要付费的视频, 此时B站返回的cid是错了, 故需要使用代理服务器的接口 + areaLimit(true); + return one_api.asyncAjax(param.url) + .catch(e => json); // 新的请求报错, 也应该返回原来的数据 + } + else { + areaLimit(false); + if ((balh_config.blocked_vip || balh_config.remove_pre_ad) && json.code === 0 && json.result.pre_ad) { + json.result.pre_ad = 0; // 去除前置广告 } - }); - } else if (param.url.match(RegExps.urlPath('/player/web_api/playurl')) // 老的番剧页面playurl接口 + return json; + } + }); + } + else if (param.url.match(RegExps.urlPath('/player/web_api/playurl')) // 老的番剧页面playurl接口 || param.url.match(RegExps.urlPath('/player/web_api/v2/playurl')) // 新的番剧页面playurl接口 || param.url.match(RegExps.url('api.bilibili.com/pgc/player/web/playurl')) // 新的番剧页面playurl接口 || (balh_config.enable_in_av && param.url.match(RegExps.url('interface.bilibili.com/v2/playurl'))) // 普通的av页面playurl接口 @@ -3921,46 +3960,48 @@ function scriptSource(invokeBy) { } oriResultTransformer = p => p .then(json => { - log(json); - if (isNewPlayurl && !json.code) { - json = json.result; - } - if (balh_config.blocked_vip || json.code || isAreaLimitForPlayUrl(json)) { - areaLimit(true); - return one_api.asyncAjax(param.url) - .catch(e => json) - } else { - areaLimit(false); - return json - } - }); + log(json); + if (isNewPlayurl && !json.code) { + json = json.result; + } + if (balh_config.blocked_vip || json.code || isAreaLimitForPlayUrl(json)) { + areaLimit(true); + return one_api.asyncAjax(param.url) + .catch(e => json); + } + else { + areaLimit(false); + return json; + } + }); const oriDispatchResultTransformer = dispatchResultTransformer; dispatchResultTransformer = p => p .then(r => { - if (!r.code && !r.from && !r.result && !r.accept_description) { - util_warn('playurl的result缺少必要的字段:', r); - r.from = 'local'; - r.result = 'suee'; - r.accept_description = ['未知 3P']; - // r.timelength = r.durl.map(it => it.length).reduce((a, b) => a + b, 0) - if (r.durl && r.durl[0] && r.durl[0].url.includes('video-sg.biliplus.com')) { - const aid = window.__INITIAL_STATE__ && window.__INITIAL_STATE__.aid || window.__INITIAL_STATE__.epInfo && window.__INITIAL_STATE__.epInfo.aid || 'fuck'; - ui.pop({ - content: `原视频已被删除, 当前播放的是转存服务器中的视频, 速度较慢
      被删的原因可能是:
      1. 视频违规
      2. 视频被归类到番剧页面 => 试下搜索av${aid}` - }); - } - } - if (isNewPlayurl && !r.code) { - r = { - code: 0, - message: 'success', - result: r - }; + if (!r.code && !r.from && !r.result && !r.accept_description) { + util_warn('playurl的result缺少必要的字段:', r); + r.from = 'local'; + r.result = 'suee'; + r.accept_description = ['未知 3P']; + // r.timelength = r.durl.map(it => it.length).reduce((a, b) => a + b, 0) + if (r.durl && r.durl[0] && r.durl[0].url.includes('video-sg.biliplus.com')) { + const aid = window.__INITIAL_STATE__ && window.__INITIAL_STATE__.aid || window.__INITIAL_STATE__.epInfo && window.__INITIAL_STATE__.epInfo.aid || 'fuck'; + ui.pop({ + content: `原视频已被删除, 当前播放的是转存服务器中的视频, 速度较慢
      被删的原因可能是:
      1. 视频违规
      2. 视频被归类到番剧页面 => 试下搜索av${aid}` + }); } - return r - }) + } + if (isNewPlayurl && !r.code) { + r = { + code: 0, + message: 'success', + result: r + }; + } + return r; + }) .compose(oriDispatchResultTransformer); - } else if (param.url.match(RegExps.url('interface.bilibili.com/player?'))) { + } + else if (param.url.match(RegExps.url('interface.bilibili.com/player?'))) { if (balh_config.blocked_vip) { mySuccess = function (data) { try { @@ -3973,13 +4014,15 @@ function scriptSource(invokeBy) { vipTag.innerHTML = JSON.stringify(vip); data = xml.documentElement.innerHTML; } - } catch (e) { + } + catch (e) { log('parse xml error: ', e); } oriSuccess(data); }; } - } else if (param.url.match(RegExps.url('api.bilibili.com/x/ad/video?'))) { + } + else if (param.url.match(RegExps.url('api.bilibili.com/x/ad/video?'))) { if (balh_config.remove_pre_ad) { mySuccess = function (data) { log('/ad/video', data); @@ -3990,7 +4033,6 @@ function scriptSource(invokeBy) { }; } } - if (one_api && oriResultTransformer) { // 请求结果通过mySuccess/Error获取, 将其包装成Promise, 方便处理 let oriResultPromise = new Promise$1((resolve, reject) => { @@ -4003,13 +4045,13 @@ function scriptSource(invokeBy) { // proxy报错时, 返回原始请求的结果 .catch(e => oriResultPromise.compose(oriResultTransformerWhenProxyError)) .compose(dispatchResultTransformer); - } else { + } + else { oriResultPromise .compose(oriResultTransformer) .compose(dispatchResultTransformer); } } - // 若外部使用param.success处理结果, 则替换param.success if (oriSuccess && mySuccess) { param.success = mySuccess; @@ -4020,7 +4062,6 @@ function scriptSource(invokeBy) { } // default let xhr = originalAjax.apply(this, [param]); - // 若外部使用xhr.done()处理结果, 则替换xhr.done() if (!oriSuccess && mySuccess) { xhr.done(mySuccess); @@ -4040,21 +4081,15 @@ function scriptSource(invokeBy) { return xhr; }; } - - - function isAreaLimitSeason() { return cookieStorage['balh_season_' + getSeasonId()]; } - function needRedirect() { - return balh_config.mode === r.const.mode.REDIRECT || (balh_config.mode === r.const.mode.DEFAULT && isAreaLimitSeason()) + return balh_config.mode === r.const.mode.REDIRECT || (balh_config.mode === r.const.mode.DEFAULT && isAreaLimitSeason()); } - function areaLimit(limit) { balh_config.mode === r.const.mode.DEFAULT && setAreaLimitSeason(limit); } - function setAreaLimitSeason(limit) { var season_id = getSeasonId(); cookieStorage.set('balh_season_' + season_id, limit ? '1' : undefined, ''); // 第三个参数为'', 表示时Session类型的cookie @@ -4068,30 +4103,31 @@ function scriptSource(invokeBy) { // 3: 纪录片 // 4: 国创 // 5: 电视剧 - return season_type != null // 存在season_type就是bangumi? + return season_type != null; // 存在season_type就是bangumi? } - function isBangumiPage() { - return isBangumi(Func.safeGet('window.__INITIAL_STATE__.mediaInfo.season_type || window.__INITIAL_STATE__.mediaInfo.ssType')) + var _a; + const mediaInfo = (_a = window.__INITIAL_STATE__) === null || _a === void 0 ? void 0 : _a.mediaInfo; + return isBangumi((mediaInfo === null || mediaInfo === void 0 ? void 0 : mediaInfo.season_type) || (mediaInfo === null || mediaInfo === void 0 ? void 0 : mediaInfo.ssType)); } - function getSeasonId() { var seasonId; // 取anime页面的seasonId try { // 若w, 是其frame的window, 则有可能没有权限, 而抛异常 seasonId = window.season_id || window.top.season_id; - } catch (e) { + } + catch (e) { log(e); } if (!seasonId) { try { seasonId = (window.top.location.pathname.match(/\/anime\/(\d+)/) || ['', ''])[1]; - } catch (e) { + } + catch (e) { log(e); } } - // 若没取到, 则取movie页面的seasonId, 以m开头 if (!seasonId) { try { @@ -4099,34 +4135,35 @@ function scriptSource(invokeBy) { if (seasonId) { seasonId = 'm' + seasonId; } - } catch (e) { + } + catch (e) { log(e); } } - // 若没取到, 则去新的番剧播放页面的ep或ss if (!seasonId) { try { seasonId = (window.top.location.pathname.match(/\/bangumi\/play\/((ep|ss)\d+)/) || ['', ''])[1]; - } catch (e) { + } + catch (e) { log(e); } } - // 若没取到, 则从search params获取(比如放映室) if (!seasonId) { try { seasonId = Strings.getSearchParam(window.location.href, 'seasonid'); - } catch (e) { + } + catch (e) { log(e); } } - // 若没取到, 则去取av页面的av号 if (!seasonId) { try { seasonId = (window.top.location.pathname.match(/\/video\/((av|BV)\w+)/) || ['', ''])[1]; - } catch (e) { + } + catch (e) { log(e); } } @@ -4139,24 +4176,21 @@ function scriptSource(invokeBy) { } return seasonId || '000'; } - function isAreaLimitForPlayUrl(json) { return (json.errorcid && json.errorcid == '8986943') || (json.durl && json.durl.length === 1 && json.durl[0].length === 15126 && json.durl[0].size === 124627); } - var bilibiliApis = (function () { - function AjaxException(message, code = 0/*用0表示未知错误*/) { + function AjaxException(message, code = 0 /*用0表示未知错误*/) { this.name = 'AjaxException'; this.message = message; this.code = code; } AjaxException.prototype.toString = function () { - return `${this.name}: ${this.message}(${this.code})` + return `${this.name}: ${this.message}(${this.code})`; }; function BilibiliApi(props) { Object.assign(this, props); } - BilibiliApi.prototype.asyncAjaxByProxy = function (originUrl, success, error) { var one_api = this; $.ajax({ @@ -4177,7 +4211,7 @@ function scriptSource(invokeBy) { BilibiliApi.prototype.asyncAjax = function (originUrl) { return Async.ajax(this.transToProxyUrl(originUrl)) .then(r => this.processProxySuccess(r)) - .compose(util_ui_msg.showOnNetErrorInPromise()) // 出错时, 提示服务器连不上 + .compose(util_ui_msg.showOnNetErrorInPromise()); // 出错时, 提示服务器连不上 }; var get_source_by_aid = new BilibiliApi({ transToProxyUrl: function (url) { @@ -4197,13 +4231,14 @@ function scriptSource(invokeBy) { pay_user_status: data.movie.pay_user.status, // 一般都是0 player: data.list[0].type, // 一般为movie vid: data.list[0].vid, - vip: { // 2+1, 表示年度大会员; 0+0, 表示普通会员 + vip: { vipType: balh_config.blocked_vip ? 2 : 0, vipStatus: balh_config.blocked_vip ? 1 : 0, } } }; - } else { + } + else { return { code: -404, message: '不存在该剧集' @@ -4223,7 +4258,8 @@ function scriptSource(invokeBy) { found = data.result.episodes[i]; } } - } else { + } + else { ui.alert('代理服务器错误:' + JSON.stringify(data) + '\n点击刷新界面.', window.location.reload.bind(window.location)); } var returnVal = found !== null @@ -4253,7 +4289,6 @@ function scriptSource(invokeBy) { const api_url = 'https://interface.bilibili.com/playurl?'; const bangumi_api_url = 'https://bangumi.bilibili.com/player/web_api/playurl?'; const SEC_NORMAL = '1c15888dc316e05a15fdd0a02ed6584f'; - // 不设置module; 带module的接口都是有区域限制的... let module = undefined; /*Strings.getSearchParam(originUrl, 'module')*/ let paramDict = { @@ -4268,18 +4303,20 @@ function scriptSource(invokeBy) { } let { sign, params } = Converters.generateSign(paramDict, SEC_NORMAL); let url = module ? bangumi_api_url : api_url + params + '&sign=' + sign; - return url + return url; }, processProxySuccess: function (result, alertWhenError = true) { // 将xml解析成json let obj = Converters.xml2obj(result.documentElement); if (!obj || obj.code) { if (alertWhenError) { - ui.alert(`从B站接口获取视频地址失败\nresult: ${JSON.stringify(obj)}\n\n点击确定, 进入设置页面关闭'使用B站接口获取视频地址'功能`, settings$1.show); - } else { - return Promise$1.reject(`服务器错误: ${JSON.stringify(obj)}`) + ui.alert(`从B站接口获取视频地址失败\nresult: ${JSON.stringify(obj)}\n\n点击确定, 进入设置页面关闭'使用B站接口获取视频地址'功能`, settings.show); + } + else { + return Promise$1.reject(`服务器错误: ${JSON.stringify(obj)}`); } - } else { + } + else { obj.accept_quality && (obj.accept_quality = obj.accept_quality.split(',').map(n => +n)); if (!obj.durl.push) { obj.durl = [obj.durl]; @@ -4287,23 +4324,24 @@ function scriptSource(invokeBy) { obj.durl.forEach((item) => { if (item.backup_url === '') { item.backup_url = undefined; - } else if (item.backup_url && item.backup_url.url) { + } + else if (item.backup_url && item.backup_url.url) { item.backup_url = item.backup_url.url; } }); } log('xml2obj', result, '=>', obj); - return obj + return obj; }, _asyncAjax: function (originUrl) { return Async.ajax(this.transToProxyUrl(originUrl)) - .then(r => this.processProxySuccess(r, false)) + .then(r => this.processProxySuccess(r, false)); } }); var playurl_by_proxy = new BilibiliApi({ _asyncAjax: function (originUrl, bangumi) { return Async.ajax(this.transToProxyUrl(originUrl, bangumi)) - .then(r => this.processProxySuccess(r, false)) + .then(r => this.processProxySuccess(r, false)); }, transToProxyUrl: function (url, bangumi) { let params = url.split('?')[1]; @@ -4318,10 +4356,12 @@ function scriptSource(invokeBy) { if (!bangumi) { params = params.replace(/&?module=(\w+)/, ''); // 移除可能存在的module参数 } - } else if (bangumi === true) { // 保证添加module=bangumi参数 + } + else if (bangumi === true) { // 保证添加module=bangumi参数 params = params.replace(/&?module=(\w+)/, ''); params += '&module=bangumi'; - } else if (bangumi === false) { // 移除可能存在的module参数 + } + else if (bangumi === false) { // 移除可能存在的module参数 params = params.replace(/&?module=(\w+)/, ''); } // 管他三七二十一, 强行将module=bangumi替换成module=pgc _(:3」∠)_ @@ -4333,22 +4373,26 @@ function scriptSource(invokeBy) { if (data && data.code === -403) { ui.pop({ content: `code-403: ${JSON.stringify(data)}\n\n当前代理服务器(${balh_config.server})依然有区域限制\n\n可以考虑进行如下尝试:\n1. 进行“帐号授权”\n2. 换个代理服务器\n3. 耐心等待服务端修复问题\n\n点击确定, 打开设置页面`, - onConfirm: settings$1.show, + onConfirm: settings.show, }); - } else if (data === null || data.code) { + } + else if (data === null || data.code) { util_error(data); if (alertWhenError) { ui.alert(`突破黑洞失败\n${JSON.stringify(data)}\n点击确定刷新界面`, window.location.reload.bind(window.location)); - } else { - return Promise$1.reject(new AjaxException(`服务器错误: ${JSON.stringify(data)}`, data ? data.code : 0)) } - } else if (isAreaLimitForPlayUrl(data)) { + else { + return Promise$1.reject(new AjaxException(`服务器错误: ${JSON.stringify(data)}`, data ? data.code : 0)); + } + } + else if (isAreaLimitForPlayUrl(data)) { util_error('>>area limit'); ui.pop({ content: `突破黑洞失败\n需要登录\n点此确定进行登录`, onConfirm: biliplus_login.showLogin }); - } else { + } + else { if (balh_config.flv_prefer_ws) { data.durl.forEach(function (seg) { var t, url, i; @@ -4363,7 +4407,6 @@ function scriptSource(invokeBy) { break; } } - } }); } @@ -4377,9 +4420,9 @@ function scriptSource(invokeBy) { const proxyHostMap = [ [/僅.*台.*地區/, '//bilibili-tw-api.kghost.info/', []], [/僅.*港.*地區/, '//bilibili-hk-api.kghost.info/', [ - 34680, // 安达与岛村 - 36297, - ]], + 34680, // 安达与岛村 + 36297, + ]], [/仅限东南亚/, '//bilibili-sg-api.kghost.info/', []], [/.*/, '//bilibili-cn-api.kghost.info/', []], ]; @@ -4392,9 +4435,10 @@ function scriptSource(invokeBy) { } if (proxyHost) { return Async.ajax(this.transToProxyUrl(originUrl, proxyHost)) - .then(r => this.processProxySuccess(r)) - } else { - return Promise$1.reject("没有支持的服务器") + .then(r => this.processProxySuccess(r)); + } + else { + return Promise$1.reject("没有支持的服务器"); } }, transToProxyUrl: function (originUrl, proxyHost) { @@ -4402,154 +4446,150 @@ function scriptSource(invokeBy) { }, processProxySuccess: function (result) { if (result.code) { - return Promise$1.reject(result) + return Promise$1.reject(result); } - return result.result + return result.result; }, }); const playurl_by_custom = new BilibiliApi({ _asyncAjax: function (originUrl) { - return this.selectServer(originUrl).then(r => this.processProxySuccess(r)) + return this.selectServer(originUrl).then(r => this.processProxySuccess(r)); }, - selectServer: async function (originUrl) { - let result; - // 对应this.transToProxyUrl的参数, 用`/`分隔, 形如: `${proxyHost}/${area}` - let tried_server_args = []; - const isTriedServerArg = (proxyHost, area) => tried_server_args.includes(`${proxyHost}/*`) || tried_server_args.includes(`${proxyHost}/${area}`); - /** - * @param {string} proxyHost 代理地址 - * @param {"cn"|"hk"|"th"|"cn"|""} area 区域 - */ - const requestPlayUrl = (proxyHost, area) => { - tried_server_args.push(`${proxyHost}/${area}`); - return Async.ajax(this.transToProxyUrl(originUrl, proxyHost, area)) - // 捕获错误, 防止依次尝试各各服务器的流程中止 - .catch((e) => { + selectServer: function (originUrl) { + return __awaiter(this, void 0, void 0, function* () { + let result; + // 对应this.transToProxyUrl的参数, 用`/`分隔, 形如: `${proxyHost}/${area}` + let tried_server_args = []; + const isTriedServerArg = (proxyHost, area) => tried_server_args.includes(`${proxyHost}/*`) || tried_server_args.includes(`${proxyHost}/${area}`); + /** + * @param {string} proxyHost 代理地址 + * @param {"cn"|"hk"|"th"|"cn"|""} area 区域 + */ + const requestPlayUrl = (proxyHost, area) => { + tried_server_args.push(`${proxyHost}/${area}`); + return Async.ajax(this.transToProxyUrl(originUrl, proxyHost, area)) + // 捕获错误, 防止依次尝试各各服务器的流程中止 + .catch((e) => { // proxyHost临时不可用, 将它添加到tried_server_args中, 防止重复请求 tried_server_args.push(`${proxyHost}/*`); return ({ code: -1, error: e }); - }) - }; - - // 标题有明确说明优先尝试,通常准确率最高 - if (/(僅|仅)限?(臺|台)(灣|湾)/.test(document.title) && balh_config.server_custom_tw) { - ui.playerMsg('捕获标题提示,使用台湾代理服务器拉取视频地址...'); - result = await requestPlayUrl(balh_config.server_custom_tw, 'tw'); - if (!result.code) { - return Promise$1.resolve(result) + }); + }; + // 标题有明确说明优先尝试,通常准确率最高 + if (/(僅|仅)限?(臺|台)(灣|湾)/.test(document.title) && balh_config.server_custom_tw) { + ui.playerMsg('捕获标题提示,使用台湾代理服务器拉取视频地址...'); + result = yield requestPlayUrl(balh_config.server_custom_tw, 'tw'); + if (!result.code) { + return Promise$1.resolve(result); + } } - } - if (/(僅|仅)限?港澳/.test(document.title) && balh_config.server_custom_hk) { - ui.playerMsg('捕获标题提示,使用香港代理服务器拉取视频地址...'); - result = await requestPlayUrl(balh_config.server_custom_hk, 'hk'); - if (!result.code) { - return Promise$1.resolve(result) + if (/(僅|仅)限?港澳/.test(document.title) && balh_config.server_custom_hk) { + ui.playerMsg('捕获标题提示,使用香港代理服务器拉取视频地址...'); + result = yield requestPlayUrl(balh_config.server_custom_hk, 'hk'); + if (!result.code) { + return Promise$1.resolve(result); + } } - } - - // 服务器列表, 按顺序解析 - const server_list = [ - // 大陆, 通过标题没法区分 - [balh_config.server_custom_cn, '大陆', 'cn'], - // 泰, 通过标题没法区分 - [balh_config.server_custom_th, '泰国(东南亚)', 'th'], - // 港台, 一般能够从标题中匹配到, 因而优先级可以低一点 - [balh_config.server_custom_hk, '香港', 'hk'], - [balh_config.server_custom_tw, '台湾', 'tw'], - ]; - - // 尝试读取番剧区域缓存判断番剧区域进行解析 - let bangumi_area_cache = {}; - if (localStorage.getItem('balh_bangumi_area_cache')) { - bangumi_area_cache = JSON.parse(localStorage.getItem('balh_bangumi_area_cache')); - if (util_page.ssId && bangumi_area_cache.hasOwnProperty(util_page.ssId)) { - // 缓存存在 - let server_list_map = {}; - server_list.forEach((item) => { - server_list_map[item[2]] = item; - }); - let area_code = bangumi_area_cache[util_page.ssId]; - let cache_host = server_list_map[area_code][0]; - let cache_host_name = server_list_map[area_code][1]; - ui.playerMsg(`读取番剧地区缓存,使用${cache_host_name}代理服务器拉取视频地址...`); - if (cache_host) { - result = await requestPlayUrl(cache_host, area_code); - if (!result.code) { - return Promise$1.resolve(result) + // 服务器列表, 按顺序解析 + const server_list = [ + // 大陆, 通过标题没法区分 + [balh_config.server_custom_cn, '大陆', 'cn'], + // 泰, 通过标题没法区分 + [balh_config.server_custom_th, '泰国(东南亚)', 'th'], + // 港台, 一般能够从标题中匹配到, 因而优先级可以低一点 + [balh_config.server_custom_hk, '香港', 'hk'], + [balh_config.server_custom_tw, '台湾', 'tw'], + ]; + // 尝试读取番剧区域缓存判断番剧区域进行解析 + let bangumi_area_cache = {}; + if (localStorage.getItem('balh_bangumi_area_cache')) { + bangumi_area_cache = JSON.parse(localStorage.getItem('balh_bangumi_area_cache')); + if (util_page.ssId && bangumi_area_cache.hasOwnProperty(util_page.ssId)) { + // 缓存存在 + let server_list_map = {}; + server_list.forEach((item) => { + server_list_map[item[2]] = item; + }); + let area_code = bangumi_area_cache[util_page.ssId]; + let cache_host = server_list_map[area_code][0]; + let cache_host_name = server_list_map[area_code][1]; + ui.playerMsg(`读取番剧地区缓存,使用${cache_host_name}代理服务器拉取视频地址...`); + if (cache_host) { + result = yield requestPlayUrl(cache_host, area_code); + if (!result.code) { + return Promise$1.resolve(result); + } } } } - } - - // 首选服务器解析 - if (balh_config.server_custom) { - ui.playerMsg('使用首选代理服务器拉取视频地址...'); - // 首选代理服务器的area参数需要为空 - result = await requestPlayUrl(balh_config.server_custom, ''); - if (!result.code) { - return Promise$1.resolve(result) - } - } - - - // 首选服务器失败后开始尝试服务器列表, 按顺序解析 - for (let server_info of server_list) { - const host = server_info[0]; - const host_name = server_info[1]; - const host_code = server_info[2]; - // 请求过的服务器, 不应该重复请求 - if (host && (!isTriedServerArg(host, host_code))) { - ui.playerMsg(`使用${host_name}代理服务器拉取视频地址...`); - result = await requestPlayUrl(host, host_code); + // 首选服务器解析 + if (balh_config.server_custom) { + ui.playerMsg('使用首选代理服务器拉取视频地址...'); + // 首选代理服务器的area参数需要为空 + result = yield requestPlayUrl(balh_config.server_custom, ''); if (!result.code) { - // 解析成功,将结果存入番剧区域缓存 - if (util_page.ssId) { - bangumi_area_cache[util_page.ssId] = host_code; - localStorage.setItem('balh_bangumi_area_cache', JSON.stringify(bangumi_area_cache)); + return Promise$1.resolve(result); + } + } + // 首选服务器失败后开始尝试服务器列表, 按顺序解析 + for (let server_info of server_list) { + const host = server_info[0]; + const host_name = server_info[1]; + const host_code = server_info[2]; + // 请求过的服务器, 不应该重复请求 + if (host && (!isTriedServerArg(host, host_code))) { + ui.playerMsg(`使用${host_name}代理服务器拉取视频地址...`); + result = yield requestPlayUrl(host, host_code); + if (!result.code) { + // 解析成功,将结果存入番剧区域缓存 + if (util_page.ssId) { + bangumi_area_cache[util_page.ssId] = host_code; + localStorage.setItem('balh_bangumi_area_cache', JSON.stringify(bangumi_area_cache)); + } + return Promise$1.resolve(result); } - return Promise$1.resolve(result) } } - } - return Promise$1.resolve(result) // 都失败了,返回最后一次数据 + return Promise$1.resolve(result); // 都失败了,返回最后一次数据 + }); }, transToProxyUrl: function (originUrl, proxyHost, area) { if (r.regex.bilibili_api_proxy.test(proxyHost)) { if (area === 'th') { // 泰区番剧解析 - return getMobiPlayUrl(originUrl, proxyHost, area) + return getMobiPlayUrl(originUrl, proxyHost, area); } if (window.__balh_app_only__) { // APP 限定用 mobi api - return getMobiPlayUrl(originUrl, proxyHost, area) + return getMobiPlayUrl(originUrl, proxyHost, area); } return originUrl.replace(/^(https:)?(\/\/api\.bilibili\.com\/)/, `$1${proxyHost}/`) + '&area=' + area + access_key_param_if_exist(true); - } else { + } + else { if (window.__balh_app_only__) { - return `${proxyHost}?${generateMobiPlayUrlParams(originUrl)}` + return `${proxyHost}?${generateMobiPlayUrlParams(originUrl)}`; } // 将proxyHost当成接口的完整路径进行拼接 const params = originUrl.split('?')[1]; - return `${proxyHost}?${params}${access_key_param_if_exist(true)}` - + return `${proxyHost}?${params}${access_key_param_if_exist(true)}`; } }, processProxySuccess: function (result) { if (result.code) { - return Promise$1.reject(result) + return Promise$1.reject(result); } // 在APP限定情况启用 mobi api 解析 if (window.__balh_app_only__) { // 泰区番也是 APP 限定 if (result.hasOwnProperty('data')) { - return fixThailandPlayUrlJson(result) + return fixThailandPlayUrlJson(result); } if (result['type'] == "DASH") { - return fixMobiPlayUrlJson(result) + return fixMobiPlayUrlJson(result); } return result; } - return result.result + return result.result; }, }); const playurl = new BilibiliApi({ @@ -4557,60 +4597,61 @@ function scriptSource(invokeBy) { ui.playerMsg(`从${r.const.server.CUSTOM === balh_config.server_inner ? '自定义' : '代理'}服务器拉取视频地址中...`); return (r.const.server.CUSTOM === balh_config.server_inner ? playurl_by_custom._asyncAjax(originUrl) : (playurl_by_proxy._asyncAjax(originUrl) // 优先从代理服务器获取 .catch(e => { - if (e instanceof AjaxException) { - ui.playerMsg(e); - if (e.code === 1 // code: 1 表示非番剧视频, 不能使用番剧视频参数 - || (Strings.getSearchParam(originUrl, 'module') === 'bangumi' && e.code === -404)) { // 某些番剧视频又不需要加module=bangumi, 详见: https://github.com/ipcjs/bilibili-helper/issues/494 - ui.playerMsg('尝试使用非番剧视频接口拉取视频地址...'); - return playurl_by_proxy._asyncAjax(originUrl, false) - .catch(e2 => Promise$1.reject(e)) // 忽略e2, 返回原始错误e - } else if (e.code === 10004) { // code: 10004, 表示视频被隐藏, 一般添加module=bangumi参数可以拉取到视频 - ui.playerMsg('尝试使用番剧视频接口拉取视频地址...'); - return playurl_by_proxy._asyncAjax(originUrl, true) - .catch(e2 => Promise$1.reject(e)) - } + if (e instanceof AjaxException) { + ui.playerMsg(e); + if (e.code === 1 // code: 1 表示非番剧视频, 不能使用番剧视频参数 + || (Strings.getSearchParam(originUrl, 'module') === 'bangumi' && e.code === -404)) { // 某些番剧视频又不需要加module=bangumi, 详见: https://github.com/ipcjs/bilibili-helper/issues/494 + ui.playerMsg('尝试使用非番剧视频接口拉取视频地址...'); + return playurl_by_proxy._asyncAjax(originUrl, false) + .catch(e2 => Promise$1.reject(e)); // 忽略e2, 返回原始错误e } - return Promise$1.reject(e) - }))) - .catch(e => { - if ((typeof e === 'object' && e.statusText == 'error') - || (e instanceof AjaxException && (e.code === -502 || e.code === -412/*请求被拦截*/ || e.code === -500/*已爆炸*/)) - || (typeof e === 'object' && e.code === -10403) - ) { - ui.playerMsg('尝试使用kghost的服务器拉取视频地址...'); - return playurl_by_kghost._asyncAjax(originUrl) - .catch(e2 => Promise$1.reject(e)) + else if (e.code === 10004) { // code: 10004, 表示视频被隐藏, 一般添加module=bangumi参数可以拉取到视频 + ui.playerMsg('尝试使用番剧视频接口拉取视频地址...'); + return playurl_by_proxy._asyncAjax(originUrl, true) + .catch(e2 => Promise$1.reject(e)); } - return Promise$1.reject(e) - }) + } + return Promise$1.reject(e); + }))) + .catch(e => { + if ((typeof e === 'object' && e.statusText == 'error') + || (e instanceof AjaxException && (e.code === -502 || e.code === -412 /*请求被拦截*/ || e.code === -500 /*已爆炸*/)) + || (typeof e === 'object' && e.code === -10403)) { + ui.playerMsg('尝试使用kghost的服务器拉取视频地址...'); + return playurl_by_kghost._asyncAjax(originUrl) + .catch(e2 => Promise$1.reject(e)); + } + return Promise$1.reject(e); + }) // 报错时, 延时1秒再发送错误信息 .catch(e => Async.timeout(1000).then(r => Promise$1.reject(e))) .catch(e => { - let msg; - if (typeof e === 'object' && e.statusText == 'error') { - msg = '代理服务器临时不可用'; - ui.playerMsg(msg); - } else { - msg = Objects.stringify(e); - } - ui.pop({ - content: `## 拉取视频地址失败\n原因: ${msg}\n\n可以考虑进行如下尝试:\n1. 多刷新几下页面\n2. 进入设置页面更换代理服务器\n3. 耐心等待代理服务器端修复问题`, - onConfirm: window.location.reload.bind(window.location), - confirmBtn: '刷新页面' - }); - return Promise$1.reject(e) - }) + let msg; + if (typeof e === 'object' && e.statusText == 'error') { + msg = '代理服务器临时不可用'; + ui.playerMsg(msg); + } + else { + msg = Objects.stringify(e); + } + ui.pop({ + content: `## 拉取视频地址失败\n原因: ${msg}\n\n可以考虑进行如下尝试:\n1. 多刷新几下页面\n2. 进入设置页面更换代理服务器\n3. 耐心等待代理服务器端修复问题`, + onConfirm: window.location.reload.bind(window.location), + confirmBtn: '刷新页面' + }); + return Promise$1.reject(e); + }) .then(data => { - if (data.dash) { - // dash中的字段全部变成了类似C语言的下划线风格... - Objects.convertKeyToSnakeCase(data.dash); - } - // 替换后大多数bangumi下的视频都会报CROS错误 - if (!window.__balh_app_only__ && balh_config.upos_server) { - return Converters.replaceUpos(data, uposMap[balh_config.upos_server], balh_config.upos_replace_akamai) - } - return data - }) + if (data.dash) { + // dash中的字段全部变成了类似C语言的下划线风格... + Objects.convertKeyToSnakeCase(data.dash); + } + // 替换后大多数bangumi下的视频都会报CROS错误 + if (!window.__balh_app_only__ && balh_config.upos_server) { + return Converters.replaceUpos(data, uposMap[balh_config.upos_server], balh_config.upos_replace_akamai); + } + return data; + }); } }); return { @@ -4618,7 +4659,6 @@ function scriptSource(invokeBy) { _playurl: playurl, }; })(); - if (util_page.anime_ep_m() || util_page.anime_ss_m()) { // BiliPlusApi.playurl_for_mp4返回的url能在移动设备上播放的前提是, 请求头不包含Referer... // 故这里设置meta, 使页面不发送Referer @@ -4644,7 +4684,7 @@ function scriptSource(invokeBy) { }); }); } - injectXhr(); + injectXhr$1(); { let jQuery = window.jQuery; if (jQuery) { // 若已加载jQuery, 则注入 @@ -4670,9 +4710,9 @@ function scriptSource(invokeBy) { if (arg0 === 'click.reply' && arg1 === '.reply') { // 屏蔽掉"回复"按钮的点击事件 log('block click.reply', arguments); - return + return; } - return v.fn.balh_on.apply(this, arguments) + return v.fn.balh_on.apply(this, arguments); }; } // jQuery.fn.paging方法用于创建评论区的页标, 需要迁移到新的jQuery上 @@ -4681,47 +4721,50 @@ function scriptSource(invokeBy) { log('迁移jQuery.fn.paging'); v.fn.paging = jQuery.fn.paging; } - } catch (e) { + } + catch (e) { util_error(e); } } - jQuery = v; - injectAjax();// 设置jQuery后, 立即注入 + injectAjax(); // 设置jQuery后, 立即注入 }, get: function () { return jQuery; } }); } - })()); + }; + })(); + function scriptContent() { + let log = console.log.bind(console, 'injector:'); + if (document.getElementById('balh-injector-source') && invokeBy === GM_info.scriptHandler) { + // 当前, 在Firefox+GM4中, 当返回缓存的页面时, 脚本会重新执行, 并且此时XMLHttpRequest是可修改的(为什么会这样?) + 页面中存在注入的代码 + // 导致scriptSource的invokeBy直接是GM4... + log(`页面中存在注入的代码, 但invokeBy却等于${GM_info.scriptHandler}, 这种情况不合理, 终止脚本执行`); + return; + } + if (document.readyState === 'uninitialized') { // Firefox上, 对于iframe中执行的脚本, 会出现这样的状态且获取到的href为about:blank... + log('invokeBy:', invokeBy, 'readState:', document.readyState, 'href:', location.href, '需要等待进入loading状态'); + setTimeout(() => scriptSource(invokeBy + '.timeout'), 0); // 这里会暴力执行多次, 直到状态不为uninitialized... + return; + } + log = util_debug; + log(`[${GM_info.script.name} v${GM_info.script.version} (${invokeBy})] run on: ${window.location.href}`); + version_remind(); + switch_to_old_player(); + area_limit_for_vue(); + hide_adblock_tips(); + area_limit_xhr(); remove_pre_ad(); - check_html5(); - redirect_to_bangumi_or_insert_player(); - fill_season_page(); - - const settings$1 = settings(); - + const settings = settings$1(); jump_to_baipiao(); biliplus_check_area_limit(); - function main() { - util_info( - 'mode:', balh_config.mode, - 'blocked_vip:', balh_config.blocked_vip, - 'server:', balh_config.server, - 'upos_server:', balh_config.upos_server, - 'flv_prefer_ws:', balh_config.flv_prefer_ws, - 'remove_pre_ad:', balh_config.remove_pre_ad, - 'generate_sub:', balh_config.generate_sub, - 'enable_in_av:', balh_config.enable_in_av, - 'readyState:', document.readyState, - 'isLogin:', biliplus_login.isLogin(), - 'isLoginBiliBili:', biliplus_login.isLoginBiliBili() - ); + util_info('mode:', balh_config.mode, 'blocked_vip:', balh_config.blocked_vip, 'server:', balh_config.server, 'upos_server:', balh_config.upos_server, 'flv_prefer_ws:', balh_config.flv_prefer_ws, 'remove_pre_ad:', balh_config.remove_pre_ad, 'generate_sub:', balh_config.generate_sub, 'enable_in_av:', balh_config.enable_in_av, 'readyState:', document.readyState, 'isLogin:', biliplus_login.isLogin(), 'isLoginBiliBili:', biliplus_login.isLoginBiliBili()); // 暴露接口 window.bangumi_area_limit_hack = { setCookie: cookieStorage.set, @@ -4729,16 +4772,16 @@ function scriptSource(invokeBy) { login: biliplus_login.showLogin, logout: biliplus_login.showLogout, getLog: () => { - return logHub.getAllMsg({ [localStorage.access_key]: '{{access_key}}' }) + return logHub.getAllMsg({ [localStorage.access_key]: '{{access_key}}' }); }, getAllLog: (...args) => { setTimeout(() => { ui.alert('⚠️️全部日志包含access_key等敏感数据, 请不要发布到公开的网络上!!!⚠️️'); }, 0); - return logHub.getAllMsg.apply(null, args) + return logHub.getAllMsg.apply(null, args); }, - showSettings: settings$1.show, - _setupSettings: settings$1.setup, + showSettings: settings.show, + _setupSettings: settings.setup, set1080P: function () { const settings = JSON.parse(localStorage.bilibili_player_settings); const oldQuality = settings.setting_config.defquality; @@ -4756,10 +4799,8 @@ function scriptSource(invokeBy) { } }; } - main(); } - scriptContent(); }