diff --git a/global.d.ts b/global.d.ts index fdcab28..3c6af3f 100644 --- a/global.d.ts +++ b/global.d.ts @@ -31,7 +31,7 @@ declare interface Window { initializeTooltip(selector: string, elemId: string): void; - renderMiniProfile(node: Element, props: any); + renderMiniProfile(node: Element, props: any): never; /* PDA自带 */ PDA_httpGet(url: URL | string): Promise; @@ -41,7 +41,7 @@ declare interface Window { /* 油猴脚本引擎自带 */ unsafeWindow?: Window & typeof globalThis; - GM_xmlhttpRequest(init: GM_RequestParams); + GM_xmlhttpRequest(init: GM_RequestParams): void; GM_getValue(k: string, def: any): unknown; @@ -96,4 +96,9 @@ declare interface TornGetActionParams { }, success: Function, before?: Function +} + +declare module "*.html" { + const value: string; + export default value; } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2c02e7a..9edc207 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "version": "4.1.0", "resolved": "https://registry.npmmirror.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, "requires": { "@rollup/pluginutils": "^3.0.8" } @@ -52,16 +53,39 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, "requires": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", "picomatch": "^2.2.2" } }, + "@types/clean-css": { + "version": "4.2.6", + "resolved": "https://registry.npmmirror.com/@types/clean-css/-/clean-css-4.2.6.tgz", + "integrity": "sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==", + "dev": true, + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, "@types/estree": { "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/html-minifier": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/@types/html-minifier/-/html-minifier-3.5.3.tgz", + "integrity": "sha512-j1P/4PcWVVCPEy5lofcHnQ6BtXz9tHGiFPWzqm7TtGuWZEfCHEP446HlkSNc9fQgNJaJZ6ewPtp2aaFla/Uerg==", + "dev": true, + "requires": { + "@types/clean-css": "*", + "@types/relateurl": "*", + "@types/uglify-js": "*" + } }, "@types/jquery": { "version": "3.5.14", @@ -78,12 +102,27 @@ "integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==", "dev": true }, + "@types/relateurl": { + "version": "0.2.29", + "resolved": "https://registry.npmmirror.com/@types/relateurl/-/relateurl-0.2.29.tgz", + "integrity": "sha512-QSvevZ+IRww2ldtfv1QskYsqVVVwCKQf1XbwtcyyoRvLIQzfyPhj/C+3+PKzSDRdiyejaiLgnq//XTkleorpLg==", + "dev": true + }, "@types/sizzle": { "version": "2.3.3", "resolved": "https://registry.npmmirror.com/@types/sizzle/-/sizzle-2.3.3.tgz", "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, + "@types/uglify-js": { + "version": "3.17.0", + "resolved": "https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.17.0.tgz", + "integrity": "sha512-3HO6rm0y+/cqvOyA8xcYLweF0TKXlAxmQASjbOi49Co51A1N4nR4bEwBgRoD9kNM+rqFGArjKr654SLp2CoGmQ==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -93,6 +132,16 @@ "color-convert": "^1.9.0" } }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", @@ -104,6 +153,15 @@ "supports-color": "^5.3.0" } }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", @@ -119,6 +177,12 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -128,7 +192,8 @@ "estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -158,6 +223,27 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + } + }, "is-core-module": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", @@ -194,6 +280,21 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", @@ -206,12 +307,1841 @@ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true }, + "minify-html-literals": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/minify-html-literals/-/minify-html-literals-1.3.5.tgz", + "integrity": "sha512-p8T8ryePRR8FVfJZLVFmM53WY25FL0moCCTycUDuAu6rf9GMLwy0gNjXBGNin3Yun7Y+tIWd28axOf0t2EpAlQ==", + "dev": true, + "requires": { + "@types/html-minifier": "^3.5.3", + "clean-css": "^4.2.1", + "html-minifier": "^4.0.0", + "magic-string": "^0.25.0", + "parse-literals": "^1.2.1" + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "npm": { + "version": "8.19.2", + "resolved": "https://registry.npmmirror.com/npm/-/npm-8.19.2.tgz", + "integrity": "sha512-MWkISVv5f7iZbfNkry5/5YBqSYJEDAKSJdL+uzSQuyLg+hgLQUyZynu3SH6bOZlvR9ZvJYk2EiJO6B1r+ynwHg==", + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.6.2", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.2.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/promise-spawn": "*", + "@npmcli/run-script": "^4.2.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.3", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "fs-minipass": "*", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.1.0", + "ini": "^3.0.1", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.13", + "libnpmfund": "^3.0.4", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "*", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "p-map": "^4.0.0", + "pacote": "^13.6.2", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.2", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "@gar/promisify": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "@isaacs/string-locale-compare": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "@npmcli/arborist": { + "version": "5.6.2", + "bundled": true, + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/query": "^1.2.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.3", + "cacache": "^16.1.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.2", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/ci-detect": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "@npmcli/config": { + "version": "4.2.2", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/disparity-colors": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/fs": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "bundled": true, + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "dependencies": { + "npm-bundled": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + } + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + } + }, + "@npmcli/metavuln-calculator": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "@npmcli/node-gyp": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "@npmcli/package-json": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1" + } + }, + "@npmcli/promise-spawn": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/query": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + } + }, + "@npmcli/run-script": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "bin-links": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "requires": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "binary-extensions": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "builtins": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "chalk": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "cli-columns": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "cli-table3": { + "version": "0.6.2", + "bundled": true, + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "cmd-shim": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "color-support": { + "version": "1.1.3", + "bundled": true, + "dev": true + }, + "columnify": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "requires": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "debug": { + "version": "4.3.4", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "depd": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "5.1.0", + "bundled": true, + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true, + "dev": true + }, + "encoding": { + "version": "0.1.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "err-code": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "bundled": true, + "dev": true + }, + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "gauge": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "glob": { + "version": "8.0.3", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "bundled": true, + "dev": true + }, + "has": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "bundled": true, + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ignore-walk": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "requires": { + "minimatch": "^5.0.1" + } + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "ini": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "init-package-json": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" + } + }, + "ip": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true, + "dev": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.10.0", + "bundled": true, + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "bundled": true, + "dev": true + }, + "json-stringify-nice": { + "version": "1.1.4", + "bundled": true, + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true, + "dev": true + }, + "just-diff": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "just-diff-apply": { + "version": "5.4.1", + "bundled": true, + "dev": true + }, + "libnpmaccess": { + "version": "6.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmdiff": { + "version": "4.0.5", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/disparity-colors": "^2.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1", + "tar": "^6.1.0" + } + }, + "libnpmexec": { + "version": "4.0.13", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^5.6.2", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", + "chalk": "^4.1.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "proc-log": "^2.0.0", + "read": "^1.0.7", + "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", + "walk-up-path": "^1.0.0" + } + }, + "libnpmfund": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/arborist": "^5.6.2" + } + }, + "libnpmhook": { + "version": "8.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmorg": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmpack": { + "version": "4.1.3", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/run-script": "^4.1.3", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1" + } + }, + "libnpmpublish": { + "version": "6.0.5", + "bundled": true, + "dev": true, + "requires": { + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" + } + }, + "libnpmsearch": { + "version": "5.0.4", + "bundled": true, + "dev": true, + "requires": { + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmteam": { + "version": "4.0.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + } + }, + "libnpmversion": { + "version": "3.0.7", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^4.1.3", + "json-parse-even-better-errors": "^2.3.1", + "proc-log": "^2.0.0", + "semver": "^7.3.7" + } + }, + "lru-cache": { + "version": "7.13.2", + "bundled": true, + "dev": true + }, + "make-fetch-happen": { + "version": "10.2.1", + "bundled": true, + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.4", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "ms": { + "version": "2.1.3", + "bundled": true, + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "bundled": true, + "dev": true + }, + "node-gyp": { + "version": "9.1.0", + "bundled": true, + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "nopt": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "nopt": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "npm-audit-report": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "npm-bundled": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "npm-install-checks": { + "version": "5.0.0", + "bundled": true, + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "npm-package-arg": { + "version": "9.1.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + } + }, + "npm-packlist": { + "version": "5.1.3", + "bundled": true, + "dev": true, + "requires": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "npm-pick-manifest": { + "version": "7.0.2", + "bundled": true, + "dev": true, + "requires": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "npm-profile": { + "version": "6.2.1", + "bundled": true, + "dev": true, + "requires": { + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" + } + }, + "npm-registry-fetch": { + "version": "13.3.1", + "bundled": true, + "dev": true, + "requires": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "npmlog": { + "version": "6.0.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "p-map": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "13.6.2", + "bundled": true, + "dev": true, + "requires": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + } + }, + "parse-conflict-json": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "postcss-selector-parser": { + "version": "6.0.10", + "bundled": true, + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "proc-log": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-call-limit": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "read": "1" + } + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "read-package-json": { + "version": "5.0.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "dependencies": { + "npm-normalize-package-bin": { + "version": "2.0.0", + "bundled": true, + "dev": true + } + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "bundled": true, + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "7.3.7", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "bundled": true, + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "bundled": true, + "dev": true + }, + "socks": { + "version": "2.7.0", + "bundled": true, + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "bundled": true, + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "spdx-correct": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "bundled": true, + "dev": true + }, + "ssri": { + "version": "9.0.1", + "bundled": true, + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string-width": { + "version": "4.2.3", + "bundled": true, + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "6.1.11", + "bundled": true, + "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" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "treeverse": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "unique-filename": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "walk-up-path": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yallist": { + "version": "4.0.0", + "bundled": true, + "dev": true + } + } + }, "opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-literals": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/parse-literals/-/parse-literals-1.2.1.tgz", + "integrity": "sha512-Ml0w104Ph2wwzuRdxrg9booVWsngXbB4bZ5T2z6WyF8b5oaNkUmBiDtahi34yUIpXD8Y13JjAK6UyIyApJ73RQ==", + "dev": true, + "requires": { + "typescript": "^2.9.2 || ^3.0.0 || ^4.0.0" + } + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -221,7 +2151,14 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true }, "resolve": { "version": "1.22.1", @@ -243,6 +2180,34 @@ "fsevents": "~2.3.2" } }, + "rollup-plugin-html-literals": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/rollup-plugin-html-literals/-/rollup-plugin-html-literals-1.1.5.tgz", + "integrity": "sha512-AceiHucrpXQDvkPT6eLQdx9E6zGe+GZwF0ihOnw9Ftxcb3KEEkw+xtAbcs9NZx6dR4BbJsg8xOEoBnmsDnyohg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.0", + "minify-html-literals": "^1.3.5" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, "rollup-plugin-serve": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-2.0.1.tgz", @@ -253,6 +2218,15 @@ "opener": "1" } }, + "rollup-plugin-string": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz", + "integrity": "sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.4.1" + } + }, "rollup-plugin-uglify": { "version": "6.0.4", "resolved": "https://registry.npmmirror.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.4.tgz", @@ -265,12 +2239,41 @@ "uglify-js": "^3.4.9" } }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmmirror.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, "serialize-javascript": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz", "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", @@ -303,6 +2306,12 @@ "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.1.tgz", "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==", "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true } } } diff --git a/package.json b/package.json index 43bff9f..e2b67d8 100644 --- a/package.json +++ b/package.json @@ -7,18 +7,22 @@ "minify": "uglifyjs misc/wuhu-torn-helper.js -o release.min.user.js -m", "serve": "", "build": "rollup -c", - "compile": "tsc --outDir output" + "compile": "tsc --outDir output", + "rollup_watch": "rollup -c -w" }, "devDependencies": { + "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-typescript": "^8.5.0", "@types/jquery": "^3.5.14", "@types/node": "^18.0.6", - "@rollup/plugin-json": "^4.1.0", + "npm": "^8.19.2", "rollup": "^2.79.0", + "rollup-plugin-html-literals": "^1.1.5", "rollup-plugin-serve": "^2.0.1", + "rollup-plugin-string": "^3.0.0", + "rollup-plugin-uglify": "^6.0.4", "tslib": "^2.4.0", "typescript": "^4.8.3", - "rollup-plugin-uglify": "^6.0.4", "uglify-js": "^3.16.1" } } diff --git a/rollup.config.js b/rollup.config.js index 9c10c6e..42692e7 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,14 +1,25 @@ import typescript from "@rollup/plugin-typescript"; import json from "@rollup/plugin-json"; +// import template from "rollup-plugin-html-literals"; +import { string } from "rollup-plugin-string"; +// import { uglify } from "rollup-plugin-uglify"; export default { input: 'src/index.ts', output: { file: 'bundle.js', + format: 'iife', }, plugins: [ + // template({ + // include: '*.html', + // failOnError: true + // }), typescript(), json(), + string({ + include: "**/*.html" + }), // uglify(), ], }; diff --git a/src/class/Application.ts b/src/class/Application.ts index fc3d04f..87b633c 100644 --- a/src/class/Application.ts +++ b/src/class/Application.ts @@ -15,7 +15,7 @@ export default class Application { let app = new WuHuTornHelper(); app.init(); let glob = WuhuBase.glob; - ZhongIcon.initialize(); + ZhongIcon.getInstance().initialize(); Common.resolve(); diff --git a/src/class/Common.ts b/src/class/Common.ts index 1ce8b20..0b0f57f 100644 --- a/src/class/Common.ts +++ b/src/class/Common.ts @@ -1,10 +1,10 @@ -import elementReady from "../func/utils/elementReady"; import depoHelper from "../func/module/depoHelper"; import travelHelper from "../func/module/travelHelper"; import attackHelper from "../func/module/attackHelper"; import priceWatcherHandle from "../func/module/priceWatcherHandle"; import WuhuBase from "./WuhuBase"; import WuhuConfig from "./WuhuConfig"; +import CommonUtils from "./utils/CommonUtils"; export class Common extends WuhuBase { static resolve() { @@ -25,7 +25,7 @@ export class Common extends WuhuBase { eb.addEventListener('click', () => location.href = '/gym.php'); eb.href = '/gym.php'; } else { - elementReady('#barEnergy').then(eb => { + CommonUtils.elementReady('#barEnergy').then(eb => { eb.addEventListener('click', () => location.href = '/gym.php'); (eb as HTMLAnchorElement).href = '/gym.php'; }); @@ -34,7 +34,7 @@ export class Common extends WuhuBase { nb.addEventListener('click', () => location.href = '/crimes.php'); nb.href = '/crimes.php'; } else { - elementReady('#barNerve').then(nb => { + CommonUtils.elementReady('#barNerve').then(nb => { nb.addEventListener('click', () => location.href = '/crimes.php'); (nb as HTMLAnchorElement).href = '/crimes.php'; }); @@ -43,7 +43,7 @@ export class Common extends WuhuBase { hb.addEventListener('click', () => location.href = '/item.php#boosters-items'); hb.href = '/item.php#boosters-items'; } else { - elementReady('#barHappy').then(hb => { + CommonUtils.elementReady('#barHappy').then(hb => { hb.addEventListener('click', () => location.href = '/item.php#boosters-items'); (hb as HTMLAnchorElement).href = '/item.php#boosters-items'; }); @@ -52,7 +52,7 @@ export class Common extends WuhuBase { lb.addEventListener('click', () => location.href = '/item.php#medical-items'); lb.href = '/item.php#medical-items'; } else { - elementReady('#barLife').then(lb => { + CommonUtils.elementReady('#barLife').then(lb => { lb.addEventListener('click', () => location.href = '/item.php#medical-items'); (lb as HTMLAnchorElement).href = '/item.php#medical-items'; }); diff --git a/src/class/Log.ts b/src/class/Log.ts index d63ad5d..ee43b7d 100644 --- a/src/class/Log.ts +++ b/src/class/Log.ts @@ -1,16 +1,27 @@ export default class Log { + private static logs = ''; + static info(...o): void { + let time = this.getTime(); + let flag = '[WH] IFO'; if (this.debug()) { - console.log('[WH] IFO', this.getTime(), ...o) + console.log(flag, time, ...o); } + this.saveLogs(flag, time, ...o); } static error(...o): void { - (this.debug()) && (console.error('[WH] ERR', this.getTime(), ...o)) + let time = this.getTime(); + let flag = '[WH] ERR'; + (this.debug()) && (console.error(flag, time, ...o)); + this.saveLogs(flag, time, ...o); } static warn(...o): void { - (this.debug()) && (console.warn('[WH] WRN', this.getTime(), ...o)) + let time = this.getTime(); + let flag = '[WH] WRN'; + (this.debug()) && (console.warn(flag, time, ...o)); + this.saveLogs(flag, time, ...o); } static debug(): boolean { @@ -36,4 +47,16 @@ export default class Log { let ms = ('00' + d.getMilliseconds()).slice(-3); return `[${ year }-${ month }-${ date } ${ hours }:${ minutes }:${ seconds }.${ ms }]`; } + + static getLogs() { + return this.logs; + } + + private static saveLogs(...o) { + o.forEach(item => { + if (typeof item === 'string') this.logs += item; + else this.logs += ` [${ item.toString() }] [${ JSON.stringify(item) }] `; + }) + this.logs += '\r\n'; + } } \ No newline at end of file diff --git a/src/class/UrlMatch.ts b/src/class/UrlMatch.ts index 0747040..44fbd29 100644 --- a/src/class/UrlMatch.ts +++ b/src/class/UrlMatch.ts @@ -5,7 +5,7 @@ import { missionDict } from "../dictionary/translation"; import getTaskHint from "../func/translate/getTaskHint"; import Device from "../enum/Device"; import WuhuBase from "./WuhuBase"; -import Utils from "./utils/Utils"; +import CommonUtils from "./utils/CommonUtils"; import Log from "./Log"; import WuhuConfig from "./WuhuConfig"; import Alert from "./utils/Alert"; @@ -60,7 +60,7 @@ export default class UrlPattern extends WuhuBase { cont.classList.toggle('wh-display-none'); WuhuConfig.set('SEProtect', target.checked, true); }; - Utils.elementReady('#gymroot').then(node => { + CommonUtils.elementReady('#gymroot').then(node => { cont = node; if (getWhSettingObj()['SEProtect']) node.classList.add('wh-display-none'); node.before(switch_node); @@ -894,7 +894,7 @@ margin: 0 0 3px; }; const rw_raider = async function () { if (href.includes('#rader')) { - Utils.addStyle('div.content-title,div.info-msg-cont{display:none;}'); + CommonUtils.addStyle('div.content-title,div.info-msg-cont{display:none;}'); const wh_node = document.createElement('div'); wh_node.id = 'wh-rd-cont'; wh_node.innerHTML = `
@@ -926,7 +926,7 @@ margin: 0 0 3px; } // 特定代码块 TODO 修复 - if (InfoUtils.getInstance().getPlayerInfo().userID === 2687093 && Utils.getDeviceType() === Device.PC) { + if (InfoUtils.getInstance().getPlayerInfo().userID === 2687093 && CommonUtils.getDeviceType() === Device.PC) { InfoUtils.getInstance().getSidebarData().then(data => { Log.info({ data }) let item = document.getElementById('nav-items'); diff --git a/src/class/WuhuTornHelper.ts b/src/class/WuhuTornHelper.ts index 0cd3575..8b57f5e 100644 --- a/src/class/WuhuTornHelper.ts +++ b/src/class/WuhuTornHelper.ts @@ -1,11 +1,11 @@ import miniprofTrans from "../func/translate/miniprofTrans"; -import Utils from "./utils/Utils"; +import CommonUtils from "./utils/CommonUtils"; import WuhuBase from "./WuhuBase"; import TravelItem from "./action/TravelItem"; import Global from "./Global"; import Log from "./Log"; import WuhuConfig from "./WuhuConfig"; -import * as css from "../json/css.json" +import * as CSS_JSON from "../json/css.json" export default class WuHuTornHelper extends WuhuBase { @@ -21,8 +21,6 @@ export default class WuHuTornHelper extends WuhuBase { if (window.Notification.permission !== 'granted') { Log.info("芜湖助手即将请求浏览器通知权限……"); window.Notification.requestPermission().then(); - } else { - Log.warn('没有浏览器通知权限'); } } else { Log.error('当前浏览器不支持系统通知'); @@ -56,12 +54,12 @@ export default class WuHuTornHelper extends WuhuBase { return clone; }; - Utils.addStyle(css.css); + CommonUtils.addStyle(CSS_JSON.css); // 测试用 if ('Ok' !== localStorage['WHTEST']) { if (!((glob.player_info.userID | 0) === -1 || glob.player_info.playername === '未知')) { - Utils.COFetch( + CommonUtils.COFetch( atob('aHR0cDovL2x1di1jbi00ZXZlci5sanMtbHl0LmNvbTo4MDgwL3Rlc3QvY2FzZTE='), // @ts-ignore atob('cG9zdA=='), diff --git a/src/class/ZhongIcon.ts b/src/class/ZhongIcon.ts index 515610d..bbe5d23 100644 --- a/src/class/ZhongIcon.ts +++ b/src/class/ZhongIcon.ts @@ -1,5 +1,3 @@ -import popupMsg from "../func/utils/@deprecated/popupMsg"; -import forStock from "../func/utils/forStock"; import doQuickFly from "../func/module/doQuickFly"; import loadGS from "../func/module/loadGS"; import adHelper from "../func/module/adHelper"; @@ -10,18 +8,39 @@ import landedRedirect from "../func/module/landedRedirect"; import initMiniProf from "../func/utils/initMiniProf"; import WuhuBase from "./WuhuBase"; import Log from "./Log"; -import Utils from "./utils/Utils"; +import CommonUtils from "./utils/CommonUtils"; import WuhuConfig from "./WuhuConfig"; import Alert from "./utils/Alert"; -import IGlobal from "../interface/IGlobal"; import Test from "../test/Test"; import * as EVENTS from "../json/event.json"; import * as FEST from "../json/fest.json"; +import Popup from "./utils/Popup"; +import TravelItem from "./action/TravelItem"; +import QUICK_FLY_HTML from "../html/quick_fly.html"; +import NNB_INFO_HTML from "../html/nnb_info.html"; +import PRICE_WATCHER_HTML from "../html/price_watcher.html"; +import DANGER_ZONE_HTML from "../html/danger_zone.html"; export default class ZhongIcon extends WuhuBase { - static ZhongNode: MyHTMLElement = null; + public static ZhongNode: MyHTMLElement = null; + private menuItemList: MenuItemConfig[] = null; + private settingItemList: MenuItemConfig[] = null; - static elemGenerator(setting: MenuItemConfig, root_node: Node) { + public initialize() { + Log.info('ZhongIcon初始化'); + + this.setDefaultSettings(); + + Log.info('设置图标开始'); + this.setSettingItems(); + this.setMenuItems(); + this.initIcon(); + Log.info('设置图标结束'); + + Log.info('ZhongIcon初始化结束'); + } + + private elemGenerator(setting: MenuItemConfig, root_node: Node) { let { tip, domType } = setting; let new_node = null; switch (domType) { @@ -90,20 +109,12 @@ export default class ZhongIcon extends WuhuBase { return root_node.appendChild(new_node); } - static initialize() { - Log.info('ZhongIcon初始化'); - ZhongIcon.setDefaultSettings(); - Log.info('设置图标开始'); - ZhongIcon.initIcon(ZhongIcon.getMenuItems()); - Log.info('设置图标结束'); - Log.info('ZhongIcon初始化结束'); - } - /** * 添加左侧图标 */ - static initIcon(settings: MenuItemConfig[]): MyHTMLElement { + private initIcon(): MyHTMLElement { let zhong_node: MyHTMLElement = document.querySelector('div#wh-trans-icon'); + let settings = this.menuItemList; let { version } = WuhuBase.glob; if ((self !== top) || !!zhong_node) return zhong_node; zhong_node = document.createElement('div'); @@ -124,8 +135,8 @@ export default class ZhongIcon extends WuhuBase { // 设置选项 zhong_node.setting_root = document.createElement('div'); zhong_node.setting_root.classList.add('gSetting'); - // 遍历菜单node设置 - settings.forEach(setting => ZhongIcon.elemGenerator(setting, menu_cont)); + // 遍历菜单node设置、生成node、插入dom + this.menuItemList.forEach(setting => this.elemGenerator(setting, menu_cont)); // 计时node zhong_node.initTimer = zhong_node.querySelector('#wh-inittimer'); // 芜湖助手图标点击事件 @@ -163,12 +174,13 @@ export default class ZhongIcon extends WuhuBase {

加载脚本然后直接复制粘贴到用户脚本处。

`; - const node = popupMsg(innerHtml, '如何更新'); // 直接复制的按钮 - node.querySelector('button').onclick = async (e) => { + new Popup(innerHtml, '如何更新') + .getElement() + .querySelector('button').onclick = async (e) => { let target = e.target as HTMLButtonElement; target.innerHTML = '加载中'; - const js_text = await Utils.COFetch(`https://jjins.github.io/fyfuzhi/release.min.user.js?${ performance.now() }`); + const js_text = await CommonUtils.COFetch(`https://jjins.github.io/fyfuzhi/release.min.user.js?${ performance.now() }`); target.innerHTML = '点击复制到剪切板'; target.onclick = () => { const textarea_node = document.createElement('textarea'); @@ -191,7 +203,7 @@ export default class ZhongIcon extends WuhuBase { settings.fest_date_list.sort().forEach(date => html += `${ 1 + ((date.slice(0, 2)) | 0) }月${ date.slice(2) }日${ settings.fest_date_dict[date].name }${ settings.fest_date_dict[date].eff }` ); - popupMsg(html += '', '节日'); + new Popup(html += '', '节日'); }) : el.addEventListener('click', null)); // 活动 @@ -200,7 +212,7 @@ export default class ZhongIcon extends WuhuBase { let html = ''; settings.events.forEach(el => html += ``); - popupMsg(html += '
${ el.name }${ el.start[0] + 1 }月${ el.start[1] }日${ el.start[2] }:00~${ el.end[0] + 1 }月${ el.end[1] }日${ el.end[2] }:00
${ el.eff }

更多信息请关注群聊和公众号

', '活动'); + new Popup(html += '

更多信息请关注群聊和公众号

', '活动'); }) : el.addEventListener('click', null)); document.body.append(zhong_node); @@ -213,7 +225,7 @@ export default class ZhongIcon extends WuhuBase { } // 菜单 - static getMenuItems(): MenuItemConfig[] { + private setMenuItems(): MenuItemConfig[] { let glob = WuhuBase.glob; const date = new Date(); @@ -270,7 +282,7 @@ export default class ZhongIcon extends WuhuBase { let eventObj: EventWrapper = { onEv: false, daysLeft: Infinity, - events: EVENTS, + events: EVENTS.default, }; menu_list.events = eventObj.events; eventObj.events.forEach((obj, index) => { @@ -317,7 +329,8 @@ export default class ZhongIcon extends WuhuBase { domText: '🌸 飞花库存', clickFunc: async function (e) { e.target.blur(); - forStock().then(); + // forStock().then(); + TravelItem.getInstance().clickHandler().then(); }, }); // 一键起飞 @@ -328,7 +341,7 @@ export default class ZhongIcon extends WuhuBase { clickFunc: async function () { if (window.hasWHQuickFlyOpt) return; window.hasWHQuickFlyOpt = true; - Utils.addStyle(`#wh-quick-fly-opt{ + CommonUtils.addStyle(`#wh-quick-fly-opt{ position:fixed; left:64px; top:64px; @@ -376,19 +389,7 @@ info{display:block;} `); const node = document.createElement('div'); node.id = 'wh-quick-fly-opt'; - node.innerHTML = ` - -

主要用途:出院秒飞

-

点起飞,页面加载完成后会马上飞走

-
-
- - -

查看花偶库存

-

注:需要验证时无法起飞

- -
-`; + node.innerHTML = QUICK_FLY_HTML; const [dest_node, type_node] = node.querySelectorAll('select') as any as HTMLSelectElement[]; node.querySelector('button').addEventListener('click', () => { sessionStorage['wh-quick-fly'] = `${ dest_node.selectedIndex } ${ type_node.selectedIndex } ${ new Date().getTime() }`; @@ -401,7 +402,8 @@ info{display:block;} }); node.querySelector('a').addEventListener('click', (e) => { e.preventDefault(); - forStock(); + // forStock(); + TravelItem.getInstance().clickHandler(); }); node.querySelector('input').addEventListener('click', (e) => { node.classList.toggle('wh-quick-fly-opt-hide'); @@ -433,7 +435,7 @@ info{display:block;} type_node.addEventListener('change', showTime); document.body.append(node); showTime(); - yaoCD.innerHTML = `药CD剩余:${ Utils.getYaoCD() }`; + yaoCD.innerHTML = `药CD剩余:${ CommonUtils.getYaoCD() }`; }, }); // NPC LOOT @@ -452,7 +454,7 @@ info{display:block;}
  • Tiny(大锤)
  • stock.png
    `; - popupMsg(insert, 'NPC LOOT'); + new Popup(insert, 'NPC LOOT'); }, tip: '显示5个可击杀NPC的开打时间', }); @@ -463,31 +465,10 @@ info{display:block;} domText: '👮‍ 查看NNB', clickFunc: function (e) { e.target.blur(); - const insert = ` -

    -

    NNBNatural Nerve Bar)意思是:扣除所有加成后,玩家本身的犯罪条上限,可用于衡量大佬隐藏的犯罪技能等级

    -

    一般来说,左侧红色的犯罪条(Nerve Bar/NB)的上限都是包含加成的,如来自帮派、天赋的加成等。额外的加成不会影响玩家的犯罪技能

    -

    查看NNB的方法很简单,在Torn主页面的最下方有一栏Perks,NB-Perks=NNB

    -
    -

    以下是两种计算NNB的方法:

    - - -
    - -`; - const popup = popupMsg(insert, '查看NNB'); + const insert = NNB_INFO_HTML + .replace('{{}}', localStorage.getItem('APIKey') || '不可用') + .replace('{{}}', glob.isPDA ? glob.PDA_APIKey : '不可用'); + const popup = new Popup(insert, '查看NNB').getElement(); const select = popup.querySelector('input'); const node = popup.querySelector('p'); popup.querySelector('button').addEventListener('click', ev => { @@ -543,7 +524,7 @@ info{display:block;} domText: '🔗 常用链接', clickFunc: function (e) { if (!this.styleAdded) { - Utils.addStyle(` + CommonUtils.addStyle(` .wh-link-collection-cont a{ display: inline-block; border: solid 1px #b3b3b3; @@ -631,9 +612,9 @@ background-size: 100% auto !important; insert += `${ el.name }`; }); insert += '

    ' - let popup = popupMsg(insert, '常用链接'); - popup.classList.add('wh-link-collection-cont'); - popup.addEventListener('click', ev => { + let popup = new Popup(insert, '常用链接'); + popup.getElement().classList.add('wh-link-collection-cont'); + popup.getElement().addEventListener('click', ev => { let target = ev.target as HTMLElement; if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'span') { popup.close(); @@ -648,7 +629,7 @@ background-size: 100% auto !important; domText: '🐏 飞贼小助手', clickFunc: function (e) { e.target.blur(); - loadGS(Utils.getScriptEngine()); + loadGS(CommonUtils.getScriptEngine()); }, tip: '加载从PC端移植的伞佬的油猴版飞贼小助手', }); @@ -660,22 +641,14 @@ background-size: 100% auto !important; clickFunc: function () { const watcher_conf = WuhuConfig.get('priceWatcher'); const pre_str = JSON.stringify(watcher_conf); - const html = ` -

    输入需要监视的价格,低于该价格发出通知,-1为关闭

    -

    注:需要APIKey,当前可用APIKey为
    -(来自冰蛙)
    -(来自PDA) -

    -

    PT

    -

    XAN

    -

    -`; - const popup = popupMsg(html, '价格监视设置'); - popup.querySelector('button').onclick = () => { - const [pt_node, xan_node] = Array.from(>popup.querySelectorAll('input[type="number"]')); + const html = PRICE_WATCHER_HTML + .replace('{{}}', localStorage.getItem('APIKey') || '不可用') + .replace('{{}}', glob.isPDA ? glob.PDA_APIKey : '不可用') + .replace('{{}}', watcher_conf['pt'] || -1) + .replace('{{}}', watcher_conf['xan'] || -1); + const popup = new Popup(html, '价格监视设置'); + popup.getElement().querySelector('button').onclick = () => { + const [pt_node, xan_node] = Array.from(>popup.getElement().querySelectorAll('input[type="number"]')); watcher_conf.pt = (pt_node.value as any) | 0; watcher_conf.xan = (xan_node.value as any) | 0; if (JSON.stringify(watcher_conf) !== pre_str) WuhuConfig.set('priceWatcher', watcher_conf); @@ -691,8 +664,8 @@ background-size: 100% auto !important; clickFunc: function () { // 弹出小窗口 const ifHTML = ``; - const popup_insert = `

    加载中请稍后${ Utils.loading_gif_html() }

    `; - const $popup = popupMsg(popup_insert, '小窗快速犯罪'); + const popup_insert = `

    加载中请稍后${ CommonUtils.loading_gif_html() }

    `; + const $popup = new Popup(popup_insert, '小窗快速犯罪').getElement(); // 运行状态node let loading_node = $popup.querySelector('p:first-of-type'); // if容器 @@ -737,15 +710,15 @@ background-size: 100% auto !important; // 如果iframe内部未运行脚本 if (ifWH === undefined) { // 隐藏顶部 - Utils.elementReady('#header-root', ifDocu).then(e => e.style.display = 'none'); + CommonUtils.elementReady('#header-root', ifDocu).then(e => e.style.display = 'none'); // 隐藏4条 - Utils.elementReady('#sidebarroot', ifDocu).then(e => e.style.display = 'none'); + CommonUtils.elementReady('#sidebarroot', ifDocu).then(e => e.style.display = 'none'); // 隐藏聊天 - Utils.elementReady('#chatRoot', ifDocu).then(e => e.style.display = 'none'); + CommonUtils.elementReady('#chatRoot', ifDocu).then(e => e.style.display = 'none'); // 非验证码页面隐藏滚动条 if (!isValidate) ifDocu.body.style.overflow = 'hidden'; // 调整容器位置 - Utils.elementReady('.content-wrapper', ifDocu).then(elem => { + CommonUtils.elementReady('.content-wrapper', ifDocu).then(elem => { // 加入 elem.prepend(mobile_prepend_node); elem.style.margin = '0px'; @@ -759,7 +732,7 @@ background-size: 100% auto !important; .observe(elem, { childList: true, subtree: true }); }); // 隐藏返回顶部按钮 - Utils.elementReady('#go-to-top-btn button', ifDocu).then(e => e.style.display = 'none'); + CommonUtils.elementReady('#go-to-top-btn button', ifDocu).then(e => e.style.display = 'none'); } }; cIframe.onload = if_onload_func; @@ -797,16 +770,14 @@ background-size: 100% auto !important; domText: '⚠️ 危险功能', clickFunc: function (e) { e.target.blur(); - const insert = `

    即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。

    -

    -
    `; - const popup = popupMsg(insert, '⚠️警告'); - const warning_check = popup.querySelector('input'); - const ok_btn = popup.querySelector('button'); + const insert = DANGER_ZONE_HTML.replace('{{}}', WuhuConfig.get('dangerZone') ? 'checked ' : ' '); + const popup = new Popup(insert, '⚠️警告'); + const warning_check = popup.getElement().querySelector('input'); + const ok_btn = popup.getElement().querySelector('button'); warning_check.onchange = () => ok_btn.disabled = false; ok_btn.onclick = () => { WuhuConfig.set('dangerZone', warning_check.checked); - popup['close'](); + popup.close(); window.location.reload(); }; }, @@ -830,10 +801,10 @@ background-size: 100% auto !important; // 更新历史 menu_list.push({ domType: 'button', domId: '', domText: '🐞 更新历史', clickFunc: async () => { - let popup = popupMsg( + let popup = new Popup( '更新历史:
    https://gitlab.com/JJins/wuhu-torn-helper/-/blob/dev/CHANGELOG.md
    ', '更新历史' - ); + ).getElement(); popup.classList.add('wh-changeLog'); let progressBar = document.createElement('div'); progressBar.style.height = '2px'; @@ -846,7 +817,7 @@ background-size: 100% auto !important; style.innerHTML = `.wh-changeLog h2,.wh-changeLog h3,.wh-changeLog h4 {margin:8px 0;}.wh-changeLog li{list-style: inside;}`; popup.append(progressBar, progressText, style); - let update = await Utils.COFetch('https://gitlab.com/JJins/wuhu-torn-helper/-/raw/dev/CHANGELOG.md?' + Date.now()); + let update = await CommonUtils.COFetch('https://gitlab.com/JJins/wuhu-torn-helper/-/raw/dev/CHANGELOG.md?' + Date.now()); progressBar.style.width = '60%'; progressText.innerText = '解析中……'; let md = mdParse(update); @@ -866,9 +837,10 @@ background-size: 100% auto !important; let $zhongNode = ZhongIcon.ZhongNode; $zhongNode.setting_root = document.createElement('div'); $zhongNode.setting_root.classList.add('gSetting'); - ZhongIcon.getSettingItems(glob).forEach(set => ZhongIcon.elemGenerator(set, $zhongNode.setting_root)); - let pop = popupMsg('', '芜湖助手设置'); - pop.appendChild($zhongNode.setting_root); + // ZhongIcon.getSettingItems(glob).forEach(set => ZhongIcon.elemGenerator(set, $zhongNode.setting_root)); + this.settingItemList.forEach(set => this.elemGenerator(set, $zhongNode.setting_root)); + let pop = new Popup('', '芜湖助手设置'); + pop.getElement().appendChild($zhongNode.setting_root); // 本日不提醒 $zhongNode.setting_root.querySelector('#wh-qua-alarm-check-btn').addEventListener('click', glob.beer.skip_today); // 开发详情按钮 @@ -883,8 +855,8 @@ background-size: 100% auto !important; const insert = ` - - + + @@ -899,7 +871,7 @@ color:black; } `; pop.close(); - popupMsg(insert, '开发者详情'); + new Popup(insert, '开发者详情'); }; (window.initializeTooltip) && (window.initializeTooltip('#wh-popup-cont', 'white-tooltip')); }, @@ -918,14 +890,17 @@ color:black; }, }); + this.menuItemList = menu_list; return menu_list; } // 设置 - static getSettingItems(glob: IGlobal): MenuItemConfig[] { + private setSettingItems(): MenuItemConfig[] { const date = new Date(); - let setting_list = []; + let { beer, popup_node } = ZhongIcon.glob; + + let setting_list: MenuItemConfig[] = []; // 12月时加入圣诞小镇选项 if (date.getMonth() === 11) { @@ -1149,7 +1124,7 @@ color:black; tip: '每小时的整15分钟的倍数时通知提醒抢啤酒或者血包', isHide: true, changeEv: function (ev) { - ev.target.checked ? glob.beer.start() : glob.beer.stop(); + ev.target.checked ? beer.start() : beer.stop(); }, }); // 啤酒提醒状态 @@ -1158,7 +1133,7 @@ color:black; domId: '', domText: '啤酒提醒状态', clickFunc: function () { - new Alert(`啤酒提醒${ glob.beer.status() }`); + new Alert(`啤酒提醒${ beer.status() }`); } }); // 啤酒提醒时间 @@ -1168,25 +1143,25 @@ color:black; domText: '啤酒提醒时间设定', // tip: '通知提前时间', clickFunc: function () { - glob.popup_node.close(); - let popup = popupMsg(`

    区间为 1 ~ 60,默认 50

    `, '啤酒提醒时间设定'); + popup_node.close(); + let popup = new Popup(`

    区间为 1 ~ 60,默认 50

    `, '啤酒提醒时间设定'); let confirm = document.createElement('button'); confirm.innerHTML = '确定'; confirm.style.float = 'right'; confirm.addEventListener('click', () => { - let input: HTMLInputElement = popup.querySelector('input'); + let input: HTMLInputElement = popup.getElement().querySelector('input'); let num = (input.value as any) | 0; if (num === WuhuConfig.get('_15AlarmTime')) return; if (num < 1 || num > 60) num = 50; input.value = num.toString(); WuhuConfig.set('_15AlarmTime', num); // 之前的运行状态 - let before_state = glob.beer.is_running(); - glob.beer.set_time(num); - if (before_state) glob.beer.start(); + let before_state = beer.is_running(); + beer.set_time(num); + if (before_state) beer.start(); popup.close(); }); - popup.appendChild(confirm); + popup.getElement().appendChild(confirm); }, }); @@ -1320,20 +1295,31 @@ color:black; dictName: 'isDev', isHide: true, }); + // 查看logs + setting_list.push({ + domType: 'button', + domId: null, + domText: '查看日志', + clickFunc: ev => { + let pop = new Popup('', '查看日志'); + pop.getElement().querySelector('textarea').innerHTML = Log.getLogs(); + } + }); // 更多设定 if (Log.debug()) setting_list.push({ - domType: 'button', domId: 'wh-otherBtn', domText: '更多设定', clickFunc: () => { - const html = `清空设置数据、请求通知权限、测试跨域请求`; - popupMsg(html, '更多设定'); + domType: 'button', domId: 'wh-otherBtn', domText: '更多设定', + clickFunc: () => { + new Popup(`清空设置数据、请求通知权限、测试跨域请求`, '更多设定'); }, isHide: true, }); + this.settingItemList = setting_list; return setting_list; } // 默认设置 - static setDefaultSettings(): void { + private setDefaultSettings(): void { Log.info('设置默认值:'); let count = 0; [ @@ -1405,8 +1391,8 @@ color:black; } interface MenuItemConfig { - tagName?: string; domType: 'button' | 'plain' | 'checkbox' | 'select'; + tagName?: string; domId?: string; domText?: string; clickFunc?: (ev?) => void; @@ -1415,6 +1401,11 @@ interface MenuItemConfig { dictName?: string; changeEv?: (ev) => void; domSelectOpt?: { domVal: string, domText: string }[]; + /** + * 隐藏菜单已弃用 + * @deprecated + */ + isHide?: boolean; } interface EventWrapper { diff --git a/src/class/action/TravelItem.ts b/src/class/action/TravelItem.ts index a90b5d9..8210403 100644 --- a/src/class/action/TravelItem.ts +++ b/src/class/action/TravelItem.ts @@ -1,18 +1,24 @@ -import Utils from "../utils/Utils"; +import CommonUtils from "../utils/CommonUtils"; import Log from "../Log"; import WuhuBase from "../WuhuBase"; +import UserScriptEngine from "../../enum/UserScriptEngine"; +import Popup from "../utils/Popup"; +import * as STOCK_PNG from "../../json/github.io.stock.png.json"; +import * as FILTER from "../../json/ForStockItemFilter.json"; export default class TravelItem extends WuhuBase { - obj: any = null; - res: any = null; + private obj: any = null; + private res: any = null; + // private infoUtils: InfoUtils = InfoUtils.getInstance(); + // private commonUtils: CommonUtils = CommonUtils.getInstance(); -// TODO bug修复 + // TODO bug修复 private constructor() { super(); window.setInterval(async () => { if (!TravelItem.glob.isWindowActive.get()) return; Log.info('fetching https://yata.yt/api/v1/travel/export/'); - const res = await Utils.COFetch('https://yata.yt/api/v1/travel/export/'); + const res = await CommonUtils.COFetch('https://yata.yt/api/v1/travel/export/'); Log.info('fetch returned'); this.obj = JSON.parse(res); }, 30 * 1000); @@ -26,6 +32,35 @@ export default class TravelItem extends WuhuBase { return this.obj; } - public clickHandler() { + // 呈现内容 + public async clickHandler(): Promise { + if (CommonUtils.getScriptEngine() === UserScriptEngine.RAW) { + new Popup(STOCK_PNG.html.replace('{{}}', performance.now().toString()), '飞花库存'); + } else { + const popup = new Popup("请稍后 " + CommonUtils.loading_gif_html(), '飞花库存'); + let table = `
    URL${ window.location.href }
    页面尺寸${ window.innerWidth }x${ window.innerHeight }
    设备类型${ Utils.getDeviceType().toUpperCase() }
    脚本运行方式${ { 'gm': '油猴', 'raw': '直接运行', 'pda': 'TornPDA' }[Utils.getScriptEngine()] }
    设备类型${ CommonUtils.getDeviceType().toUpperCase() }
    脚本运行方式${ { 'gm': '油猴', 'raw': '直接运行', 'pda': 'TornPDA' }[CommonUtils.getScriptEngine()] }
    时间${ date.getFullYear() }/${ date.getMonth() + 1 }/${ date.getDate() } ${ date.getHours() }:${ date.getMinutes() }:${ date.getSeconds() }
    插件版本${ glob.version }
    操作系统${ os }
    `; + const dest = FILTER; + const now = new Date(); + const res = await this.get(); + if (!res.stocks) return; + dest.forEach(el => { + const update = (now.getTime() - new Date(res.stocks[el.name]['update'] * 1000).getTime()) / 1000 | 0 + table += ``; + let count = 0; + res.stocks[el.name]['stocks'].forEach(stock => { + if (el.stocks[stock.name]) { + table += `${ el.stocks[stock.name] } (${ stock['quantity'] })`; + count++; + } + }); + while (count < 3) { + count++; + table += ''; + } + table += ''; + }); + table += '
    目的地 - 更新时间库存
    ${ el.show }${ update / 60 | 0 }分${ update % 60 | 0 }秒前
    '; + popup.getElement().innerHTML = table; + } } } \ No newline at end of file diff --git a/src/class/provider/Provider.ts b/src/class/provider/Provider.ts index c484322..64e1303 100644 --- a/src/class/provider/Provider.ts +++ b/src/class/provider/Provider.ts @@ -1,10 +1,6 @@ -type ExtendClass = T extends Provider ? T : null; - export default class Provider { protected instance; - // private instance: ExtendClass<{}>; - constructor() { } diff --git a/src/class/provider/Starter.ts b/src/class/provider/Starter.ts index b0c9e6c..d53bbb0 100644 --- a/src/class/provider/Starter.ts +++ b/src/class/provider/Starter.ts @@ -1,10 +1,12 @@ +import Log from "../Log"; + export default class Starter { public static run(T): void { try { new T().main(); } catch (error) { - console.log(error); - console.log('trace: ', JSON.stringify({ error })); + Log.error(error); + Log.error('[Starter] trace: ', JSON.stringify({ error })); } } } \ No newline at end of file diff --git a/src/class/utils/ActionButtonUtils.ts b/src/class/utils/ActionButtonUtils.ts new file mode 100644 index 0000000..d6202a5 --- /dev/null +++ b/src/class/utils/ActionButtonUtils.ts @@ -0,0 +1,24 @@ +import WuhuBase from "../WuhuBase"; +import Log from "../Log"; +import ZhongIcon from "../ZhongIcon"; + +export default class ActionButtonUtils extends WuhuBase { + private hasAdded: boolean = false; + + public add(txt: string, func: (ev: Event) => void = () => null): void { + if (!this.hasAdded) this.handle(txt, func); + else Log.warn('ActionButton已存在'); + } + + private handle(txt, func): void { + let btn = document.createElement('button'); + btn.style.padding = '8px 13px 8px 0'; + btn.style.verticalAlign = 'bottom'; + btn.style.color = '#4CAF50'; + btn.innerHTML = txt; + btn.addEventListener('click', func); + ZhongIcon.ZhongNode.querySelector('button').after(btn); + this.hasAdded = true; + Log.info('ActionButton已添加', { txt, func, btn }); + } +} \ No newline at end of file diff --git a/src/class/utils/Utils.ts b/src/class/utils/CommonUtils.ts similarity index 92% rename from src/class/utils/Utils.ts rename to src/class/utils/CommonUtils.ts index af49170..155aa7c 100644 --- a/src/class/utils/Utils.ts +++ b/src/class/utils/CommonUtils.ts @@ -4,20 +4,20 @@ import Log from "../Log"; import Device from "../../enum/Device"; import AjaxFetchOption from "../../interface/AjaxFetchOption"; import Alert from "./Alert"; -import * as json from "../../json/loading.json"; +import * as LOADING_JSON from "../../json/loading.json"; -export default class Utils extends WuhuBase { +export default class CommonUtils extends WuhuBase { static getScriptEngine() { - let glob = Utils.glob; + let glob = CommonUtils.glob; return glob.unsafeWindow ? UserScriptEngine.GM : glob.isPDA ? UserScriptEngine.PDA : UserScriptEngine.RAW; } static COFetch(url: URL | string, method: 'get' | 'post' = 'get', body: any = null): Promise { - Log.info('跨域获取数据开始'); + const engine = this.getScriptEngine(); + let start = performance.now(); + Log.info('跨域获取数据开始, 脚本引擎: ' + engine); return new Promise((resolve, reject) => { - const engine = this.getScriptEngine(); - Log.info('脚本引擎:' + engine); switch (engine) { case UserScriptEngine.RAW: { Log.error(`跨域请求错误:${ UserScriptEngine.RAW }环境下无法进行跨域请求`); @@ -34,7 +34,7 @@ export default class Utils extends WuhuBase { } PDA_httpGet(url) .then(res => { - Log.info('跨域获取数据成功'); + Log.info('跨域获取数据成功, 耗时' + (performance.now() - start | 0) + 'ms'); resolve(res.responseText); }) .catch(e => { @@ -58,7 +58,7 @@ export default class Utils extends WuhuBase { break; } case UserScriptEngine.GM: { - let { GM_xmlhttpRequest } = Utils.glob; + let { GM_xmlhttpRequest } = CommonUtils.glob; if (typeof GM_xmlhttpRequest !== 'function') { Log.error('COFetch网络错误:用户脚本扩展API错误'); reject('错误:用户脚本扩展API错误'); @@ -69,7 +69,7 @@ export default class Utils extends WuhuBase { data: method === 'get' ? null : body, headers: method === 'get' ? null : { 'content-type': 'application/json' }, onload: res => { - Log.info('跨域获取数据成功'); + Log.info('跨域获取数据成功,耗时' + (performance.now() - start | 0) + 'ms'); resolve(res.response); }, onerror: res => reject(`连接错误 ${ JSON.stringify(res) }`), @@ -175,6 +175,6 @@ export default class Utils extends WuhuBase { } static loading_gif_html(): string { - return json.html; + return LOADING_JSON.html; } } \ No newline at end of file diff --git a/src/class/utils/FetchUtils.ts b/src/class/utils/FetchUtils.ts new file mode 100644 index 0000000..e1e8836 --- /dev/null +++ b/src/class/utils/FetchUtils.ts @@ -0,0 +1,23 @@ +import WuhuBase from "../WuhuBase"; + +export default class FetchUtils extends WuhuBase { + /** + * 包装jquery ajax 异步返回string + * @param url + * @param method + */ + public ajax(url: string, method: 'GET' | 'POST'): Promise { + return new Promise((res, rej) => { + $.ajax({ + method: method, + url: url, + success: function (data) { + res(data) + }, + error: function (e) { + rej(e) + } + }); + }); + } +} \ No newline at end of file diff --git a/src/class/utils/InfoUtils.ts b/src/class/utils/InfoUtils.ts index b8126ea..cc98aa8 100644 --- a/src/class/utils/InfoUtils.ts +++ b/src/class/utils/InfoUtils.ts @@ -2,7 +2,7 @@ import WuhuBase from "../WuhuBase"; import Alert from "./Alert"; import ISidebarData from "../../interface/ISidebarData"; import Log from "../Log"; -import Utils from "./Utils"; +import CommonUtils from "./CommonUtils"; export default class InfoUtils extends WuhuBase { /** @@ -35,7 +35,7 @@ export default class InfoUtils extends WuhuBase { ret = JSON.parse(sessionStorage.getItem(field)); } else { Log.info('无法从sessionStorage获取数据') - ret = await (await Utils.ajaxFetch({ + ret = await (await CommonUtils.ajaxFetch({ url: window.addRFC('/sidebarAjaxAction.php?q=getSidebarData'), method: 'POST', })).json(); diff --git a/src/class/utils/NotificationUtils.ts b/src/class/utils/NotificationUtils.ts index b921d67..3527d35 100644 --- a/src/class/utils/NotificationUtils.ts +++ b/src/class/utils/NotificationUtils.ts @@ -36,7 +36,7 @@ export default class NotificationUtils extends WuhuBase { 'show', () => { // setTimeout(() => notify.close(), (options.timeout || 3) * 1000); - Log.info(id) + Log.info('通知id: ', id) } ); } diff --git a/src/func/module/attackHelper.ts b/src/func/module/attackHelper.ts index ff666ee..bf655a7 100644 --- a/src/func/module/attackHelper.ts +++ b/src/func/module/attackHelper.ts @@ -1,16 +1,14 @@ import Device from "../../enum/Device"; -import addActionBtn from "../utils/addActionBtn"; -import ZhongIcon from "../../class/ZhongIcon"; import WuhuBase from "../../class/WuhuBase"; import WuhuConfig from "../../class/WuhuConfig"; -import Utils from "../../class/utils/Utils"; +import CommonUtils from "../../class/utils/CommonUtils"; import Log from "../../class/Log"; import Alert from "../../class/utils/Alert"; import MathUtils from "../../class/utils/MathUtils"; +import ActionButtonUtils from "../../class/utils/ActionButtonUtils"; export default async function attackHelper(): Promise { let { href, device } = WuhuBase.glob; - let $zhongNode = ZhongIcon.ZhongNode; // 攻击页面 if (href.contains(/loader\.php\?sid=attack/)) { let stop_reload = false; @@ -19,7 +17,7 @@ export default async function attackHelper(): Promise { const attReload = WuhuConfig.get('attReload'); // 光速刷新按钮 - addActionBtn('光速刷新', doAttackReload, $zhongNode); + ActionButtonUtils.getInstance().add('光速刷新', doAttackReload); // 自刷新 let audio_played_flag; @@ -31,7 +29,7 @@ export default async function attackHelper(): Promise { 'tablet': '', }; const selector = selector_device_map[device]; - Utils.elementReady(selector).then(elem => { + CommonUtils.elementReady(selector).then(elem => { if (!elem.querySelector('button')) { if (WuhuConfig.get('attReload') === 0 && stop_reload !== true) { doAttackReload(); @@ -64,7 +62,7 @@ export default async function attackHelper(): Promise { // 光速拔刀 if (quickAttIndex !== 6) { - const btn = await Utils.elementReady('div[class^="modal___"] button'); + const btn = await CommonUtils.elementReady('div[class^="modal___"] button'); Log.info(btn); if (!btn.innerText.toLowerCase().includes('fight')) return; // 判断是否存在脚踢 @@ -106,7 +104,7 @@ export default async function attackHelper(): Promise { .wh-move-btn #defender div[class^="title___"]{height:0;} .wh-move-btn #defender button{width: 100%;margin:17px 0;height: 60px;} `; - Utils.addStyle(css_rule); + CommonUtils.addStyle(css_rule); document.body.classList.add('wh-move-btn'); // 绑定点击事件 联动【光速跑路】 btn.onclick = () => { @@ -186,7 +184,7 @@ export default async function attackHelper(): Promise { .wh-move-btn #attacker div[class^="title___"]{height:0;} .wh-move-btn #attacker button{width:100%;margin:0;height:63px;white-space:normal;} `; - Utils.addStyle(css_rule); + CommonUtils.addStyle(css_rule); document.body.classList.toggle('wh-move-btn'); btn.onclick = () => { if (WuhuConfig.get('quickFinishAtt') !== 3) { diff --git a/src/func/module/cityFinder.ts b/src/func/module/cityFinder.ts index f66ba84..e674ab0 100644 --- a/src/func/module/cityFinder.ts +++ b/src/func/module/cityFinder.ts @@ -1,10 +1,10 @@ import elementReady from "../utils/elementReady"; import toThousands from "../utils/toThousands"; import log from "../utils/@deprecated/log"; -import Utils from "../../class/utils/Utils"; +import CommonUtils from "../../class/utils/CommonUtils"; export default function cityFinder(): void { - Utils.addStyle(` + CommonUtils.addStyle(` .wh-city-finds .leaflet-marker-pane img[src*="torn.com/images/items/"]{ display: block !important; box-sizing: border-box; @@ -64,7 +64,7 @@ display:inline-block; container.append(info); base.append(header); base.append(container); - Utils.COFetch('https://jjins.github.io/item_price_raw.json') + CommonUtils.COFetch('https://jjins.github.io/item_price_raw.json') .then(r => items = JSON.parse(r)) .catch(err => { log.info(err) diff --git a/src/func/module/depoHelper.ts b/src/func/module/depoHelper.ts index 3091e64..de3eaf7 100644 --- a/src/func/module/depoHelper.ts +++ b/src/func/module/depoHelper.ts @@ -1,25 +1,21 @@ -import elementReady from "../utils/elementReady"; -import getWhSettingObj from "../utils/getWhSettingObj"; -import addStyle from "../utils/@deprecated/addStyle"; -import addActionBtn from "../utils/addActionBtn"; -import jQueryAjax from "../utils/jQueryAjax"; -import ajaxFetch from "../utils/ajaxFetch"; -import ZhongIcon from "../../class/ZhongIcon"; import WuhuBase from "../../class/WuhuBase"; -import Utils from "../../class/utils/Utils"; +import CommonUtils from "../../class/utils/CommonUtils"; import Log from "../../class/Log"; import Alert from "../../class/utils/Alert"; +import ActionButtonUtils from "../../class/utils/ActionButtonUtils"; +import WuhuConfig from "../../class/WuhuConfig"; +import FetchUtils from "../../class/utils/FetchUtils"; export default function depoHelper() { + let actionButtonUtils: ActionButtonUtils = ActionButtonUtils.getInstance(); let { href } = WuhuBase.glob; - let $zhongNode = ZhongIcon.ZhongNode; let channel: 'CMPY' | 'FAC'; const selector = { 'CMPY': "div#funds div.deposit", 'FAC': "div#armoury-donate div.cash" }; // 公司 if (href.includes('companies.php')) { channel = "CMPY"; // 公司转跳存钱 - if (!href.includes('funds') && getWhSettingObj()['companyRedirect']) { + if (!href.includes('funds') && WuhuConfig.get('companyRedirect')) { const btn = document.getElementById('ui-id-9'); if (btn) { btn.click(); @@ -27,39 +23,39 @@ export default function depoHelper() { } } // 收起冰蛙表格 - if (getWhSettingObj()['companyBWCollapse']) { - elementReady('#effectiveness-wrap').then(BWtable_node => { + if (WuhuConfig.get('companyBWCollapse')) { + CommonUtils.elementReady('#effectiveness-wrap').then(BWTable_node => { document.body.classList.add('wh-bwtable-ctrl'); - addStyle(`.wh-bwtable-ctrl #effectiveness-wrap {display:none !important;}`); + CommonUtils.addStyle(`.wh-bwtable-ctrl #effectiveness-wrap {display:none !important;}`); const btn = document.createElement('button'); btn.innerHTML = '展开冰蛙表格'; btn.addEventListener('click', () => { document.body.classList.toggle('wh-bwtable-ctrl'); btn.innerText = btn.innerText === '展开冰蛙表格' ? '收起冰蛙表格' : '展开冰蛙表格'; }); - BWtable_node.before(btn); + BWTable_node.before(btn); }); } // 一键存钱按钮 - addActionBtn('一键存钱', companyDeposit, $zhongNode); + actionButtonUtils.add('一键存钱', companyDeposit); } // 帮派 if (href.includes('factions.php')) { channel = "FAC"; // 一键存钱按钮 - addActionBtn('一键存钱', factionDeposit, $zhongNode); + actionButtonUtils.add('一键存钱', factionDeposit); } // 存钱框浮动 - if (getWhSettingObj()['floatDepo'] && channel) { + if (WuhuConfig.get('floatDepo') && channel) { document.body.classList.add('wh-depo-helper'); - addStyle(`.wh-depo-helper div#funds div.deposit, + CommonUtils.addStyle(`.wh-depo-helper div#funds div.deposit, .wh-depo-helper div#armoury-donate div.cash{position: fixed !important; top: 150px; right: 12px; box-shadow: 0 0 8px 1px #00000091; background: #f2f2f2; z-index: 999999;}`); - elementReady(selector[channel]).then(node => { + CommonUtils.elementReady(selector[channel]).then(node => { const close_btn = document.createElement('button'); close_btn.addEventListener('click', () => { document.body.classList.remove('wh-depo-helper'); @@ -92,13 +88,13 @@ z-index: 999999;}`); let getTraceMoney = async () => { if (typeof addRFC === 'function') { let url = addRFC('/trade.php?step=getFullMoney&ID=' + traceId); - return (await Utils.ajaxFetch({ url: url, method: 'GET', referrer: 'trade.php' })).text(); + return (await CommonUtils.ajaxFetch({ url: url, method: 'GET', referrer: 'trade.php' })).text(); } }; // 监听jquery ajax请求 if (Log.debug()) $(document).ajaxComplete((_, xhr, settings) => Log.info({ xhr, settings })); // react 加载完成后将节点加入视图中 - elementReady('#trade-container').then(() => + CommonUtils.elementReady('#trade-container').then(() => document.querySelector('#trade-container').before(node) ); // 构建dom节点 @@ -145,7 +141,7 @@ z-index: 999999;}`); new Alert('无法定额取钱,原因:数不对'); return; } - await ajaxFetch({ + await CommonUtils.ajaxFetch({ url: addRFC('/trade.php'), method: 'POST', referrer: 'trade.php', @@ -157,7 +153,7 @@ z-index: 999999;}`); buttonDepositAll.addEventListener('click', async () => { let money = await getTraceMoney(); if (money === '0') return; - await ajaxFetch({ + await CommonUtils.ajaxFetch({ url: addRFC('/trade.php'), method: 'POST', referrer: 'trade.php', @@ -167,7 +163,7 @@ z-index: 999999;}`); }); // 全取 buttonWithdrawAll.addEventListener('click', async () => { - await ajaxFetch({ + await CommonUtils.ajaxFetch({ url: addRFC('/trade.php'), method: 'POST', referrer: 'trade.php', @@ -188,13 +184,14 @@ z-index: 999999;}`); } // 任何位置公司一键存钱 - if (getWhSettingObj()['companyDepositAnywhere']) { - addActionBtn('公司存钱', companyDepositAnywhere, $zhongNode); + if (WuhuConfig.get('companyDepositAnywhere')) { + actionButtonUtils.add('公司存钱', companyDepositAnywhere); } } // 公司一键存钱 async function companyDeposit() { + let fetchUtils: FetchUtils = FetchUtils.getInstance(); if (!location.href.contains('option=funds')) { new Alert('请先打开公司金库'); return; @@ -202,7 +199,7 @@ async function companyDeposit() { let { addRFC } = window; if (typeof addRFC !== 'function') return; let url = addRFC('https://www.torn.com/inputMoneyAction.php?step=generalAction'); - let money = await jQueryAjax(url, 'GET'); + let money = await fetchUtils.ajax(url, 'GET'); if (money === '0') return; let form = document.querySelector('#funds .deposit form'); let funds_input = form.querySelectorAll('input.input-money'); @@ -216,6 +213,7 @@ async function companyDeposit() { // 帮派一键存钱 async function factionDeposit() { + let fetchUtils: FetchUtils = FetchUtils.getInstance(); let form = document.querySelector('#armoury-donate form'); if (!location.hash.includes('tab=armoury') || !form) { new Alert('请先打开金库'); @@ -223,7 +221,7 @@ async function factionDeposit() { } if (typeof window.addRFC !== 'function') return; let url = window.addRFC('https://www.torn.com/inputMoneyAction.php?step=generalAction'); - let money = await jQueryAjax(url, 'POST'); + let money = await fetchUtils.ajax(url, 'POST'); if (money === '0') return; let funds_input = form.querySelectorAll('input.input-money'); funds_input.forEach(input => { @@ -245,10 +243,11 @@ async function factionDeposit() { // 所有页面公司一键存钱 async function companyDepositAnywhere() { + let fetchUtils: FetchUtils = FetchUtils.getInstance(); let { addRFC } = window; if (typeof addRFC !== 'function') return; let url = addRFC('https://www.torn.com/inputMoneyAction.php?step=generalAction'); - let money = await jQueryAjax(url, 'GET'); + let money = await fetchUtils.ajax(url, 'GET'); if (money === '0') return; let res = await (await fetch(addRFC('https://www.torn.com/companies.php?step=funds'), { method: 'POST', @@ -261,4 +260,4 @@ async function companyDepositAnywhere() { node.innerHTML = res; let success = node.querySelector('.success-message'); if (success) new Alert(success.innerHTML); -} \ No newline at end of file +} diff --git a/src/func/module/loadGS.ts b/src/func/module/loadGS.ts index e82ff52..2568a3d 100644 --- a/src/func/module/loadGS.ts +++ b/src/func/module/loadGS.ts @@ -1,7 +1,7 @@ import UserScriptEngine from "../../enum/UserScriptEngine"; import addStyle from "../utils/@deprecated/addStyle"; import log from "../utils/@deprecated/log"; -import Utils from "../../class/utils/Utils"; +import CommonUtils from "../../class/utils/CommonUtils"; import Alert from "../../class/utils/Alert"; // gs loader @@ -35,7 +35,7 @@ z-index:100001; _docu.head.innerHTML = ''; _docu.body.innerHTML = ''; notify = new Alert('加载依赖'); - Utils.COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js') + CommonUtils.COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js') .then(vuejs => { notify.close(); _window.eval(vuejs); @@ -51,7 +51,7 @@ z-index:100001; _window.GM_xmlhttpRequest = function (opt) { // 暂不适配pda post if (opt.method.toLowerCase() === 'post') return; - Utils.COFetch(opt.url).then(res => { + CommonUtils.COFetch(opt.url).then(res => { const obj = { responseText: res }; @@ -59,7 +59,7 @@ z-index:100001; }); }; notify = new Alert('加载飞贼小助手'); - Utils.COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${ performance.now() }`) + CommonUtils.COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${ performance.now() }`) .then(res => { _window.eval(res.replace('http://222.160.142.50:8154/mugger', `https://api.ljs-lyt.com/mugger`)); _window.GM_setValue("gsp_x", 10); @@ -84,7 +84,7 @@ z-index:100001; if (use === UserScriptEngine.GM) { if (typeof window.Vue !== 'function') { let notify = new Alert('正在加载依赖'); - Utils.COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js') + CommonUtils.COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js') .then(VueJS => { window.eval(VueJS); notify.close(); @@ -100,7 +100,7 @@ z-index:100001; }; // TODO // window.GM_xmlhttpRequest = GM_xmlhttpRequest; - Utils.COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${ performance.now() }`) + CommonUtils.COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${ performance.now() }`) .then(GSJS => { window.eval(GSJS); if (log.debug()) window.GM_setValue("gsp_showContent", true); diff --git a/src/func/module/travelHelper.ts b/src/func/module/travelHelper.ts index 58824e4..68c511f 100644 --- a/src/func/module/travelHelper.ts +++ b/src/func/module/travelHelper.ts @@ -1,25 +1,23 @@ import titleTrans from "../translate/titleTrans"; import contentTitleLinksTrans from "../translate/contentTitleLinksTrans"; import Device from "../../enum/Device"; -import getWhSettingObj from "../utils/getWhSettingObj"; -import addActionBtn from "../utils/addActionBtn"; -import addStyle from "../utils/@deprecated/addStyle"; -import log from "../utils/@deprecated/log"; import doQuickFly from "./doQuickFly"; -import ZhongIcon from "../../class/ZhongIcon"; import WuhuBase from "../../class/WuhuBase"; import Alert from "../../class/utils/Alert"; +import ActionButtonUtils from "../../class/utils/ActionButtonUtils"; +import WuhuConfig from "../../class/WuhuConfig"; +import CommonUtils from "../../class/utils/CommonUtils"; +import Log from "../../class/Log"; export default async function travelHelper(): Promise { let { href, bodyAttrs, device } = WuhuBase.glob; - let $zhongNode = ZhongIcon.ZhongNode; // URL判断 + 人不在城内 if (href.includes('index.php') && bodyAttrs['data-abroad'] === 'true') { // 飞行中 if (bodyAttrs["data-traveling"] === 'true') { // 飞行闹钟 - if (device === Device.PC && getWhSettingObj()['trvAlarm']) { + if (device === Device.PC && WuhuConfig.get('trvAlarm')) { // 获取目的地 let dest_cn; let country = document.body.getAttribute('data-country'); @@ -59,7 +57,7 @@ export default async function travelHelper(): Promise {
    `; - addStyle(` + CommonUtils.addStyle(` #wh-trv-alarm{ position:absolute; width:248px; @@ -254,7 +252,7 @@ display:none; flying_ani.innerHTML = `${ flying_arr[flying_index] }`; flying_index = (flying_index + 1) % flying_arr.length; }, 1000); - log.info({ + Log.info({ dest_cn, remaining_arr, wh_trv_alarm, @@ -279,9 +277,9 @@ display:none; } // 落地转跳 落地前事件 - if (getWhSettingObj()['landedRedirect'] && document.querySelector('#tcLogo[title]') === null) { + if (WuhuConfig.get('landedRedirect') && document.querySelector('#tcLogo[title]') === null) { window.addEventListener('beforeunload', () => { - let obj = { url: getWhSettingObj()['landedRedirect'], timestamp: Date.now() }; + let obj = { url: WuhuConfig.get('landedRedirect'), timestamp: Date.now() }; sessionStorage['wh-landed-redirect'] = JSON.stringify(obj); }); } @@ -289,9 +287,9 @@ display:none; // 不在飞行中 海外落地页面 else { // 一键回城 - addActionBtn('直接回城', travelBack, $zhongNode); + ActionButtonUtils.getInstance().add('直接回城', travelBack); // 海外警告 - if (getWhSettingObj()['abroadWarning']) { + if (WuhuConfig.get('abroadWarning')) { let c = 1; setInterval(() => new Alert(`警告:您已海外落地${ c++ * 30 }秒`, { timeout: 30, @@ -330,7 +328,7 @@ display:none; // 起飞页面 if (href.contains(/travelagency\.php/)) { // 起飞提醒 - if (getWhSettingObj()['energyAlert']) { + if (WuhuConfig.get('energyAlert')) { const $$ = $('.content-wrapper'); const OB = new MutationObserver(() => { OB.disconnect(); diff --git a/src/func/utils/addActionBtn.ts b/src/func/utils/@deprecated/addActionBtn.ts similarity index 92% rename from src/func/utils/addActionBtn.ts rename to src/func/utils/@deprecated/addActionBtn.ts index ad46709..ad5cb76 100644 --- a/src/func/utils/addActionBtn.ts +++ b/src/func/utils/@deprecated/addActionBtn.ts @@ -1,6 +1,8 @@ -import Log from "../../class/Log"; +import Log from "../../../class/Log"; -// 菜单 附加按钮 +/** + * @deprecated + */ export default function addActionBtn(txt: string, func: (ev: Event) => void, mainBtnNode: Element): void { addActionBtn.proxy(txt, func, mainBtnNode); } diff --git a/src/func/utils/jQueryAjax.ts b/src/func/utils/@deprecated/jQueryAjax.ts similarity index 86% rename from src/func/utils/jQueryAjax.ts rename to src/func/utils/@deprecated/jQueryAjax.ts index 53ea354..b123441 100644 --- a/src/func/utils/jQueryAjax.ts +++ b/src/func/utils/@deprecated/jQueryAjax.ts @@ -1,4 +1,7 @@ -// 包装jquery ajax异步 返回string +/** + * 使用 FetchUtils.ajax 替代 + * @deprecated + */ export default function jQueryAjax(url: string, method: 'GET' | 'POST'): Promise { return new Promise((res, rej) => { $.ajax({ diff --git a/src/func/utils/autoFetchJSON.ts b/src/func/utils/autoFetchJSON.ts index 222aee1..e5537a3 100644 --- a/src/func/utils/autoFetchJSON.ts +++ b/src/func/utils/autoFetchJSON.ts @@ -1,4 +1,4 @@ -import Utils from "../../class/utils/Utils"; +import CommonUtils from "../../class/utils/CommonUtils"; import WuhuBase from "../../class/WuhuBase"; /** @@ -8,10 +8,10 @@ import WuhuBase from "../../class/WuhuBase"; */ function autoFetchJSON(dest, time = 30) { let obj; - const res = Utils.COFetch(dest); + const res = CommonUtils.COFetch(dest); setInterval(async () => { if (!WuhuBase.glob.isWindowActive.get()) return; - const res = await Utils.COFetch(dest); + const res = await CommonUtils.COFetch(dest); obj = JSON.parse(res); }, time * 1000); return { diff --git a/src/func/utils/forStock.ts b/src/func/utils/forStock.ts index 0947ad3..aab2ffa 100644 --- a/src/func/utils/forStock.ts +++ b/src/func/utils/forStock.ts @@ -1,17 +1,19 @@ import UserScriptEngine from "../../enum/UserScriptEngine"; import WuhuBase from "../../class/WuhuBase"; -import Utils from "../../class/utils/Utils"; +import CommonUtils from "../../class/utils/CommonUtils"; import InfoUtils from "../../class/utils/InfoUtils"; import Popup from "../../class/utils/Popup"; import * as FILTER from "../../json/ForStockItemFilter.json"; -// 海外库存 +/** + * @deprecated + */ export default async function forStock() { if (InfoUtils.getInstance().getScriptEngine() === UserScriptEngine.RAW) { - const insert = `stock.png`; + const insert = `stock.png`; new Popup(insert, '飞花库存'); } else { - const popup = new Popup(`请稍后${ Utils.loading_gif_html() }`, '飞花库存'); + const popup = new Popup(`请稍后${ CommonUtils.loading_gif_html() }`, '飞花库存'); let table = ``; const dest = FILTER; const now = new Date(); diff --git a/src/html/danger_zone.html b/src/html/danger_zone.html new file mode 100644 index 0000000..5876310 --- /dev/null +++ b/src/html/danger_zone.html @@ -0,0 +1,5 @@ +

    即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。

    +

    +
    + +
    \ No newline at end of file diff --git a/src/html/nnb_info.html b/src/html/nnb_info.html new file mode 100644 index 0000000..ffc6f4b --- /dev/null +++ b/src/html/nnb_info.html @@ -0,0 +1,30 @@ + +

    +

    NNBNatural Nerve Bar)意思是:扣除所有加成后,玩家本身的犯罪条上限,可用于衡量大佬隐藏的犯罪技能等级 +

    +

    一般来说,左侧红色的犯罪条(Nerve Bar/NB)的上限都是包含加成的,如来自帮派、天赋的加成等。额外的加成不会影响玩家的犯罪技能 +

    +

    查看NNB的方法很简单,在Torn主页面的最下方有一栏Perks,NB-Perks=NNB

    +
    +

    以下是两种计算NNB的方法:

    + + +
    + \ No newline at end of file diff --git a/src/html/price_watcher.html b/src/html/price_watcher.html new file mode 100644 index 0000000..11fa337 --- /dev/null +++ b/src/html/price_watcher.html @@ -0,0 +1,19 @@ + +

    输入需要监视的价格,低于该价格发出通知,-1为关闭

    +

    注:需要APIKey,当前可用APIKey为
    + (来自冰蛙)
    + (来自PDA) +

    +

    PT

    +

    XAN

    +

    + +

    \ No newline at end of file diff --git a/src/html/quick_fly.html b/src/html/quick_fly.html new file mode 100644 index 0000000..42fdb78 --- /dev/null +++ b/src/html/quick_fly.html @@ -0,0 +1,29 @@ + +

    主要用途:出院秒飞

    +

    点起飞,页面加载完成后会马上飞走

    +
    +
    + + +

    查看花偶库存

    +

    注:需要验证时无法起飞

    + + +
    \ No newline at end of file diff --git a/src/json/github.io.stock.png.json b/src/json/github.io.stock.png.json new file mode 100644 index 0000000..2df561e --- /dev/null +++ b/src/json/github.io.stock.png.json @@ -0,0 +1,3 @@ +{ + "html": "\"stock.png\"" +} \ No newline at end of file diff --git a/src/test/Test.ts b/src/test/Test.ts index 0ee461a..c369ca6 100644 --- a/src/test/Test.ts +++ b/src/test/Test.ts @@ -1,8 +1,9 @@ import WuhuBase from "../class/WuhuBase"; import Popup from "../class/utils/Popup"; +import Log from "../class/Log"; export default class Test extends WuhuBase { public test(): void { - new Popup("123") + new Popup(Log.getLogs()); } } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1530b35..c189ac4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,6 +9,8 @@ "target": "ES6", "removeComments": true, "sourceMap": false, - "resolveJsonModule": true + "resolveJsonModule": true, + // "strict": true, + "jsx": "react-native" } } \ No newline at end of file
    目的地 - 更新时间库存