From 7eee3f72a008fad7f94b58d480ec1505d01dcbec Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 1 Feb 2022 14:58:19 +0800 Subject: [PATCH 001/131] =?UTF-8?q?feat:=20npm=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + package.json | 14 ++- rollup.config.js | 34 +++++++ src/chekin.js | 3 + src/juejin-helper.js | 7 ++ src/seagold.js | 3 + test/test.js | 3 + yarn.lock | 223 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 rollup.config.js create mode 100644 src/chekin.js create mode 100644 src/juejin-helper.js create mode 100644 src/seagold.js create mode 100644 test/test.js diff --git a/.gitignore b/.gitignore index 7df6d182..d8c2951c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store node_modules +dist # local env files .env.local diff --git a/package.json b/package.json index 3f6ba950..244288de 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,17 @@ "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "MIT", + "main": "dist/juejin-helper.cjs.js", + "module": "dist/juejin-helper.esm.js", + "browser": "dist/juejin-helper.umd.js", "scripts": { "checkin": "node ./scripts/checkin.js", "lottery": "node ./scripts/lottery.js", - "seaGold": "node ./scripts/seaGold.js" + "seaGold": "node ./scripts/seaGold.js", + "build": "rollup -c", + "dev": "rollup -c -w", + "test": "node test/test.js", + "pretest": "npm run build" }, "dependencies": { "fast-astar": "^1.0.6", @@ -15,6 +22,11 @@ "node-fetch": "^2.6.1", "nodemailer": "^6.7.0" }, + "devDependencies": { + "@rollup/plugin-commonjs": "^11.0.1", + "@rollup/plugin-node-resolve": "^7.0.0", + "rollup": "^1.29.0" + }, "repository": { "type": "git", "url": "git+https://github.com/iDerekLi/juejin-helper.git" diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..3ff84347 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,34 @@ +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import pkg from './package.json'; + +export default [ + // browser-friendly UMD build + { + input: 'src/juejin-helper.js', + output: { + name: 'JuejinHelper', + file: pkg.browser, + format: 'umd' + }, + plugins: [ + resolve(), // so Rollup can find `ms` + commonjs() // so Rollup can convert `ms` to an ES module + ] + }, + + // CommonJS (for Node) and ES module (for bundlers) build. + // (We could have three entries in the configuration array + // instead of two, but it's quicker to generate multiple + // builds from a single configuration where possible, using + // an array for the `output` option, where we can specify + // `file` and `format` for each target) + { + input: 'src/juejin-helper.js', + external: ['node-fetch', 'nodemailer', 'jsonwebtoken', 'fast-astar'], + output: [ + { file: pkg.main, format: 'cjs' }, + { file: pkg.module, format: 'es' } + ] + } +]; diff --git a/src/chekin.js b/src/chekin.js new file mode 100644 index 00000000..c63f0fc2 --- /dev/null +++ b/src/chekin.js @@ -0,0 +1,3 @@ +class Chekin {} + +export default Chekin; diff --git a/src/juejin-helper.js b/src/juejin-helper.js new file mode 100644 index 00000000..357415b4 --- /dev/null +++ b/src/juejin-helper.js @@ -0,0 +1,7 @@ +import CheckIn from "./chekin"; +import SeaCold from "./seagold"; + +export default { + CheckIn, + SeaCold +} diff --git a/src/seagold.js b/src/seagold.js new file mode 100644 index 00000000..95e8b10e --- /dev/null +++ b/src/seagold.js @@ -0,0 +1,3 @@ +class Seagold {} + +export default Seagold; diff --git a/test/test.js b/test/test.js new file mode 100644 index 00000000..04847006 --- /dev/null +++ b/test/test.js @@ -0,0 +1,3 @@ +const JuejinHelper = require('..'); + +console.log(JuejinHelper); diff --git a/yarn.lock b/yarn.lock index 6e3974e8..915bb425 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,99 @@ # yarn lockfile v1 +"@rollup/plugin-commonjs@^11.0.1": + version "11.1.0" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" + integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== + dependencies: + "@rollup/pluginutils" "^3.0.8" + commondir "^1.0.1" + estree-walker "^1.0.1" + glob "^7.1.2" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-node-resolve@^7.0.0": + version "7.1.3" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" + integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== + dependencies: + "@rollup/pluginutils" "^3.0.8" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/pluginutils@^3.0.8": + version "3.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@types/estree@*": + version "0.0.50" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/node@*": + version "17.0.13" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz#5ed7ed7c662948335fcad6c412bb42d99ea754e3" + integrity sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw== + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +acorn@^7.1.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.nlark.com/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -14,11 +102,77 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + fast-astar@^1.0.6: version "1.0.6" resolved "https://registry.npmmirror.com/fast-astar/download/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" integrity sha1-5MriWIObxkBsSd8eqoAHftp0cjw= +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob@^7.1.2: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-reference@^1.1.2: + version "1.2.1" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.npmmirror.com/jsonwebtoken/download/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -87,6 +241,20 @@ lodash.once@^4.0.0: resolved "https://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= +magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + ms@^2.1.1: version "2.1.3" resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -104,6 +272,46 @@ nodemailer@^6.7.0: resolved "https://registry.npmmirror.com/nodemailer/download/nodemailer-6.7.0.tgz?cache=0&sync_timestamp=1634009331140&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnodemailer%2Fdownload%2Fnodemailer-6.7.0.tgz#86614722c4e0c33d1b5b02aecb90d6d629932b0d" integrity sha1-hmFHIsTgwz0bWwKuy5DW1imTKw0= +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picomatch@^2.2.2: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +resolve@^1.11.0, resolve@^1.14.2: + version "1.22.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rollup@^1.29.0: + version "1.32.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" + integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + safe-buffer@^5.0.1: version "5.2.1" resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -114,6 +322,16 @@ semver@^5.6.0: resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -131,3 +349,8 @@ whatwg-url@^5.0.0: dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= From 88da264bfb9c975ac39cfb5ba1ead358301d5dd4 Mon Sep 17 00:00:00 2001 From: derek Date: Fri, 4 Feb 2022 17:19:37 +0800 Subject: [PATCH 002/131] =?UTF-8?q?feat:=20=E6=9E=84=E5=BB=BApackage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .npmrc | 1 + LICENSE | 222 +++++++- package.json | 25 +- rollup.config.js | 9 + src/api.js | 58 ++ src/chekin.js | 3 - src/growth.js | 58 ++ src/juejin-helper.js | 57 +- src/seagold.js | 99 +++- yarn.lock | 1222 +++++++++++++++++++++++++++++++++++++++++- 10 files changed, 1713 insertions(+), 41 deletions(-) create mode 100644 .npmrc create mode 100644 src/api.js delete mode 100644 src/chekin.js create mode 100644 src/growth.js diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..0ce6ea03 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry = "https://registry.npmjs.com/" diff --git a/LICENSE b/LICENSE index 5fd9e8b3..2d71a081 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,201 @@ -MIT License - -Copyright (c) 2022 Derek Li - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Derek Li + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/package.json b/package.json index 244288de..a142604b 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,36 @@ { "name": "juejin-helper", - "version": "1.0.0", + "version": "0.1.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", - "license": "MIT", + "license": "Apache-2.0", "main": "dist/juejin-helper.cjs.js", "module": "dist/juejin-helper.esm.js", "browser": "dist/juejin-helper.umd.js", + "files": ["dist"], + "keywords": ["juejin", "helper"], "scripts": { - "checkin": "node ./scripts/checkin.js", - "lottery": "node ./scripts/lottery.js", - "seaGold": "node ./scripts/seaGold.js", "build": "rollup -c", "dev": "rollup -c -w", "test": "node test/test.js", - "pretest": "npm run build" + "pretest": "npm run build", + "prescript": "npm run build", + "checkin": "node ./scripts/checkin.js", + "seagold": "node ./scripts/seaGold.js" }, "dependencies": { - "fast-astar": "^1.0.6", "jsonwebtoken": "^8.5.1", - "node-fetch": "^2.6.1", - "nodemailer": "^6.7.0" + "node-fetch": "^2.6.1" }, "devDependencies": { + "@babel/core": "^7.16.12", + "@babel/preset-env": "^7.16.11", + "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-commonjs": "^11.0.1", "@rollup/plugin-node-resolve": "^7.0.0", - "rollup": "^1.29.0" + "rollup": "^1.29.0", + "fast-astar": "^1.0.6", + "nodemailer": "^6.7.0" }, "repository": { "type": "git", diff --git a/rollup.config.js b/rollup.config.js index 3ff84347..7825efd4 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,5 +1,6 @@ import resolve from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; +// import { babel } from '@rollup/plugin-babel'; import pkg from './package.json'; export default [ @@ -13,6 +14,9 @@ export default [ }, plugins: [ resolve(), // so Rollup can find `ms` + // babel({ + // exclude: 'node_modules/**' + // }), commonjs() // so Rollup can convert `ms` to an ES module ] }, @@ -29,6 +33,11 @@ export default [ output: [ { file: pkg.main, format: 'cjs' }, { file: pkg.module, format: 'es' } + ], + plugins: [ + // babel({ + // exclude: "node_modules/**" + // }) ] } ]; diff --git a/src/api.js b/src/api.js new file mode 100644 index 00000000..a20ae7cc --- /dev/null +++ b/src/api.js @@ -0,0 +1,58 @@ +import fetch from "node-fetch"; + +class Api { + constructor() { + this.baseURL = ""; + this.headers = { + "content-type": "application/json; charset=utf-8", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", + "accept-encoding": "gzip, deflate, br", + "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + "sec-ch-ua": `"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"`, + "sec-ch-ua-mobile": "?0", + accept: "*/*", + credentials: "include" + }; + this.requestInterceptor = config => config; + this.responseInterceptor = res => res; + } + + async request(config) { + config = this.requestInterceptor({ + baseURL: config.baseURL || this.baseURL, + url: config.url, + method: (config.method || "get").toLocaleUpperCase(), + headers: { + ...this.headers, + ...config.headers + }, + data: config.data + }); + + const response = await fetch(config.baseURL + config.url, { + method: config.method, + headers: config.headers, + body: config.method !== "GET" ? JSON.stringify(config.data) : undefined + }); + + return this.responseInterceptor(await response.json()); + } + + async get(url, config) { + return this.request({ + ...config, + url, + method: "get" + }); + } + + async post(url, config) { + return this.request({ + ...config, + url, + method: "post" + }); + } +} + +export default Api; diff --git a/src/chekin.js b/src/chekin.js deleted file mode 100644 index c63f0fc2..00000000 --- a/src/chekin.js +++ /dev/null @@ -1,3 +0,0 @@ -class Chekin {} - -export default Chekin; diff --git a/src/growth.js b/src/growth.js new file mode 100644 index 00000000..373e1229 --- /dev/null +++ b/src/growth.js @@ -0,0 +1,58 @@ +import Api from "./api"; + +class Growth extends Api { + constructor(juejin) { + super(); + this.baseURL = "https://api.juejin.cn"; + this.headers.referer = "https://juejin.cn/"; + this.requestInterceptor = config => { + config.headers.cookie = juejin.getCookie(); + return config; + }; + this.responseInterceptor = res => { + if (res.err_no) { + throw new Error(res.err_msg); + } + return res.data; + } + } + + async getLotteryConfig() { + return this.get("/growth_api/v1/lottery_config/get"); + } + + async getCurrentPoint() { + return this.get("/growth_api/v1/get_cur_point"); + } + + async drawLottery() { + return this.post("/growth_api/v1/lottery/draw"); + } + + async checkIn() { + return this.post("/growth_api/v1/check_in"); + } + + async getLotteriesLuckyUsers({ page_no = 1, page_size = 5 }) { + return this.post("/growth_api/v1/lottery_history/global_big", { + data: { + page_no: page_no, + page_size: page_size + } + }); + } + + async dipLucky(lottery_history_id) { + return this.post("/growth_api/v1/lottery_lucky/dip_lucky", { + data: { + lottery_history_id + } + }); + } + + async getMyLucky() { + return this.post("/growth_api/v1/lottery_lucky/my_lucky"); + } +} + +export default Growth; diff --git a/src/juejin-helper.js b/src/juejin-helper.js index 357415b4..29a55d00 100644 --- a/src/juejin-helper.js +++ b/src/juejin-helper.js @@ -1,7 +1,54 @@ -import CheckIn from "./chekin"; -import SeaCold from "./seagold"; +import Api from "./api"; +import Growth from "./growth"; +import SeaGold from "./seagold"; -export default { - CheckIn, - SeaCold +class JuejinHelper extends Api { + constructor() { + super(); + this.baseURL = "https://api.juejin.cn"; + this.headers.referer = "https://juejin.cn/"; + this.headers.cookie = ""; + this.responseInterceptor = res => { + if (res.err_no) { + throw new Error(res.err_msg); + } + return res.data; + } + + this.user = null; + } + + async login(cookie) { + this.headers.cookie = cookie; + this.user = await this.get("/user_api/v1/user/get"); + } + + async logout() { + this.headers.cookie = ""; + this.user = null; + } + + getCookie() { + return this.headers.cookie || ""; + } + + getUser() { + return this.user; + } + + async makeToken() { + return this.get("/get/token", { + baseURL: "https://juejin.cn" + }); + } + + growth() { + return new Growth(this); + } + + seagold() { + return new SeaGold(this); + } } + +export default JuejinHelper; diff --git a/src/seagold.js b/src/seagold.js index 95e8b10e..284c71a2 100644 --- a/src/seagold.js +++ b/src/seagold.js @@ -1,3 +1,100 @@ -class Seagold {} +import Api from "./api"; +import jwt from "jsonwebtoken"; + +class Seagold extends Api { + constructor(juejin) { + super(); + this.baseURL = "https://juejin-game.bytedance.com/game"; + this.headers.referer = "https://juejin.cn/"; + this.juejin = juejin; + this.requestInterceptor = config => { + if (juejin.user) { + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${juejin.user.user_id}&time=${Date.now()}`; + } + return config; + }; + + this.responseInterceptor = res => { + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }; + } + + setToken(token) { + this.headers.Authorization = `Bearer ${token}`; + } + + async gameLogin() { + this.setToken(await this.juejin.makeToken()); + return this.post("/sea-gold/user/login", { + data: { + name: this.juejin.user?.user_name + } + }); + } + + async gameInfo() { + return this.get("/sea-gold/home/info"); + } + + async gameStart() { + return this.post("/sea-gold/game/start", { + data: { + roleId: 3 + } + }); + } + + async gameOver() { + // const result = { + // activity: "", + // deep: 3, + // gameDiamond: 34, // 当局获取 + // originMapData: [], + // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], + // picoDiamond: 0, + // realDiamond: 34, // 真实获取 + // todayDiamond: 34, // 今日获取 + // todayLimitDiamond: 1500 // 今日最大获取 + // }; + return this.post("/sea-gold/game/over", { + data: { + isButton: 1 + } + }); + } + + async gameCommand(gameId, command = []) { + // const result = { + // appendMapData: [], + // blockData: { moveUp: 14, moveDown: 14, moveLeft: 2, moveRight: 5, jump: 3, loop: 3 }, + // curPos: { x: 0, y: 2 }, + // gameDiamond: 34 + // } + const privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; + const token = jwt.sign({ + gameId: gameId, + time: new Date().getTime() + }, privateKey, { + algorithm: "ES256", + expiresIn: 2592e3, + header: { + alg: "ES256", + typ: "JWT" + } + }); + return this.post("/sea-gold/game/command", { + headers: { + "x-tt-gameid": token + }, + data: { + command + // command: ["R", { times: 2, command: ["R"] }, "2"] + } + }); + } +} export default Seagold; diff --git a/yarn.lock b/yarn.lock index 915bb425..0e57ff73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,900 @@ # yarn lockfile v1 +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + +"@babel/core@^7.16.12": + version "7.16.12" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.10" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.16.11": + version "7.16.11" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.4.4": + version "7.16.8" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@rollup/plugin-babel@^5.3.0": + version "5.3.0" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" + integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + "@rollup/plugin-commonjs@^11.0.1": version "11.1.0" resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" @@ -26,7 +920,7 @@ is-module "^1.0.0" resolve "^1.14.2" -"@rollup/pluginutils@^3.0.8": +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -62,6 +956,44 @@ acorn@^7.1.0: resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -75,6 +1007,17 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -85,6 +1028,40 @@ builtin-modules@^3.1.0: resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caniuse-lite@^1.0.30001286: + version "1.0.30001304" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz#38af55ed3fc8220cb13e35e6e7309c8c65a05559" + integrity sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -95,6 +1072,35 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" + integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.nlark.com/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -102,11 +1108,31 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +electron-to-chromium@^1.4.17: + version "1.4.61" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" + integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + fast-astar@^1.0.6: version "1.0.6" resolved "https://registry.npmmirror.com/fast-astar/download/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" @@ -122,6 +1148,20 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + glob@^7.1.2: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" @@ -134,6 +1174,21 @@ glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -173,6 +1228,28 @@ is-reference@^1.1.2: dependencies: "@types/estree" "*" +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.npmmirror.com/jsonwebtoken/download/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -206,6 +1283,11 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.npmmirror.com/lodash.includes/download/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -255,6 +1337,16 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@^2.1.1: version "2.1.3" resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -267,11 +1359,31 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + nodemailer@^6.7.0: version "6.7.0" resolved "https://registry.npmmirror.com/nodemailer/download/nodemailer-6.7.0.tgz?cache=0&sync_timestamp=1634009331140&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnodemailer%2Fdownload%2Fnodemailer-6.7.0.tgz#86614722c4e0c33d1b5b02aecb90d6d629932b0d" integrity sha1-hmFHIsTgwz0bWwKuy5DW1imTKw0= +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -289,11 +1401,64 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.2.2: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + resolve@^1.11.0, resolve@^1.14.2: version "1.22.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" @@ -317,26 +1482,81 @@ safe-buffer@^5.0.1: resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^5.6.0: version "5.7.1" resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= +semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" From 12a43bc664259bf4cc6ece526b184c9fa77a8a86 Mon Sep 17 00:00:00 2001 From: derek Date: Fri, 4 Feb 2022 17:34:06 +0800 Subject: [PATCH 003/131] =?UTF-8?q?test:=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 7 ++++++- test/test.js | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a142604b..2a049597 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,12 @@ "main": "dist/juejin-helper.cjs.js", "module": "dist/juejin-helper.esm.js", "browser": "dist/juejin-helper.umd.js", - "files": ["dist"], + "files": [ + "dist", + "LICENSE", + "README.md", + "package.json" + ], "keywords": ["juejin", "helper"], "scripts": { "build": "rollup -c", diff --git a/test/test.js b/test/test.js index 04847006..a1db4a41 100644 --- a/test/test.js +++ b/test/test.js @@ -1,3 +1,11 @@ const JuejinHelper = require('..'); -console.log(JuejinHelper); +const mockCookie = `juejin-cookie`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + console.log(juejin.getUser()); +} + +run(); From 4321eb4cdb4654553b992e62d08a86e8451d86a8 Mon Sep 17 00:00:00 2001 From: derek Date: Fri, 4 Feb 2022 17:41:15 +0800 Subject: [PATCH 004/131] =?UTF-8?q?perf:=20=E7=A7=BB=E9=99=A4=E6=9D=82?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 8 ++------ yarn.lock | 10 ---------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 2a049597..635ec662 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,7 @@ "dev": "rollup -c -w", "test": "node test/test.js", "pretest": "npm run build", - "prescript": "npm run build", - "checkin": "node ./scripts/checkin.js", - "seagold": "node ./scripts/seaGold.js" + "prescript": "npm run build" }, "dependencies": { "jsonwebtoken": "^8.5.1", @@ -33,9 +31,7 @@ "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-commonjs": "^11.0.1", "@rollup/plugin-node-resolve": "^7.0.0", - "rollup": "^1.29.0", - "fast-astar": "^1.0.6", - "nodemailer": "^6.7.0" + "rollup": "^1.29.0" }, "repository": { "type": "git", diff --git a/yarn.lock b/yarn.lock index 0e57ff73..7e3fac4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1133,11 +1133,6 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -fast-astar@^1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/fast-astar/download/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" - integrity sha1-5MriWIObxkBsSd8eqoAHftp0cjw= - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1364,11 +1359,6 @@ node-releases@^2.0.1: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== -nodemailer@^6.7.0: - version "6.7.0" - resolved "https://registry.npmmirror.com/nodemailer/download/nodemailer-6.7.0.tgz?cache=0&sync_timestamp=1634009331140&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnodemailer%2Fdownload%2Fnodemailer-6.7.0.tgz#86614722c4e0c33d1b5b02aecb90d6d629932b0d" - integrity sha1-hmFHIsTgwz0bWwKuy5DW1imTKw0= - object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" From 06fbc07aafc4a03c3490bbdb902bf7669ff373c6 Mon Sep 17 00:00:00 2001 From: derek Date: Fri, 4 Feb 2022 17:41:40 +0800 Subject: [PATCH 005/131] =?UTF-8?q?perf:=20=E7=A7=BB=E9=99=A4=E6=9D=82?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 635ec662..063d3464 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,7 @@ "build": "rollup -c", "dev": "rollup -c -w", "test": "node test/test.js", - "pretest": "npm run build", - "prescript": "npm run build" + "pretest": "npm run build" }, "dependencies": { "jsonwebtoken": "^8.5.1", From ea0f92c65bbe6a61bede4336570abaa46567195f Mon Sep 17 00:00:00 2001 From: derek Date: Fri, 4 Feb 2022 17:48:41 +0800 Subject: [PATCH 006/131] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96umd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rollup.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rollup.config.js b/rollup.config.js index 7825efd4..87c6bd25 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -12,6 +12,7 @@ export default [ file: pkg.browser, format: 'umd' }, + external: ['node-fetch', 'jsonwebtoken'], plugins: [ resolve(), // so Rollup can find `ms` // babel({ @@ -29,7 +30,7 @@ export default [ // `file` and `format` for each target) { input: 'src/juejin-helper.js', - external: ['node-fetch', 'nodemailer', 'jsonwebtoken', 'fast-astar'], + external: ['node-fetch', 'jsonwebtoken'], output: [ { file: pkg.main, format: 'cjs' }, { file: pkg.module, format: 'es' } From 6aae0680ffd8a781e7a51ce2ba54a5eb7eda58db Mon Sep 17 00:00:00 2001 From: derek Date: Fri, 4 Feb 2022 20:06:21 +0800 Subject: [PATCH 007/131] =?UTF-8?q?chore:=20=E7=A7=BB=E9=99=A4=E6=9D=82?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/checkin.yml | 21 -- .github/workflows/seaGold.yml | 21 -- scripts/api/api.js | 57 ----- scripts/api/juejin-api.js | 67 ------ scripts/api/juejin-game-api.js | 105 -------- scripts/checkin.js | 143 ----------- scripts/juejin-console-script.js | 214 ----------------- scripts/lottery.js | 137 ----------- scripts/seaGold.js | 400 ------------------------------- scripts/utils/email.js | 51 ---- scripts/utils/env.js | 8 - scripts/utils/logger.js | 84 ------- scripts/utils/utils.js | 8 - 13 files changed, 1316 deletions(-) delete mode 100644 .github/workflows/checkin.yml delete mode 100644 .github/workflows/seaGold.yml delete mode 100644 scripts/api/api.js delete mode 100644 scripts/api/juejin-api.js delete mode 100644 scripts/api/juejin-game-api.js delete mode 100644 scripts/checkin.js delete mode 100644 scripts/juejin-console-script.js delete mode 100644 scripts/lottery.js delete mode 100644 scripts/seaGold.js delete mode 100644 scripts/utils/email.js delete mode 100644 scripts/utils/env.js delete mode 100644 scripts/utils/logger.js delete mode 100644 scripts/utils/utils.js diff --git a/.github/workflows/checkin.yml b/.github/workflows/checkin.yml deleted file mode 100644 index 898686d6..00000000 --- a/.github/workflows/checkin.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: CheckIn - -on: - schedule: - - cron: "30 22 * * *" # 北京时间上午06:30 - workflow_dispatch: -jobs: - CheckIn: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - - name: Run Project - env: - COOKIE: ${{ secrets.COOKIE }} - EMAIL_USER: ${{ secrets.EMAIL_USER }} - EMAIL_PASS: ${{ secrets.EMAIL_PASS }} - EMAIL_TO: ${{ secrets.EMAIL_TO }} - run: | - yarn - yarn checkin diff --git a/.github/workflows/seaGold.yml b/.github/workflows/seaGold.yml deleted file mode 100644 index c9d87123..00000000 --- a/.github/workflows/seaGold.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: SeaGold - -on: - schedule: - - cron: "30 22 * * *" # 北京时间上午06:30 - workflow_dispatch: -jobs: - SeaGold: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - - name: Run Project - env: - COOKIE: ${{ secrets.COOKIE }} - EMAIL_USER: ${{ secrets.EMAIL_USER }} - EMAIL_PASS: ${{ secrets.EMAIL_PASS }} - EMAIL_TO: ${{ secrets.EMAIL_TO }} - run: | - yarn - yarn seaGold diff --git a/scripts/api/api.js b/scripts/api/api.js deleted file mode 100644 index 8b9e6241..00000000 --- a/scripts/api/api.js +++ /dev/null @@ -1,57 +0,0 @@ -const fetch = require("node-fetch"); - -class Api { - baseURL = ""; - headers = { - "content-type": "application/json; charset=utf-8", - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", - "accept-encoding": "gzip, deflate, br", - "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", - "sec-ch-ua": `"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"`, - "sec-ch-ua-mobile": "?0", - accept: "*/*", - credentials: "include" - }; - - requestInterceptor = config => config; - responseInterceptor = res => res; - - async request(config) { - config = this.requestInterceptor({ - baseURL: config.baseURL || this.baseURL, - url: config.url, - method: (config.method || "get").toLocaleUpperCase(), - headers: { - ...this.headers, - ...config.headers - }, - data: config.data - }); - - const response = await fetch(config.baseURL + config.url, { - method: config.method, - headers: config.headers, - body: config.method !== "GET" ? JSON.stringify(config.data) : undefined - }); - - return this.responseInterceptor(await response.json()); - } - - async get(url, config) { - return this.request({ - ...config, - url, - method: "get" - }); - } - - async post(url, config) { - return this.request({ - ...config, - url, - method: "post" - }); - } -} - -module.exports = Api; diff --git a/scripts/api/juejin-api.js b/scripts/api/juejin-api.js deleted file mode 100644 index a1e3bd60..00000000 --- a/scripts/api/juejin-api.js +++ /dev/null @@ -1,67 +0,0 @@ -const Api = require("./api"); -const env = require("../utils/env"); - -class JuejinApi extends Api { - constructor() { - super(); - this.baseURL = "https://api.juejin.cn"; - this.headers.referer = "https://juejin.cn/"; - this.headers.cookie = env.COOKIE; - } - - responseInterceptor = res => { - if (res.err_no) { - throw new Error(res.err_msg); - } - return res.data; - } - - async getToken() { - return this.get("/get/token", { - baseURL: "https://juejin.cn" - }); - } - - async getUserInfo() { - return this.get("/user_api/v1/user/get"); - } - - async getLotteryConfig() { - return this.get("/growth_api/v1/lottery_config/get"); - } - - async getCurrentPoint() { - return this.get("/growth_api/v1/get_cur_point"); - } - - async drawLottery() { - return this.post("/growth_api/v1/lottery/draw"); - } - - async checkIn() { - return this.post("/growth_api/v1/check_in"); - } - - async getLotteriesLuckyUsers() { - return this.post("/growth_api/v1/lottery_history/global_big", { - data: { - page_no: 1, - page_size: 5 - } - }); - } - - async dipLucky(lottery_history_id) { - return this.post("/growth_api/v1/lottery_lucky/dip_lucky", { - data: { - lottery_history_id - } - }); - } - - async getMyLucky() { - return this.post("/growth_api/v1/lottery_lucky/my_lucky"); - } -} - -module.exports = new JuejinApi; diff --git a/scripts/api/juejin-game-api.js b/scripts/api/juejin-game-api.js deleted file mode 100644 index 7c2d5389..00000000 --- a/scripts/api/juejin-game-api.js +++ /dev/null @@ -1,105 +0,0 @@ -const Api = require("./api"); -const jwt = require("jsonwebtoken"); - -class JuejinGameApi extends Api { - user = null; - - constructor() { - super(); - this.baseURL = "https://juejin-game.bytedance.com/game"; - this.headers.referer = "https://juejin.cn/"; - } - - setUser(user) { - this.user = user; - } - - setToken(token) { - this.headers.Authorization = `Bearer ${token}`; - } - - requestInterceptor = config => { - if (this.user) { - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${this.user.user_id}&time=${Date.now()}`; - } - return config; - }; - - responseInterceptor = res => { - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - } - - async gameLogin() { - return this.post("/sea-gold/user/login", { - data: { - name: this.user.user_name - } - }); - } - - async gameInfo() { - return this.get("/sea-gold/home/info"); - } - - async gameStart() { - return this.post("/sea-gold/game/start", { - data: { - roleId: 3 - } - }); - } - - async gameOver() { - // const result = { - // activity: "", - // deep: 3, - // gameDiamond: 34, // 当局获取 - // originMapData: [], - // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], - // picoDiamond: 0, - // realDiamond: 34, // 真实获取 - // todayDiamond: 34, // 今日获取 - // todayLimitDiamond: 1500 // 今日最大获取 - // }; - return this.post("/sea-gold/game/over", { - data: { - isButton: 1 - } - }); - } - - async gameCommand(gameId, command = []) { - // const result = { - // appendMapData: [], - // blockData: { moveUp: 14, moveDown: 14, moveLeft: 2, moveRight: 5, jump: 3, loop: 3 }, - // curPos: { x: 0, y: 2 }, - // gameDiamond: 34 - // } - const privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; - const token = jwt.sign({ - gameId: gameId, - time: new Date().getTime() - }, privateKey, { - algorithm: "ES256", - expiresIn: 2592e3, - header: { - alg: "ES256", - typ: "JWT" - } - }); - return this.post("/sea-gold/game/command", { - headers: { - "x-tt-gameid": token - }, - data: { - command - // command: ["R", { times: 2, command: ["R"] }, "2"] - } - }); - } -} - -module.exports = new JuejinGameApi; diff --git a/scripts/checkin.js b/scripts/checkin.js deleted file mode 100644 index 32065fad..00000000 --- a/scripts/checkin.js +++ /dev/null @@ -1,143 +0,0 @@ -const api = require("./api/juejin-api"); -const console = require("./utils/logger"); -const utils = require("./utils/utils"); -const email = require("./utils/email"); - -async function run(args) { - const state = { - simulateSpeed: 100, // ms/进行一次抽奖 - sumPoint: 0, - pointCost: 0, - supplyPoint: 0, - freeCount: 0, - luckyValue: 0, - lottery: [], - counter: 0, - prize: {} - }; - - await utils.wait(100); - console.clear(); - - try { - const checkInResult = await api.checkIn(); - const incrPoint = checkInResult.incr_point; - console.log(`签到成功 +${incrPoint} 矿石`); - - const sumPoint = checkInResult.sum_point; - state.sumPoint = sumPoint; - } catch (e) { - console.log(e.message); - - const sumPoint = await api.getCurrentPoint(); - state.sumPoint = sumPoint; - } - - try { - const luckyusersResult = await api.getLotteriesLuckyUsers(); - if (luckyusersResult.count > 0) { - const no1LuckyUser = luckyusersResult.lotteries[0]; - const dipLuckyResult = await api.dipLucky(no1LuckyUser.history_id); - if (dipLuckyResult.has_dip) { - console.log(`今天你已经沾过喜气,明天再来吧!`); - } else { - console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`); - } - } - } catch {} - - console.log(`当前余额:${state.sumPoint} 矿石`); - - const luckyResult = await api.getMyLucky(); - state.luckyValue = luckyResult.total_value; - console.log(`当前幸运值:${state.luckyValue}/6000`); - - const lotteryConfig = await api.getLotteryConfig(); - state.lottery = lotteryConfig.lottery; - state.pointCost = lotteryConfig.point_cost; - state.freeCount = lotteryConfig.free_count; - state.sumPoint += state.freeCount * state.pointCost; - - const getProbabilityOfWinning = sumPoint => { - const pointCost = state.pointCost; - const luckyValueCost = 10; - const totalDrawsNumber = sumPoint / pointCost; - let supplyPoint = 0; - for(let i = 0, length = Math.floor(totalDrawsNumber * 0.65); i < length; i++) { - supplyPoint += Math.ceil(Math.random() * 100) - } - const luckyValue = (sumPoint + supplyPoint) / pointCost * luckyValueCost + state.luckyValue; - return luckyValue / 6000; - } - console.log(`预测梭哈矿石累计幸运值比率: ${(getProbabilityOfWinning(state.sumPoint) * 100).toFixed(2) + "%"}`); - - console.log(`免费抽奖次数: ${state.freeCount}`); - console.log(`准备免费抽奖!`); - - console.logGroupStart("奖品实况"); - - const getSupplyPoint = draw => { - const maybe = [ - ["lottery_id", "6981716980386496552"], - ["lottery_name", "随机矿石"], - ["lottery_type", 1] - ]; - if (maybe.findIndex(([prop, value]) => draw[prop] === value) !== -1) { - const supplyPoint = Number.parseInt(draw.lottery_name); - if (!isNaN(supplyPoint)) { - return supplyPoint; - } - } - return 0; - }; - - const lottery = async () => { - const result = await api.drawLottery(); - state.sumPoint -= state.pointCost; - state.sumPoint += getSupplyPoint(result); - state.luckyValue += result.draw_lucky_value; - state.counter++; - state.prize[result.lottery_name] = (state.prize[result.lottery_name] || 0) + 1; - console.log(`[第${state.counter}抽]:${result.lottery_name}`); - }; - - while (state.freeCount > 0) { - await lottery(); - state.freeCount--; - await utils.wait(state.simulateSpeed); - } - - console.logGroupEnd("奖品实况"); - - console.log(`当前余额:${state.sumPoint} 矿石`); - - const recordInfo = []; - recordInfo.push("=====[战绩详情]====="); - if (state.counter > 0) { - const prizeList = []; - for (const key in state.prize) { - prizeList.push(`${key}: ${state.prize[key]}`); - } - recordInfo.push(...prizeList); - recordInfo.push("-------------------"); - recordInfo.push(`共计: ${state.counter}`); - } else { - recordInfo.push("暂无奖品"); - } - recordInfo.push("+++++++++++++++++++"); - recordInfo.push(`幸运值: ${state.luckyValue}/6000`); - recordInfo.push("==================="); - console.log(recordInfo.join("\n ")); - - email({ - subject: "掘金每日签到", - text: console.toString() - }); -} - -run(process.argv.splice(2)).catch(error => { - email({ - subject: "掘金每日签到", - html: `Error
${error.message}
` - }); -}); diff --git a/scripts/juejin-console-script.js b/scripts/juejin-console-script.js deleted file mode 100644 index 886b7059..00000000 --- a/scripts/juejin-console-script.js +++ /dev/null @@ -1,214 +0,0 @@ -!(({ api, console, utils }) => { - const state = { - simulateSpeed: 100, // ms/进行一次抽奖 - sumPoint: 0, - pointCost: 0, - supplyPoint: 0, - freeCount: 0, - luckyValue: 0, - lottery: [], - counter: 0, - prize: {} - }; - - !(async () => { - await utils.wait(100); - console.clear(); - - try { - const checkInResult = await api.checkIn(); - console.log(checkInResult); - const incrPoint = checkInResult.incr_point; - console.log(`签到成功 +${incrPoint} 矿石`); - - const sumPoint = checkInResult.sum_point; - state.sumPoint = sumPoint; - } catch (e) { - console.log(e.message); - - const sumPoint = await api.getCurrentPoint(); - state.sumPoint = sumPoint; - } - - try { - const luckyusersResult = await api.getLotteriesLuckyUsers(); - if (luckyusersResult.count > 0) { - const no1LuckyUser = luckyusersResult.lotteries[0]; - const dipLuckyResult = await api.dipLucky(no1LuckyUser.history_id); - if (dipLuckyResult.has_dip) { - console.log(`今天你已经沾过喜气,明天再来吧!`); - } else { - console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`); - } - } - } catch {} - - console.log(`当前余额:${state.sumPoint} 矿石`); - - const luckyResult = await api.getMyLucky(); - state.luckyValue = luckyResult.total_value; - console.log(`当前幸运值:${state.luckyValue}/6000`); - - const lotteryConfig = await api.getLotteryConfig(); - state.lottery = lotteryConfig.lottery; - state.pointCost = lotteryConfig.point_cost; - state.freeCount = lotteryConfig.free_count; - state.sumPoint += state.freeCount * state.pointCost; - console.log(`免费抽奖次数: ${state.freeCount}`); - - const getProbabilityOfWinning = sumPoint => { - const pointCost = 200; - const luckyValueCost = 10; - const totalDrawsNumber = sumPoint / pointCost; - const perhapsSupplyNumber = Math.floor(totalDrawsNumber * (2 / 3)); - let supplyPoint = 0; - for(let i = 0; i < perhapsSupplyNumber; i++) { - supplyPoint += Math.ceil(Math.random() * 100) - } - const luckyValue = (sumPoint + supplyPoint) / pointCost * luckyValueCost + state.luckyValue; - return luckyValue / 6000; - } - - console.log(`预测您必中奖幸运概率: ${(getProbabilityOfWinning(state.sumPoint) * 100).toFixed(2) + "%"}`); - - console.log(`准备梭哈!`); - - console.logGroupStart("奖品实况"); - - const getSupplyPoint = draw => { - const maybe = [ - ["lottery_id", "6981716980386496552"], - ["lottery_name", "随机矿石"], - ["lottery_type", 1] - ]; - if (maybe.findIndex(([prop, value]) => draw[prop] === value) !== -1) { - const supplyPoint = Number.parseInt(draw.lottery_name); - if (!isNaN(supplyPoint)) { - return supplyPoint; - } - } - return 0; - }; - - const lottery = async () => { - const result = await api.drawLottery(); - state.sumPoint -= state.pointCost; - state.sumPoint += getSupplyPoint(result); - state.luckyValue += result.draw_lucky_value; - state.counter++; - state.prize[result.lottery_name] = (state.prize[result.lottery_name] || 0) + 1; - console.log(`[第${state.counter}抽]:${result.lottery_name}`); - }; - - while (state.freeCount > 0) { - await lottery(); - state.freeCount--; - await utils.wait(state.simulateSpeed); - } - - // while (state.sumPoint >= state.pointCost) { - // await lottery(); - // await utils.wait(state.simulateSpeed); - // } - - console.logGroupEnd("奖品实况"); - - console.log(`弹药不足,当前余额:${state.sumPoint} 矿石`); - console.log(`养精蓄锐来日再战!`); - - const recordInfo = []; - recordInfo.push("=====[战绩详情]====="); - if (state.counter > 0) { - const prizeList = []; - for (const key in state.prize) { - prizeList.push(`${key}: ${state.prize[key]}`); - } - recordInfo.push(...prizeList); - recordInfo.push("-------------------"); - recordInfo.push(`共计: ${state.counter}`); - } else { - recordInfo.push("暂无奖品"); - } - recordInfo.push("+++++++++++++++++++"); - recordInfo.push(`幸运值: ${state.luckyValue}/6000`); - recordInfo.push("==================="); - console.log(recordInfo.join("\n")); - })(); -})( - (() => { - const cs = (() => { - const result = []; - return { - done: () => (typeof completion === "function" && completion(result), (result.length = 0)), - log: msg => (result.push(msg), console.log(msg)), - clear: () => ((result.length = 0), console.clear()), - logGroupStart: name => console.group(name), - logGroupEnd: name => console.groupEnd(name) - }; - })(); - - const api = (() => { - return { - async fetch({ path, method, data }) { - return fetch(`https://api.juejin.cn/growth_api/v1${path}`, { - headers: { - cookie: document.cookie - }, - method: method, - body: JSON.stringify(data), - credentials: "include" - }) - .then(res => res.json()) - .then(res => { - if (res.err_no) { - throw new Error(res.err_msg); - } - return res.data; - }); - }, - async get(path) { - return this.fetch({ path, method: "GET" }); - }, - async post(path, data) { - return this.fetch({ path, method: "POST", data }); - }, - async getLotteryConfig() { - return this.get("/lottery_config/get"); - }, - async getCurrentPoint() { - return this.get("/get_cur_point"); - }, - async drawLottery() { - return this.post("/lottery/draw"); - }, - async checkIn() { - return this.post("/check_in"); - }, - async getLotteriesLuckyUsers() { - return this.post("/lottery_history/global_big", { - page_no: 1, - page_size: 5 - }); - }, - async dipLucky(lottery_history_id) { - return this.post("/lottery_lucky/dip_lucky", { - lottery_history_id - }); - }, - async getMyLucky() { - return this.post("/lottery_lucky/my_lucky"); - } - }; - })(); - - const utils = (() => { - return { - async wait(time = 0) { - return new Promise(resolve => setTimeout(resolve, time)); - } - }; - })(); - - return { console: cs, api, utils }; - })() -); diff --git a/scripts/lottery.js b/scripts/lottery.js deleted file mode 100644 index 73b5b25d..00000000 --- a/scripts/lottery.js +++ /dev/null @@ -1,137 +0,0 @@ -const api = require("./utils/juejin-api"); -const console = require("./utils/logger"); -const utils = require("./utils/utils"); -const email = require("./utils/email"); - -async function run(args) { - const state = { - simulateSpeed: 100, // ms/进行一次抽奖 - sumPoint: 0, - pointCost: 0, - supplyPoint: 0, - freeCount: 0, - luckyValue: 0, - lottery: [], - counter: 0, - prize: {} - }; - - await utils.wait(100); - console.clear(); - - try { - const checkInResult = await api.checkIn(); - console.log(checkInResult); - const incrPoint = checkInResult.incr_point; - console.log(`签到成功 +${incrPoint} 矿石`); - - const sumPoint = checkInResult.sum_point; - state.sumPoint = sumPoint; - } catch (e) { - console.log(e.message); - - const sumPoint = await api.getCurrentPoint(); - state.sumPoint = sumPoint; - } - - try { - const luckyusersResult = await api.getLotteriesLuckyUsers(); - if (luckyusersResult.count > 0) { - const no1LuckyUser = luckyusersResult.lotteries[0]; - const dipLuckyResult = await api.dipLucky(no1LuckyUser.history_id); - if (dipLuckyResult.has_dip) { - console.log(`今天你已经沾过喜气,明天再来吧!`); - } else { - console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`); - } - } - } catch {} - - console.log(`当前余额:${state.sumPoint} 矿石`); - - const luckyResult = await api.getMyLucky(); - state.luckyValue = luckyResult.total_value; - console.log(`当前幸运值:${state.luckyValue}/6000`); - - const lotteryConfig = await api.getLotteryConfig(); - state.lottery = lotteryConfig.lottery; - state.pointCost = lotteryConfig.point_cost; - state.freeCount = lotteryConfig.free_count; - state.sumPoint += state.freeCount * state.pointCost; - console.log(`免费抽奖次数: ${state.freeCount}`); - - console.log(`准备梭哈!`); - - console.logGroupStart("奖品实况"); - - const getSupplyPoint = draw => { - const maybe = [ - ["lottery_id", "6981716980386496552"], - ["lottery_name", "随机矿石"], - ["lottery_type", 1] - ]; - if (maybe.findIndex(([prop, value]) => draw[prop] === value) !== -1) { - const supplyPoint = Number.parseInt(draw.lottery_name); - if (!isNaN(supplyPoint)) { - return supplyPoint; - } - } - return 0; - }; - - const lottery = async () => { - const result = await api.drawLottery(); - state.sumPoint -= state.pointCost; - state.sumPoint += getSupplyPoint(result); - state.luckyValue += result.draw_lucky_value; - state.counter++; - state.prize[result.lottery_name] = (state.prize[result.lottery_name] || 0) + 1; - console.log(`[第${state.counter}抽]:${result.lottery_name}`); - }; - - while (state.freeCount > 0) { - await lottery(); - state.freeCount--; - await utils.wait(state.simulateSpeed); - } - - while (state.sumPoint >= state.pointCost) { - await lottery(); - await utils.wait(state.simulateSpeed); - } - - console.logGroupEnd("奖品实况"); - - console.log(`弹药不足,当前余额:${state.sumPoint} 矿石`); - console.log(`养精蓄锐来日再战!`); - - const recordInfo = []; - recordInfo.push("=====[战绩详情]====="); - if (state.counter > 0) { - const prizeList = []; - for (const key in state.prize) { - prizeList.push(`${key}: ${state.prize[key]}`); - } - recordInfo.push(...prizeList); - recordInfo.push("-------------------"); - recordInfo.push(`共计: ${state.counter}`); - } else { - recordInfo.push("暂无奖品"); - } - recordInfo.push("+++++++++++++++++++"); - recordInfo.push(`幸运值: ${state.luckyValue}/6000`); - recordInfo.push("==================="); - console.log(recordInfo.join("\n")); - - email({ - subject: "掘金每日签到", - text: console.toString() - }); -} - -run(process.argv.splice(2)).catch(error => { - email({ - subject: "掘金每日签到", - html: `Error
${error.message}
` - }); -}); diff --git a/scripts/seaGold.js b/scripts/seaGold.js deleted file mode 100644 index 845522eb..00000000 --- a/scripts/seaGold.js +++ /dev/null @@ -1,400 +0,0 @@ -const api = require("./api/juejin-api"); -const juejinGameApi = require("./api/juejin-game-api"); -const utils = require("./utils/utils"); -const { Grid, Astar } = require("fast-astar"); -const console = require("./utils/logger"); -const email = require("./utils/email"); - -async function run(args) { - console.clear(); - - class SeaGold { - static async init() { - const user = await api.getUserInfo(); - const token = await api.getToken(); - juejinGameApi.setUser(user); - juejinGameApi.setToken(token); - const seaGold = new this(); - await seaGold.init(); - return seaGold; - } - - nodeRules = [ - { code: 0, hasBounty: false, isWall: false, name: "空地" }, - { code: 2, hasBounty: true, isWall: false, name: "矿石", isBest: true }, - { code: 3, hasBounty: false, isWall: false, name: "星星" }, - { code: 4, hasBounty: false, isWall: true, name: "贝壳" }, - { code: 5, hasBounty: false, isWall: true, name: "水母" }, - { code: 6, hasBounty: false, isWall: true, name: "石头" }, - { code: 10, hasBounty: true, isWall: false, name: "上指令" }, - { code: 11, hasBounty: true, isWall: false, name: "下指令" }, - { code: 12, hasBounty: true, isWall: false, name: "左指令" }, - { code: 13, hasBounty: true, isWall: false, name: "右指令" }, - { code: 14, hasBounty: true, isWall: false, name: "跳跃指令" }, - { code: 15, hasBounty: true, isWall: false, name: "循环指令" } - ]; - - debug = false; - userInfo = { - uid: "", - name: "", - todayDiamond: 0, // 今日获取矿石数 - todayLimitDiamond: 1500, // 今日限制获取矿石数 - maxTodayDiamond: 0 // 今日最大矿石数 - }; - - gameInfo = { - gameId: "", - mapData: [], - curPos: { x: 0, y: 0 }, - blockData: { - moveUp: 0, - moveDown: 0, - moveLeft: 0, - moveRight: 0, - jump: 0, - loop: 0 - }, - gameDiamond: 0 - }; - - get isGaming() { - return this.gameInfo && this.gameInfo.gameId !== ""; - } - - async init() { - const loginInfo = await juejinGameApi.gameLogin(); - if (!loginInfo.isAuth) { - throw Error("玩家未授权, 请前往掘金授权!"); - } - console.log(`玩家: ${loginInfo.name}`); - const info = await juejinGameApi.gameInfo(); - this.userInfo = { - uid: info.userInfo.uid, - name: info.userInfo.name, - todayDiamond: info.userInfo.todayDiamond, - todayLimitDiamond: info.userInfo.todayLimitDiamond, - maxTodayDiamond: info.userInfo.maxTodayDiamond - }; - if (info.gameStatus === 1) { - this.restoreGame(info.gameInfo); - } else { - this.resetGame(); - } - } - - resetGame() { - this.gameInfo = { - gameId: "", - mapData: [], - curPos: { x: 0, y: 0 }, - blockData: { - moveUp: 0, - moveDown: 0, - moveLeft: 0, - moveRight: 0, - jump: 0, - loop: 0 - }, - gameDiamond: 0 - }; - } - - restoreGame(gameInfo) { - this.gameInfo = { - gameId: gameInfo.gameId, - mapData: this.makeMap(gameInfo.mapData, 6), - curPos: gameInfo.curPos, - blockData: gameInfo.blockData, - gameDiamond: gameInfo.gameDiamond - } - } - - async gameStart() { - if (this.isGaming) return; - const gameInfo = await juejinGameApi.gameStart(); - - this.gameInfo = { - gameId: gameInfo.gameId, - mapData: this.makeMap(gameInfo.mapData, 6), - curPos: gameInfo.curPos, - blockData: gameInfo.blockData, - gameDiamond: 0 - }; - - console.log("╔══════游戏开始══════╗"); - console.log(`gameId: ${this.gameInfo.gameId}`); - console.log(`curPos(${this.gameInfo.curPos.x},${this.gameInfo.curPos.y}): ${this.gameInfo.gameDiamond} 矿石`); - } - - async gameOver() { - if (!this.isGaming) return; - const gameOverInfo = await juejinGameApi.gameOver(); - this.userInfo.todayDiamond = gameOverInfo.todayDiamond; - this.userInfo.todayLimitDiamond = gameOverInfo.todayLimitDiamond; - // console.log("|==================|"); - const gameDiamond = this.gameInfo.gameDiamond; - console.log(`游戏清算: ${gameDiamond} 矿石`); - console.log("╚══════游戏结束══════╝"); - this.resetGame(); - return gameDiamond; - } - - async executeGameCommand() { - const bmmap = this.getBMMap(); - const curNode = this.getNode(this.gameInfo.curPos); - const bestNode = this.getBestNode(bmmap); - const path = this.getRoutePath(bmmap, curNode, bestNode); - const commands = this.getCommands(path); - if (commands.length <= 0) { - console.log("当局游戏资源耗尽"); - return false; - } - const gameCommandInfo = await juejinGameApi.gameCommand(this.gameInfo.gameId, commands); - this.gameInfo.curPos = gameCommandInfo.curPos; - this.gameInfo.blockData = gameCommandInfo.blockData; - this.gameInfo.gameDiamond = gameCommandInfo.gameDiamond; - console.log(`curPos(${this.gameInfo.curPos.x},${this.gameInfo.curPos.y}): ${this.gameInfo.gameDiamond} 矿石`); - return true; - } - - getCommand(start, end) { - const [sx, sy] = start; - const [ex, ey] = end; - - if (sx === ex && sy !== ey) { - return sy > ey ? "U" : "D"; - } - - if (sy === ey && sx !== ex) { - return sx > ex ? "L" : "R"; - } - - return null; - } - - getCommands(path) { - const commands = []; - for(let i=0; i${i+1}`); - } - commands.push(cmd); - } - return commands; - } - - getNodePosition(map, node) { - for (let y = 0; y < map.length; y++) { - const list = map[y]; - for (let x = 0; x < list.length; x++) { - const cNode = list[x]; - if (cNode === node) { - return { x, y }; - } - } - } - return { x: 0, y: 0 }; - } - - getRoutePath(map, startNode, endNode) { - const maze = this.generateMapMaze(map); - const startPos = this.getNodePosition(map, startNode); - const endPos = this.getNodePosition(map, endNode); - - if (this.debug) { - console.log("地图", this.getMaze(map)); - console.log("开始位置", startPos); - console.log("结束位置", endPos); - } - - const astar = new Astar(maze); - const path = astar.search( - [startPos.x, startPos.y], - [endPos.x, endPos.y], - { - rightAngle: true, - optimalResult: true - } - ); - - return path; - } - - makeMap(mapData, grid = 6) { - const map = []; - for (let i = 0, y = 0; i < mapData.length; i+=grid, y++) { - const row = []; - map.push(row); - for (let x = 0; x < grid; x++) { - const cell = mapData[i + x]; - row.push(this.createMapNode(x, y, cell)); - } - } - return map; - } - - createMapNode(x, y, secret) { - const rule = this.getNodeRule(secret); - return { - code: rule.code, - bounty: rule.hasBounty ? this.getBounty(secret, rule.code) : 0, - x, - y, - isWall: rule.isWall, - isBest: !!rule.isBest - } - } - - // 获取范围地图 - getBMMap() { - const { mapData, blockData, curPos } = this.gameInfo; - const minX = Math.max(curPos.x - blockData.moveLeft, 0); - const maxX = Math.min(curPos.x + blockData.moveRight, mapData[0].length - 1); - const minY = Math.max(curPos.y - blockData.moveUp, 0); - const maxY = Math.min(curPos.y + blockData.moveDown, mapData.length - 1); - - const map = []; - for (let y = minY; y <= maxY; y++) { - const row = []; map.push(row); - for (let x = minX; x <= maxX; x++) { - row.push(mapData[y][x]); - } - } - - return map; - } - - getNode(pos) { - return this.gameInfo.mapData[pos.y][pos.x]; - } - - getBestNode(map) { - let bestNode = null; - map.forEach(row => { - row.forEach(node => { - if (node.isBest && bestNode === null) { - bestNode = node; - } else if (node.isBest && node.bounty > bestNode.bounty) { - bestNode = node; - } - }); - }); - return bestNode; - } - - getMaze(map) { - return map.map((row, y) => { - return row.map((node, x) => { - if (node.isWall) { - return 1; - } else { - return 0; - } - }); - }); - } - - // 生成迷宫 - generateMapMaze(map) { - const grid = new Grid({ - col: map[0].length, - row: map.length - }); - - map.forEach((row, y) => { - row.forEach((node, x) => { - if (node.isWall) { - grid.set([x, y], 'value', 1); - } - }); - }); - - return grid; - } - - getNodeRule(secret) { - return this.nodeRules.find(rule => { - const reg = new RegExp(`^${rule.code}`); - return reg.test(secret); - }); - } - - getBounty(secret, key) { - const reg = new RegExp(`^${key}([0-9]*)`); - const match = secret.toString().match(reg); - if (match) { - const materials = Number.parseInt(match[1]); - return !isNaN(materials) ? materials : 0; - } - return 0; - } - } - - const seaGold = await SeaGold.init(); - - async function runOnceGame() { - try { - if (seaGold.isGaming) { - await seaGold.gameOver(); - } - await seaGold.gameStart(); - let run = true; - while (run) { - await utils.wait(utils.randomRangeNumber(1000, 1500)); - run = await seaGold.executeGameCommand(); - } - return await seaGold.gameOver(); - } catch (e) { - await seaGold.gameOver(); - throw e; - } - } - console.log(`今日开采限制: ${seaGold.userInfo.todayLimitDiamond} 矿石`); - if (seaGold.userInfo.todayDiamond >= seaGold.userInfo.todayLimitDiamond) { - console.log(`今日开采已达上限!`); - } else { - const maxZeroCount = 5; - let zeroCount = 0; - const runEndTime = new Date(); - runEndTime.setMinutes(runEndTime.getMinutes() + 30); - let runTime = new Date(); - console.log(`准备挖矿!`); - console.log(`当前进度: ${seaGold.userInfo.todayDiamond}/${seaGold.userInfo.todayLimitDiamond} 矿石`); - while (seaGold.userInfo.todayDiamond < seaGold.userInfo.todayLimitDiamond) { - if (runTime >= runEndTime) { - console.log("掘金游戏异常: 服务运行时间过长."); - throw new Error(console.toString()); - } - await utils.wait(utils.randomRangeNumber(1000, 1500)); - const gameDiamond = await runOnceGame(); - if (gameDiamond === 0) { - zeroCount++; - } - if (zeroCount > maxZeroCount) { - console.log("掘金游戏异常: 您 0 矿石游戏对局次数过多."); - throw new Error(console.toString()); - } - console.log(`当前进度: ${seaGold.userInfo.todayDiamond}/${seaGold.userInfo.todayLimitDiamond} 矿石`); - runTime = new Date(); - } - - if (seaGold.userInfo.todayDiamond >= seaGold.userInfo.todayLimitDiamond) { - console.log(`今日开采已达上限!`); - } - } - - email({ - subject: "海底掘金游戏", - text: console.toString() - }); -} - -run(process.argv.splice(2)).catch(error => { - console.log(error); - email({ - subject: "海底掘金游戏", - html: `Error
${error.message}
如版本过低请前往升级: juejin-helper
` - }); -}); diff --git a/scripts/utils/email.js b/scripts/utils/email.js deleted file mode 100644 index b24ed3d1..00000000 --- a/scripts/utils/email.js +++ /dev/null @@ -1,51 +0,0 @@ -const nodemailer = require("nodemailer"); -const path = require("path"); - -async function main({ subject, text, html }) { - const env = require("./env"); - - const auth = { - user: env.EMAIL_USER, // generated ethereal user - pass: env.EMAIL_PASS, // generated ethereal password - }; - - const transporter = nodemailer.createTransport({ - host: "smtp." + auth.user.match(/@(.*)/)[1], - secure: true, - auth - }); - - const template = ` -
-
- 稀土掘金 -
-
- ${html ? html : `
${text}
`} -
-
- 稀土掘金助手 | - Copyright © 2022 Derek Li. -
-
- `.trim(); - - await transporter.sendMail({ - from: `稀土掘金助手 <${auth.user}>`, // sender address('"Fred Foo 👻" ') - to: env.EMAIL_TO, // list of receivers - subject, // Subject line - // text, // plain text body - html: template, // html body - attachments: [{ - filename: "logo.svg", - path: path.resolve(__dirname, "../../resources/logo.svg"), - cid: 'logo.svg' //same cid value as in the html img src - }] - }); - - console.log("已通知订阅人!"); -} - -module.exports = main; - -// main().catch(console.error); diff --git a/scripts/utils/env.js b/scripts/utils/env.js deleted file mode 100644 index 2e98bcb7..00000000 --- a/scripts/utils/env.js +++ /dev/null @@ -1,8 +0,0 @@ -const env = process.env || {}; - -module.exports = { - EMAIL_USER: env.EMAIL_USER, - EMAIL_PASS: env.EMAIL_PASS, - EMAIL_TO: env.EMAIL_TO, - COOKIE: env.COOKIE -}; diff --git a/scripts/utils/logger.js b/scripts/utils/logger.js deleted file mode 100644 index 331e4be8..00000000 --- a/scripts/utils/logger.js +++ /dev/null @@ -1,84 +0,0 @@ -class LogNode { - constructor(data, parent = null, leaf = true) { - this.data = data; - this.parent = parent; - this.level = parent ? parent.level + 1 : 0; - this.leaf = leaf; - - if (!leaf) { - this.children = []; - } - } - - toString() { - const level = this.level - 1; - const isGroup = !this.leaf; - return `${' '.repeat(level * 3)}${isGroup ? '▼' : level > 0 ? '-' : ' '} ${this.data}\n`; - } -} - -class Logger { - result = this.createNode(null, null, false); - current = this.result; - - createNode(data, parent, leaf) { - return new LogNode(data, parent, leaf); - } - - clear() { - this.result = this.createNode(null, null, false); - this.current = this.result; - console.clear(); - } - - log(msg) { - const node = this.createNode(msg, this.current, true); - this.current.children.push(node); - console.log(msg); - } - - logGroupStart(name) { - const current = this.createNode(name, this.current, false); - this.result.children.push(current); - this.current = current; - console.group(name); - } - - logGroupEnd(name) { - const current = this.current.parent; - this.current = current; - console.groupEnd(name); - } - - toString() { - const each = children => { - if (!Array.isArray(children)) return ""; - let content = ""; - children.forEach(child => { - content += child.toString(); - if (!child.leaf) { - content += each(child.children); - } - }); - return content; - } - return each(this.result.children); - } -} - -const logger = new Logger(); - -module.exports = logger; -// logger.log(2) -// logger.logGroupStart("group 1") -// logger.log(3) -// logger.log(4) -// logger.log(5) -// logger.logGroupStart("group 2") -// logger.log(6) -// logger.log(7) -// logger.log(8) -// logger.logGroupEnd("group 2") -// logger.logGroupEnd("group 1") -// logger.log(9) -// logger.toString(); diff --git a/scripts/utils/utils.js b/scripts/utils/utils.js deleted file mode 100644 index 2fafe4b2..00000000 --- a/scripts/utils/utils.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - async wait(time = 0) { - return new Promise(resolve => setTimeout(resolve, time)); - }, - randomRangeNumber(start = 500, end = 1000) { - return (Math.random() * (end - start) + start) >> 0; - } -} From bc6ed5cb28c0dfea3c3c99cc67d688116b9b2192 Mon Sep 17 00:00:00 2001 From: derek Date: Sat, 5 Feb 2022 11:12:33 +0800 Subject: [PATCH 008/131] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 70 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index f6a9b010..b8c650ad 100644 --- a/README.md +++ b/README.md @@ -8,48 +8,64 @@

签到、抽奖、沾喜气、海底掘金游戏、自动化工作流。

-## 使用 +## 示例 -自动化执行任务: 掘金每日签到, 沾喜气, 免费抽奖, 海底掘金游戏, 最后将结果报告邮件通知订阅人。\ -自动化运行时间: 北京时间上午06:30 +### 签到示例 +```javascript +const JuejinHelper = require("juejin-helper"); -1. [Fork 仓库](https://github.com/iDerekLi/juejin-helper) +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); -2. 仓库 -> Settings -> Secrets -> New repository secret, 添加Secrets变量如下: + const growth = juejin.growth(); - | Name | Value | - | --- | --- | - | COOKIE | 掘金网站Cookie, 打开浏览器,登录 [掘金](https://juejin.cn/), 打开控制台DevTools -> Network,复制 cookie, **掘金Cookie有效期约1个月需定期更新.** | - | EMAIL_USER | 发件人邮箱地址(需要开启 SMTP) | - | EMAIL_PASS | 发件人邮箱密码(SMTP密码) | - | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | + await growth.checkIn(); // 签到 + // await growth.getCurrentPoint(); // 获取当前矿石数 + // await growth.getLotteryConfig(); // 获取抽奖配置 + // await growth.drawLottery(); // 抽奖 + // await growth.getLotteriesLuckyUsers(); // 获取抽奖幸运用户 + // await growth.getMyLucky(); // 获取我的幸运值 + // await growth.dipLucky(); // 沾喜气 -3. 仓库 -> Actions, 检查Workflows并启用。 + await juejin.logout(); +} -## 预览 +run(); +``` -| 掘金每日签到 | 海底掘金游戏 | -|:-----------:| :-------------:| -| ![掘金每日签到](https://user-images.githubusercontent.com/24502299/150481822-b488d30c-93b6-4d73-9e28-56c04a9413fb.png) | ![海底掘金游戏](https://user-images.githubusercontent.com/24502299/150625136-5649d2fe-b204-40aa-b8b5-7f54a44e018d.png) | +### 海底掘金游戏示例 +```javascript +const JuejinHelper = require("juejin-helper"); -## 问题 +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); -### 如何获取Cookie + const seagold = juejin.seagold(); -掘金网站Cookie, 打开浏览器,登录 [掘金](https://juejin.cn/), 打开控制台DevTools(快捷键F12) -> Network,复制 cookie, **掘金Cookie有效期约1个月需定期更新.** + await seagold.gameLogin(); // 登陆游戏 + + let gameInfo = null; -DevTools截图: -getcookie + const info = await seagold.gameInfo(); // 游戏状态 + if (info.gameStatus === 1) { + gameInfo = info.gameInfo; // 继续游戏 + } else { + gameInfo = await seagold.gameStart(); // 开始游戏 + } -### 如何授权海底掘金游戏 + const command = ["U", "L"]; + await seagold.gameCommand(gameInfo.gameId, command); // 执行命令 -运行自动化后通知订阅人 `玩家未授权, 请前往掘金授权!`, 说明您是新玩家从始至终未进行海底掘金游戏, 需要先进行游戏授权. + const result = await seagold.gameOver(); // 游戏结束 + console.log(result); // => { ... } -授权步骤: 登陆 [掘金](https://juejin.cn/) -> 每日签到 -> 海底掘金挑战赛(点击进入游戏, 点击授权, 最好再随意玩一局). 后续就可以由掘金助手自动处理. + await juejin.logout(); +} -或点击👇这个海报帮您直达海底掘金挑战赛 - -[![海底掘金挑战赛](https://user-images.githubusercontent.com/24502299/151397151-0d69998a-2310-4a32-945f-c8e0035ed65d.png)](https://juejin.cn/game/haidijuejin/) +run(); +``` ## 赞赏 ### ☕️微信赞赏!鼓励升级! From 85ee6170e8a3184710a9cae183dae44f2546f340 Mon Sep 17 00:00:00 2001 From: Derek Li Date: Sat, 5 Feb 2022 11:17:08 +0800 Subject: [PATCH 009/131] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index b8c650ad..f15ca0d6 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,15 @@ async function run() { run(); ``` +## 问题 + +### 如何获取Cookie + +掘金网站Cookie, 打开浏览器,登录 [掘金](https://juejin.cn/), 打开控制台DevTools(快捷键F12) -> Network,复制 cookie, **掘金Cookie有效期约1个月需定期更新.** + +DevTools截图: +getcookie + ## 赞赏 ### ☕️微信赞赏!鼓励升级! 微信赞赏 From 5d7e14faec1fe598712e46bfd1309b38e6cc4e41 Mon Sep 17 00:00:00 2001 From: derek Date: Sat, 5 Feb 2022 11:21:04 +0800 Subject: [PATCH 010/131] =?UTF-8?q?chore:=20=E7=A7=BB=E9=99=A4=E6=88=AA?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/getcookie.png | Bin 511696 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/getcookie.png diff --git a/resources/getcookie.png b/resources/getcookie.png deleted file mode 100644 index 94dc65d5291f2b2522e183d1e5eaa2a96bd71b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511696 zcmb4qbx>VTmo3i4F9Cu(1Pku&POu=s-GW1Khl@jyAi>?;_2LAAySqCVcX)jBW?s!V z_5PUOsqX5ou0D07Pw&0f+WUknD@vmw6CguDL7~aYNT@lwp3|2j9j-&p#C z(%%uV8`Q+ft{fF_@kgkZEdeWCcNS+|Ir?AM*kn-fN7Zh-m!=;yY;3Uo*?3;{*4F)9 zl`Hw^n_qd~3?xIDV=tgYK8d7{C0{s^+rdCpZOG<(Kml<)Bdt6>z-J=XRAM6lF0|pt z)VB1H(<}R;VY!eTZNivgv!!;O3R0jfSAsmvg_yA}Exkh)v_^2lp(lu-9ify4cg4%Y zd?f77u;H147d|e@lZ9MBonN2xu)qDu66zb@HAgox(}&IdND(jV)Xe@mKJ{$>cQg*; zu{tE0K0&IF?lP3KJyDQaHJ}9O7CxP4g540(tl6hIM+}ufkswV)f2u;68HIL?hzI1q zY9WsU5{eRi8VmoadN|E4VMG+RX(w6~dC7wWJQi=4AVZ1PT(pT(4FCEdX3d^&lO*T& zlYtmg2DuT*%otR?=)^?kq4!nD6ZsvB$_j5h?5(28(MJH}|699Fsm_&$3_3XwB`gt8 z#O$Q*bA)kpuZ|}j9*+&_FFA>HG7EYz)&Wr{)+3V+VttaJJr2s)azxw;Z81!SH`dr9 zixJ^s`p$yeK}MyP!hfqvrWmDpaV>WlxSe3_7(qp&VHT5y;?#rV=^VCd_Ha?!;I2xt zk}l^fARdpKmK}w~Jh=7qr~03uDmWE?G%+ZwK_hv@uOc6T4X(2;-3CJ`EM4%bu}E-T zDh2quaRMxqAwB}MP<~=mP_;QO-LQ2qu^2Z7A@xIRn5L*Bdl=<|2ukE*@Nr~_uSpo? zA22-RVU)6^t})Ja7u;Fah!(J~-t>iwUkZ&xza+>}l3owa5Y|@C#whKet z@O8&N2{Lr<2RmkU3v?`EWqw!!!~o`zPC?7RBvJB(C3q3)#a~&}8K*j{;O)?O1tEqj zq_yJa=>dc=(ksM|Mwb%-;y>W&PhJ>HD^b~ic6A=IKz&;# z>Pe-jy(8>}sW{1`@Ux@35KdwOuO`16pP$CqE>ht>9Xg3uglULc0^Nv7?Z&cb*G`y+ zBIWPOvC2v)+BMFhfq9)jUHouHy7z@Tfbr(e=FZN}i!`Q7EU3_tjSKs?!nzh1QY;9s zj~$K@)2QZ=gQT>-64Dptf_cD0 zHV``~(U6!HHm#eh8s!8YQH0nMj;0IW0aF)YzFV)^i?2(50&Oiw2u@T6fR;mv5JqPl z%tKZg#{Iz`M4=)>6d#yRo)U%^M_CseEW=t$KquZvp*~nOh`9sjL}DdwM~M-qxPx|y z)UQlm8cC2hcOWxEXqFRa3B!juDp8aRe?akrS35!@*K0!i8qO0F{IfBSd6ERx@CXl< zy_bm9J}SE3u;d%Ur~W-d$!|y+;j@Nl5WkLy1{1vn>GZH^$4_SfHwU=Puq#N(J&`xQ ze#m)`^~KkF^=I<6Xg}%+fD{~JAaj5?p7bD<0wwkbIRHN(6sc%a>xitK=0iAYF4`nY zWPp0q&49SQr-$DZI&tbQMusVo-!dQ52@S25VJgU6O75Y!&np0Og*A#p}_r&3SHh3zK? zLmkPMr7BmFlU}%z*RHOq$*p;(LR!Y8npLD<+F|gL{wRJEqefgRnD`|_B=KwVS2xwP z;-(UND~?o7#;_#0;XKA7^-0Akk_k`F0|G??BD9V_y3tP2+R+RIRUCg)HBvv1%BI4n zQl}zvGF!P?#Wj>SENJUi@M`aBOV`_dzptoX?VZ=k zulur}KW4%w)s$U#DDWuu==x~o8Oo$GFO{5^R-jYfrrD(4q@yG~uE#8E->ToTrUG_F z_)~4}fX5q!69pSZ7^T!3642U{AHGA1&@L9$4t(S@~w% z-hH3%n2gj*HAppVTJe|lm*Uq}EB}(g9~Fm=)3^$PpCVIwKbvJ5yQbl%NdEpi+L+pq zdXuvJn|!tPfJfVv z9xie6Bom4*f$m!KQro5OuwGTm9z^9oxCH5L}jFR*O)y5UG!#&y_dE{p;@jLGo$S^7#X8no6L` zvb5kW_uc-Z{f#|_AwoX94U#1W2g(kD27(ZBEno}r6yW)%*2Jvlwpt&aA5lIC1JTd$ zsn(({O{_W=5}O-4r<^g-H&Hu*XtZaPVl->Cx=FIh-kU}Nz>LEzqp)*|;uTQDDe|hH zKUmCDl2oPKrW~dqm0XmT%_I1eZ6Xz;#lELsuU^m7%7oD8U_95i64MZ#LGZNvZEInn zX4fR^PfOou1V5otOcqfm|ErIfLr(;#Exa-OvTu)SG#^P;U6wRnJYJKgDTa{O?zTCS zE`%;O;ZaTXyXw);naqov?fK~Q-y5ts4n5J~Tv$a)0>XbCRLAo3esR(`(~v4q=2I7) zDn5-wZ)!MsP4OP$9Igs**$bXi3x{lTnJ1HJAW}RVp0A^aq^)? z(kypg3sWntPRMk?^nB!OTy|_RxhyFy$xEV~a_nPPsxh0{V**!rP`>h%(5%~0Ysu=A z%pp2HMH+3{_;fJo4WpCJgVJT_1N6i019&>VkT|_kP)`7C7V;8Rz@CW%!g*%H%KDqO zC@^d@_pF6sQD<(S5i}y3H7zi2e3sineATmmnyQqNCHQs+KZc^g?B2xUVbn{pEqV1( z@Rjbl=twMD%xZJA-#3z*xjQ*5sh-J2r`70ip2BxB*m!>{ertT#eVFO_Orevwa zIs59BYNy_PHlxLx%Z*DP94Q=m1|gdr`}SHo%dey6+oSzy!nT;UEe)LB*0u#MW`DW1 z8lP>InrLi=pCa#=)%j7~u+Q&nzqZ%;Xs%R#Ro7QnZ;N)VDwZnSoz3w2bkfq!ZEEim zZ8AFN6XnzY)b0E5irZQE;<+ud6R;PwhG>nhMO@0GAgrqvIWty#T8TB+Fkdv&M2zo~ z-_l*R39(n~JhkDl{w!ST_M@M5s77+&F$S0D+$x^KC1X(FqS?dgYW3H)qCP+8t=jS7 z;Pn0&D1+A{$>sK*_suza-)Ee(Wy2@uEO)0?Y%Z>QI@Z}V(j!)^S0!Q-${GU1X` z19962_uanP*fNVs$4b3+5+CrX)K;_(H_eJoXMg9-v+LODyxZmZ^=gJ&j6>By$J|Ri zq7(-GTlJHPL7T(lSM`(3QXU*p7)nNyib0_;8-H!C+DCKliJcX783 zezYgFpB&Rae|;K{&}^(if5Exdl)q~}`#C=~|6-p6=5%kn%6Mwq%UsArJa=Bd^PxTB zJXpP%eA-@A`kR$`^W{n5QTMU`Oul!1u*FXQ09_mqw8fse3fJYkP`)o}w}71mK@x>>aVGpuA7|Fw zLf=vh`6O|0dhTb93RME_&ph?|+7bQoV$j%YXb(HVq3(gG4!~T)Z-k?paPfH+fCSN= z7p?E!Zv(I~n}bLP{Gdk_VnSI=r1{^uhmF}cS@SPnpy=QG04O+U0x08ljD-r-ahC+({hh@hI1{<)u`D<95@*h4TS%8?tKYFD=f&dT*%jw!O zJzda?s~(lYyDV2SQf{%fMzwaQ-%2iZK8Am^o6q-tdsC)I>qD3f%zrE$Wvyw8Zn4Yp z+z{wuoBC{_raB>C<8+Dbc~2+*TaB^N-%p7O`G1rO$cHA__gGJF_P z8aTzM`W4#Ap{ocJC*e;5dQOkF`dT!UGF?>Ai0oDSy=Xi=?sU2FZ*75m!PosUtx=}Y zTS9I-)=ol>;xuz!zyJO9O_`zH(F4_sl@*5)!bjIKc2&;?e)j*(5toiiraG3S6((vD zUg>bZm$y#dzik$}M(z+80EuH5#l%ey(uf4aW;xgUtqW12w_crjJ?8_wS(zGRgq}sl zij~9u_g{D{H(;UK*h8HNR0lE%5*Z|6NLqYo_g>*qG}wy_t@;sHi@Jn(faATWR~jn9 zL8bjl2Gj^p)?H!M>afxJHrQY@D`#vn45DT>7yD;h>LI#|b=L8|4(xR&RUiV$EqY&7 zxfZ{@T2E3f^TZh&@$QzAY2em9z|Kb*|}x==)Rwf#~Y zS_m$xQ!8F>OODm?Oc+!pc`(}c@w$5uRNx5+=L%x69NEwEiWIaxvcC)sB`uU0l<#{} zSb!57PGaQr3Mi%_LcrC$+8a%@4n;+ib{z@&2R9%?mW-tE`l683FUkW_vdD~YO+=9^ zl8@ZG#FYGVwh1awSY(?jRxz;;AcG3b{*zUq)1=7fa+WTo8+7eBu$6C8r1;7;JiB{! z!;|5zd zrWvElK3-^ZxDXMLkT~pY0H5Y4~lMkzMe-y|i#)qI04*I`p%4oeDMSOgL zgP48H6vh3lOC=pcf&&0S8q^;yck?yJNv2v|%8FlpZ(cEXa4?73wO=66>9wj|XO-*n z!7S5sqco=3wF^zFg7RXTw(b&Z9lFJ=rt)ik98U30`0Vw zUXBWjhnd@wwsxT{eVCJW2A@m1Fs0M$Mt9I<1F{cGuqXs8OlB}5s2U9DkQmz(|Be&#kCebH^}<>~gX6<9evWc@5cy^YJDmIr_FLD1`NXvyXHbR4y)nTH&> z)NJ)@@z3j+LmsWcp$8^dd8xscLD2I@5Fxvhox#I@u>Jm{8T%yFHfdZ`QcNL zDS7da0NbhCt=_wJZi>86lApSpqlaIMMrx7<5n*yJus)?I0_eNwDxO;CfR`?(#6my% zbYm>WGly9NCiV@Y;=lw0ZiBJis`HbWtGN`iE0m6%c_OqvD5RF8Tex5gf!hP|qdg8T zpHD{LF1tfX|0)uz)g@&Il54+GL#bq)E^krGnZx9y(DPLvUdaoSRn7b)^?TGR{E`-T z=J1nLm?;vMnbq%Z-7UtKu77-DN;D!De&D*SNz;Ik&i$h!f$#ZZou*XTpx<8k;^nkG1j?ibi`i~wZN^9}EO zxfVm4+c~Q-H!`SJo3L5%-vG{zKtP`}jRg8DRe>>zY{`dU)A1!Yb+T(;8TbdiEUeCn z7}=HaZeY)f>oMb0xz=>-<>**6eKHemq6zHXwbzzHt&I>c6*qUfNNKpqq?0?;c{UOD z3M2y14=kV0a>%6F;eGcGY=#@z4(4gQ?LaxywYWKJ+Ir*u2zmJz2t#^YWv#A=FuuqH z`*V^`G_7UU5rbh$I4FIKEMJ-==lweqgcn2JJZ*Yq00LUjhJ{`sK^&0`nk5u|?gyJ3 z!}pYlP^2v9R;;6_NC>!P{kE<1RJjlm9oqPPo_e(WX&(mHJceHHVCg zx%l6|O$C;i^cr=^%Da4^0$IIz@oY6pR3)#Bq&CHZ!IIqb;GVf^!R7z0+8fYWMg z>*wERj{q-}z_py_2mu1RB`Rz?N1*G+8kn3+uqTS~l3A0j=KR-=KGE0P$ohp(1lX3ZKgs!%ap_dm zfFS`%ok&qHw_cR!J)^r91EiSl$u$Vj&|;ij%Y$ieJ~}K1T=r`)htoyLUwW((KDcj3 z`~5wpe8X?Z!Oz9^s>JphTk$aOyivP%lM`p{W>`q)z1opeUy_d4)W@c~%Ojsh|M)z~ z_GzOEWAbZn$1`Mm{8K(LNDM%SYgdEQ6WJZh+)gwl)Aa?4Db)IXwe@X$tF*yVV_6ud z*3?<}PDVd5MPx+rdhpg0ZhQixbPc=+lr%(gvyK0fCs+dwpy1N zpTlRmje42;5WdemuAj%k@&lJxkUyMHvl4)?he!C1LSMn2cd}SasF|UKN@=N!g|+X% zH4F=2rhNcV^oQ*A+I1{~2z#aPS(;>M`TIl{l=_fC8y_Q*{E!T@?Gpd2^v*9qM5e2a zU~v*=k|UWr7Es`O;?3lfRwSVjSYUZ{ zGl&!^68m@}09-r2q;e$P9CQE1%Y1kLEMmX8Y_(DBT3JA;i}hA@HtQX|&ubkfp(E+M z%gsLalesNguJ8CrtKGCj7M7Wg`W@(`a$3u!aaH8Y#8G_u!toO7TrFw;p?b5|UXBvo zi9~v}mEgPL!>09WFbZw~7NC0?s9SNaYz`z-n-@*>yg8Do&~8Xy#KS#uIMr`cWGqqc zXfM}m8%vMD;`5K{&K&cs?4GgeX2YoeJm%B9&#c=_=5QD$_3HlYSfbgP$Mmn@00|_uNq4YO2h}^%NI}Q45oD}B2&bV$juL@sF#w| zl0SV(`%b*V$dJT5-?;x;d3t$eGWLr-9Oyu7T*(?D_7}V z8JK9Q4)LBKEzvEA$L!g9u2fNh?ny)=@oq>mszgSMFVJaXDtyhsfL5ZOtru)A_h2t6 zH89-pg|3n% z;QB7Wt+rSv^PUm&yAq6R03{xr>7weJ%^g>QIXmSN8DtS{xqUoT{+8YGUh_Mg>lcc} z6WX_T7quBdf*0#=pPP#ax$I`VMm{b!`E?%Vk?oL4(6X|!uH~0CWD@gwt3B0>Mjrrf zkTBK@ZUQjLD{X!=TsJ9)-kl3)yX2Moc2A2P-6I9Jt1M^R>NKUaek9b@L#x0&V2k|oz~ko#e2z&_*W_y?blJS8uB0;CB{dPDWH_zl#9P|Q9KZ_s}Af`G+Hi^9UC zg!K$y_$H2Qh6~+zwgNZ4DadIS%B}LfDlrx2H=U;+hXb!tu$Q9zELX z!uzc{O_fqaKUA~GA^;AVOxApg?6hb0p%|pBFQ@{M zEu+(<`qYvUALD*v_qAN)KV_(pV%#a$KP+Dp^gGip>0OiWj~g7E#x%1_yy#RL#MT<)qKge#b1g!U3Rt1YWYr(LwwoA&h-=R zj^o<79RBGfL-PqM39;zky!1v4R68OLLjtYWFHf18coJsDfm^0TJ}G#2~U106Zvk1(RcS;r&A6ZZx|x{}qFSw28P^Va8ehdlYec zCJuIg$|g07+pW?=OIgQ2Upf_~G^s+{OuHtTQHOpwnQ{0N-^kpDZw1DgDp}ErSJYex z7OYUA)fDcs7|T`6EuExyLHG(m+$gBETD{S>k5MU3cX~}_$*FEreG9s+KT@6_mpMFM zTP%JUQmJzQPkhN?wCml&%in?W*&IN-dVRCkj>CY+WaENHeN(&l3%*&1yf7-1q2YPf z+p}BhB{`!$z#{$qGyMVug!w(?wSZq5P)L;hJj zEwme>$mivzX-_)@4;W;vm?q>CVukSr*?_e|AQoTzlft}5{$0cig*=>CdEinq^5ZbB zNk@+jK^mV+t7C)b6(p^Fc(Sm)XufjUfi#81C|-bf3yJbFE$387LTE0DQHSaNxH2dj zh&nO@5CE)2|0E)@vUTo8(-VWP^9vXwIx;DVs(lK`CByaG`a~|9ylC^X47R&+0LrF;@>IG7S3= z#G@LUEimDr8hZhRA)G_WbOy&=UL}Du zu11{QR`#NvImZa!hRqeFuI(P&_k z6biUy@6n^_nCBwQweaQ$5Q^=zm~dTEdV5H|C>(v*ADo|Rr{%bd&!$e3b!DXfCKoK(M^8BGL-o5q97Tx zA6)reHkFT{TFon2$+x^{*;dane$}IA^ToPbJv8>)j?U5P&jb9j*6MnsWyUR6y(#zi z?k{13SNhX-zmkjI9`}XY&zG2VWfCkheT0;VnIy#g-0zJZwywsfC6yv(uTJENOrgot zaD~dcSCMXS6dqhm@1me@$o_97^|Q-VG=k z0e{lGQ|q05e9kUi^hMAGNevu&qw6W(BaHkTg$N5aq0XmwkbUo&oWvUtCHC3Sze<_> zZ5G{NQM3iQci5u&CNwn8>M{PqR_a^F%};@wova@sOgGfb2xpK`T$|CEUqA#0U<904 zT-@7plLb(xGvB^|BskXYa>rnF_j-mP2DA@&N))bhk2G9PU=0>7g2-JCA# zM0|e=#jU>=*Xzf9KEv%B6Ua4s4I#9f=muHUx(t7O=zM#MX}@ktX8(Mvh4V`wCon~v zKHl1O(Tq(^lILE`=k@u4?d<7%CyUZRQwa~Z%rGxQ;PSxaargC83X5;MnsNv?8lm~+ zAH(nC`rs%L%K*E5Y(T|~sIK*IH)PP>c$S5R%i+<*52%2tX(d6cBu=}PZ)AWTk;V4_ zkm*U&`kYjk)VM6m&U%M9BK!F(2KQxACXrE}C=e&w{jvmg zS@iBU?$&E>M5|B+$eSxTVDR#IGm?CSN9BkDvUwm!7rQUi2YbpCMBumpeM0dKyXHsV zUdPiew@}6l2+L8-2-}1Wz5-+`cmM{bZZpmy&>wUo@tQ+<5HoejM!Gqlx)DiJY*_qJ zF=QYt0Z)J>?D7G!r3vz&0_i)uy)qlXhsnK-4u4VoqGUoh50-BzlZdFs@wc9xy~$g3 zKVtp%$Mo3FLP;AcXjAPRm?j#>z@3(F(acj7i$Wr_cXsKdfKc*Qe_Vzc*qH%XKKB?; z|HldGbAA?Y=$L>_?zQ_E-l}hIlAXR%JHb_7$krCBG7YO=3zGG(kp-$xEA`sIJ!U7{ zY&g@rXj_@u^d!ei1-}-@-T10eLM{y5MzXRLM^?72w#F%e3u!mxPpJf8pprOv^`Yk!#b-KaOH}{E}`t16$j_o%`vscJ(WO7YCKfKa6 z4=9(~*-{_B%R8XI7TCfsu{s;5=Xg9I@6KAU@m*cOR8A^MM<+d zS6}$@Ou|4e>h-I=?1-7u=9a?d!MAA3^>!IslLaAGPmZhKauVuBx^+8?yD2EP$R`b`>~EMAPBL%rmE z>^P=5)_iM-FF1~{v@bzQAf^nuWy+&4e>w?2#v32BL@``kO@hBV$sm2iLg0J*cY99? zw;@>kE`#y<_6*4BsnvE>`hx+yf_|h*GBPw!axy$;t4Lx_((xk2lA}FS?HWrM_3gp4 zDJtyKejBH{S&QB|VkO(t@F<_mlLYAJ#m}MQqI3>m8KulaIL=NX0rL60J~acI=+Ou{ z6MAmzlnpRE8fnt`3Mj`<(jda8y)tHSoQ%z44=Ivhs-P~=7O$>x? zAU)pHOrQfTvQnmCV1Ceh>&GRjLdOfk=eyRn=W~yKH;YZ9 z8*m6}86+gJmJ`{~QZmNeJf&ONT6`i1ZM%C$N5rKCDFgnu&^LQ9=ZtgxBpRSr19#s5 zL_BLWf*JN)s`eGWTyh(r9D?6QVAcM+cv%n>nY_GX+)IE;`Mm^>QwS( z1by6E%przYJ;TVLO8oRCt{*2eT5GqG_(CzJkk1JkT(w3nCP+jh(Juty?`oi}Ryg6o5&{rF@<;-cq2w0c2#r z9{=#0m4HTg{YgUrR!FQ>v#Z<5f>Dxac7QMgLcik%!JP%tqoH}f=zWjpU_%gCmR#t5 zqc`TueZS+jF9+;zAPx^>Y~xspkoF#?DohT0d*Pk1ZrwKodj^&;oN^xW887am3*x5r z?*b2tKBD*j-F3#2kp(SEF`5|6K!xl|fwz^qHBbMmXrX>#{kNi$E8rL}xZ8-7c3&Jr zaO1|%;x3pD;XnoP^o96k~|oe;zdzg#%luS)Cr935JWvQh}pf@~pSur;JM{`qT~8l`-}+bP zS;9~;upTyr<{NFTDS?5%kqtD+SCTo8%}T82$6QrX>6S*K2?dSprf0};;<)XmWF#Bx zQ(6(Li~x*gXs4uo{9F>BmMV&}F1%+!SLmXl4Fm*iCsoW~o2Ae7MP|cEvn(#w?OWMi zXD#es^hDC`nmS)rXI5+0eVH+Y+_Of96jtW}kGZrM0{x6ClWo&qC${?KN4c80@+LRn zVQtwY94)UjtMpA?9X{jfhEBk&^$~Dc#_mCSCZ!dApzaH#-g#Vn+^iZ5IVa4=-3{`YKvkjCTW z5@j!+a-;9BAgc4ZtHbl|=uqJd=cggDz5{dr&#Ib3i>9G=YV`i1bBm9@SKl`Ox<2h~hud4r?=fm_!vLkr|{`lA6YpwVSa zAkU0s;OX^=wD7gWaIdVY^X46fec7GU5wKOzI9q)eO5gSRp|Eje9JFq-c*i-|&q2Qt z#84JgahhAuT!uoLepC_WXY!`sxp~=(@wo>(65PVJ#U30|8oo#88w-7f9Nv7aE(3UW z!aNcEd8gChA4%ba$68}#Lo$o!dEAEO^=ZHji%> zLMo^YkWb31z6M9af6FTn7P;t!#24v@+(z!2(*2z$BBkh;8N240G`n zqm)y5CWF0_HsBeD?NndN3cvutz$;n{ff)-3#XIT~on5))Gd3OjL$OYut<_5A9m1g| zbUxm7;@5lviD)E*b0PI~yQ!(YgD*e)7-OD44mX&vySsMsCoQKHFeLSnia}jCn{^Jt zy)LMZ1cl9RA_>PF0HenPFg};tnKygz02!VbvzP#EHyNsNiRRmDt%p#+Jrw~O2`JOU z6D08X9tQ_k)OCF=;S9?pQ*=Ljz-_4dwY2`u+R+-bjP8hsX7p$RM|&g0$^69xn;L2R zDG5NIZ~3Z^dC;P|h7vO&+XoEGuG4nmTr0Ir!|Brww-?ptk$R^=FP6x*c%NyO*p@qy zc6>s?YnQ#wbyw}qng3=e%J0ZxX|?P9(}j-@>$cq#reqbOw3x+i-K4%A7aQIjasC-* z`IFUXzs^MJ^IY;^*k?y*Mar(E<*4z>L%(*O#mHUsiqzLne8p$sSh$qLR=BCVmwA_n zK#JN5Ms8`^J}<}O@jFY8nw)U3zRpu>BAz)wH1Ok`0hUley}NWG;|TP1wN?>z6;nqEWSv021>e zwpHg4?+l>WG~H(_ch}Df&AeMIvz`1dO$vw^wA+ zWy-qA0M%`#pk)^rnBTr2m*uY77Abn@N}erujx#_x71eZl-JY09h`c8=aOGytmI*NL z=`?(|MX;N%)GJ$q(m0fVWIB2<3|}m_=8gfFRwYdn93?F)@27Ix8x6I2-JNliu~wUd zfdyJQ!pgpcji|>Hbi*iI@?i1q_#Z4DGZtAzy!nCfD8EHzKpO$~qqY#6tzm-iJYw!) zyxH^q%VLXvGD2T$!D*XrXgAM0T<$9lp8f$e7$A*6D8r$u&O_K4bV_5id|T)J(^s&8 z;9~d0pQrCd)%K{5J%m_Gt*z*+8rilPURjfu%MsKz9wx|rG7nC>Gdh}_SWd%h(?MW2 zendX3kBqp|@~gE^7p-d|&z;v_0RzXbV)d$Ful_SV}hI*nynJ<^|f1u%Cr z!r7>+lePH1AOuvy-TYWz^I5wr{JV0ICubJ3FjylKQH;p*8%(N|V|Vj?7W_hI;h9e9 zm3cYsQyGcg7|7l8tQSWCln&#W_Ge`J6!>St*42T8gefD$^PEfP z&3d+USKsWh=a$I0;FP9CaD4&oxJ;VD+H#($wHWkb1!uWNO2-ZC?Lf;HV%Rh#0!>G!J2@do@X9#B8|$0d0C+ zQ$;!*1_WMWTG$RiBx_oHv@l@l()n=2lljGW4g(K@Xhe863+#SCp*$Mnj`tJ)9V(3X z)9-lBwpJn7&~n%jjT~gG1%93AKy-dVSRMx?#ALg(W_oty8G(!$j!-M^)@ z`1>z=DPQEmo88^wJIVTtBMMrekHwk#NMh$%1zk|g6hw9mELC@h1=zg*@EmHmUlUQ0rw zSU<898656S%A(Uv<&{>%pyAGO)lkWF(dZ}ll%wnNjgbLgB#)KdoWJM}eAADq7zrL4 zL&kTJQmd)^k*{j!7_KcDnO`vF7S|{Ff;BUXvOF|MeD29p1gzq(PZB%oHg^IQWu=m| zbo_1kt!SW#vE8XXpTlWPcjaPea)vq7By_#gqh1vRc@MiV;Kb&fRhAo1N9>diq3}?R zN&UWi9N+9M)YRuTiELG(w_eIU?Cxj5Z%zW4D)gRi&HX0tN#WQuAR$+Qh$sdjRdJZ5 zgUA3If+8B!Hq_}{Nx>i-ny(h?UglN(yYsddS;^{_Kb`H&Zl=zn_^NkOcvPh zNPPsg<@&Nkp~mmBMCs3-G`Dy?$pODEP4XZvB8h&x zc8U#1WW@TmK85^Eh0M?8A~&Jx>Vi6W`UE`G@;Utq`1yHX`0WN6K9(Edg0QU1Jxge# zw=9~OA)Nx@vSEy=?oM;2dt_uWbN}Xv=n+HxD%S}zrSq(4d5C;mF(Y1qACA$3=O zMPSUF?s{n|$Nx3AdECYktR;@00Yh#uFY_L{v3i^6c#r%Ky60)<_vn6WYqWhv&OZ^N za3rW&gC|E9&01qT2%^CVlkzHd%c)Xhfl-oeb3NrE_k1S_s0pEMj5RRdZL;DlG}8RC zZK*+>EMaB_-kZEBT(%*fHLD_lz>T#S=bysfgOGQ^dH*cabH@Im2+$I8i)>^woUDYi zo}=WC!45%;u>uf=TjLm$13-Z-zCouJprOBdG-9KOBv_cf==$AcK(V$EFZ?rVyPWUE zPlGYbi;eTiP(%Xd6Vte9@9sMS`y$NG=X8K+IK1)mgvI&uOjh+XFZI7A$palcF={24 z`n>*dE0U};6rh+WP&D}2g8_-9GgF`Lc>D2|!FMavon^^i-7%Lc&N+q>7){pvx_G<8 zXaq@Jlj*gl_HT9ZeBiRd{)nkjs48h=nSv&NPRR;u5H^8x59|VU(NAamyv~nN_%T<> zOhw7Pe@943JiiHURdH@*|9O1nTKYlleg}6hGIsGPEXYoc9EjSJa{@%#Z5Ap1iC%7I zS{xf!EH+#`qKiuclSr@0hQIme=A2u~JoT`~#4)81iAvP&bUq1R0TF#%$28HE?HL*D5<)xkG1C-kz@uKnq9AGo#UT5y|J80vo~{C@16XB$;mr% z%r!=~-*?scp*Dwk)LV)1t{7K%X)BWY8{%b46K=nj5)NxxFT-1xY$Ex+KHyTKi?zOI z(Zmm@a^848b>rTSp{Fg-;M?PAeB<}L#yzqc zZxW%6^;vRI2Xr3{Z*U^mg_A3aEL1!@Wr^z@WZ%WS$0>%0UV^gW?%cesc8Bv~%tD3G zmv})6HJj-tttaWZRVHF%4;Kf3xReHDoS|hc_8Yh8>zQf`AYgPJr~r$gYXnERkZr9Q zGoQhcBGHW@ApZ>`vkLrJt3*y#S@tg6rV8<*BT>93YhtdtD}ER5OKw^Iu-_v3KyK

4CVAiJ2o9ANbv!ua7@(t~E*A9I9;)wQxD)3|JN#je!XAery_XrlqpQn=TGoCpQB0_*3Oz|_;3 zk|5q>ez!BW9%(?A;iRV^q6=j4H=Zr?$l@P9Hw&-~U-Ispck^;B2sFb27&AfMStLB? zzm)gu`5SWe-?I!J(%wC8?EW-yoc8XAoxvY5h&gNp0$XI|D07j(1Fp{Uln3YdKX`;| zZawe6Y`9cL96dxv1}MKa(5si?#YJ7gq8e~)&;k5zVciY%gS>4+%~Grco^6veh8>A+ zztuVmFUH+DzPMkMF?Y_~Me~Cf`TIq`0dkaG!$8RHcfZBid1MvUQ@xrXT$ol&r7LDT z=O^UKCArd&075JT(v^@Zg16htGPcVs`({nELpQrqT!ZY+$0ZqOfm?G_CF=KV@Wi4l z5+nWC&925{N9kWK=X10C5TW;!YMdiXv}GPNa(V9*Tg1`>vey5^&3ZM)rQaNbJ(-;e+o`+q z7Ms?iIBgd~qSF-O^^ZhzqgxAp_#$=iOLFXuQBJHkzVvKN>XW*7S9tRIL!d%_3Ni`? zq_?{1Y{K=3Kd|XY`vhM?5`~C{Hx>s&;PL+tWp4o$XSd{g2XDL~KyV8oK!Ou2I0Scs zyF+kyZzMnh0fM``ySux)ySvNxWX_%Yy=Ugkd(W^ItGl7;-t4ZucRf}A`W4Ti@Z0VR zAmwN!h~!^i(ofy41)&X5_Q_ZPvKe)CN{3}TIS(2;STg(|5!jQk(&41f@p&yT=C!jc z%Egy)u+Z3-Rv!K&7j^vJ$n;`+@A*ef7GCdUpW;Jzco$A2gfsteYZi;_?zTg@S2!(& zUVAO@L$Sc|`)AXykHy7g-i5T28)wEg_obGozQ1JegQnfy2$39L_%JA4tF|8ZtYFP> zLVQZQsMk^xO>6Siw*Zl9r$)vsdOJq@Ds|rsaypQ-j=R4(nmv)KcY3*LcHt>Yt0Kkm zH7-XuZc#R$mEnr~k}y?tfRXXApTZsnrPrP^;u`zW@*8g;j$~5 zPTh$0WH!x%VUD3F#M{EnCgmDC+R-t1b-7Bl_z@+G_Cv(_-9&)A9gh2x>qrl;qbkG5 z@+>9q)%%ZcrT<#IbIt~pvh0T$xn&?p%b{8O{Z67bd>?LRyj%-%Xr(>j^|I4~Z=nm3 zjAwbbv=4{OwPAa^Iy574zsDNn3wK3>9pOn^e&aVJ+Vg6JgXpsZT5T*C9_}sL{%oGY zB$5quK!hLSna}M`O4zV0p+N}DuW(e307G1vfSI(y&<{Jcd?2_I%?30|9*cFzS-JU~ z{2xiO)obsDqn||Fegi3cX7xiH7p(=WnRRx%RnoAdEm8*w?-MZ?YL<5vgatQ%|2O}c^!ZR zb4nzyB_8&$Ch|wD>BP)%x7r~y_zDTWg45n)NAu0DB*S2bV)Ow04M^GZ$s)f{wP9HO zD+(+>UzLbIJUC57hIJWMjt9nPFz9^>lgL`($aQIehEr19(`BTLfqy`0DLmbuk_H6v zH+!#cJ7U7YToC|3N|eH60NoOvHl^*LNw97w<@9?x|-#BUSvxbR2EU-y1@W4q=|eZe-`0b59= zFixn0D-|~;^>Oym3bp$^MiNK^jS6$9577+c8Ehhy?H$R!7~q)8#j}{|9S_YOXN2*d z1wTc6g2jNJStA2a=Nlq356Rrr(d_?#BUW#nx80p>n{fKX;QolP#)6{7NhzIJXc6*6 zED1*(5`%m8uG1H!iX$!P{1I0Go_}%+B@UtOJ%o(G?RhXv^0}jFHbCJ)Z%~=iVTS68 z7}B0WRCWWWF>;FbJ2o~p0D69Bgy*6CqhBgCakaqS+jRO@f=jBU)@gA)UZ=#tJIOkQ zfI^6pgR8k!J^a(A|Au#40bZy2DLI7t`r)i6qj83Le3d8Yfnh%dTQm8y+i;~B?-SRu zxt~3Qbs2Pq30Cp^HIhdI+slJv{Tr%Pn6%QSVzK}~xPM&68YeOMU!A3t7|R+nK}P+4 zknoOyW>&H3WZP1iNrrPUO$w8(3zgeyR$OKXkg#S(W3)XYvtQ!s6;JJat~r?dIijiu zU5VPcQI~y-*6uvh17aN2{w)3B<*@SwyNXD>oqt;Wcs_o-Vr@}3eeAZ4sysI5zE}kp zsb3GywJ)5~onhc4LrR(r z_U9E2$F#)r&9#fuO+vC>FU>`jjZR*L8c`$MptZs)pja-{(EkBN&%IFjglBD-b!8jD zqV-J%FSDH7N7$Mj(uPIp4qD9qGq65;xLTFjK)r+65hGrhK!;WHmuA^4EG;hbpG2X_ zkj9{NBY1jE5|6_$yyzOIl4RQ{ML+j!JeJay!cl%?cZ=)(4<&o8CWh2sb5k+KbYM^< zH5{gX^VAIWw;wLk>$$Zv%sy=@jEEP-f7)t8IEgIQ~cLp?)*kH{Dzy={9_drIdW6FBm6M=viACkI0G;|CGQgL)ixG@UXL_pE_3l_4F3 z{c&}x7Bd0N-=k1*N%!Lzk~(Zl&Vr)-Mw2Nzv4I&MX}_9#^LsjXxxPH1|DZ~hG%qxt zkyW{NE+%j-VsGM&^&5nFsWM$q5|q1A{(awRFESy`{b+wOCTKJqOD4m0oy*dADNmG` zPazTgk=2*b{PZ*<44weQ(uy|B5#ALl-yvgQO_C?lFfbOj~Rd?Oo3kEfxU^GLM%>%%F*`>Y^XDc`6U>!!CKC)KT*%$n(5 z4kYN!Kn>q0WrE;!!2-+H9ivgS>}Ov{8%~yHjge8=W@Hy){!{>>^FC52cqJGe8@hd6 zG&`V&6jgnjx>W2mR}FyTz6>Lk#=qE_+15gq!K#+5_8d;&)gFz$I$mPVwM{)HgB_u| z%JpwM2O<{BlQJ3=(-&eyM+1JSA6u4oM#H>=@RSOaXbm;`2Ol2LcXV34KNz$_#F$La zv0mpRYIP=B=qywhF{AYD)1QP!>wDkle?aJy!KcG`8Zl0JsF=*v5+rpM+GWJ;l-`X& z(AR8mylxh4cRZT9Fl1Q(GM_Z`2T!j?i1n|CuQtMXP1)P>DIvt|eCbkwYxVUf%?(X~ z_~s-SS^{Lyf-SfYK$RieTk_UG=-QOk`ihwtr}v&l^?6ig*N1i4GN@Mk;KcQ~w!L4+ z)#}_g?-s2_t%OtXk8q2Po!td^7hKtVynB&O+-~-$)p=))+QF%;Jpai8_|APd$&BAz z`t!O93DgLmRqfIia`{9k{*$&?sVLrbh7=5cq5S-euJE$j*@TbXxHk(a;CV zLDDfa$#`*#l^5XMuCeA{{_JW4+_Tk%sukJGo~J9?9-6ECjAH&JyODev+vYvK9@oQG zPu~ZJQD-9mQf$BJ0sSsmr*U9Iqm|gAO@Oi7<+;V6r#!-FY;VIYD?iMtUr##oXW4>9 z(nRt-KZq;6;|`ijd4ot6%0sJ+WN3N!;KXzRdTt=UW4?a*R4K@Mwe98od<#{x7N2cb4R&#+;_QEf6{N*PgUQ4kfVSo$!HQ85#{+>tF59#I((z{gNl+ zR1{k{H>lo0nHJ=RU&yu`TJo~7$Jogq>dEvmIIueH|OPnm#oi9~EiDouwhjIT9Lk$(v%fa_7!2TK=fI?$}8 zcOW{)yIHa(fPw3Jz#`jKmA4O~GnKdR8yGn7?@-(`k=OCP+plRA ztb10;;fIdiL^+>@>H{u$W4Nc>h=bq#)i@!J*2m`Cb~_rdx#=)a8L?1f#U?rW-DUl| zNLE$AgN=Hdz~0qQ+)-%mcZd472gI`CGJa^ObP{`?o5Z%-Q*S zMO1ytNfi%gpF9q~zaP}I&o@UHQmz+O53u&0mI%Hg{3VBH0U{29O47zzNp~PxCqoJ6 zV+iyS2H6(Z-HYQnPN4EspcoRQ;AMS;^dcOgb)qr^*^FMdpUPflR@c?i=_==|VE928 z2nX)32qYiieoX@DkEsJ)IAZ_8D`gCCiwkS_92qxQS;r>3U{*kSp2FIW{BfnqtcDtW z`@pQ>PpbQd8uwK3#J$R)_x(HydS06f!_9H%JTLwF`Fzy{ z2!VlQSBDeg>$L3BV5%+aWKIxtv0Ni#WdUO)?cJD_(p1zKnG53`_Xzuy5 z3g1^)oZOn-z?G6K#G4Y6%HbqVd{)*x7Fujt(4_3~;s zK)c-42j08Ee{nTSl5eM2S2G!(-Qege-e6&Yc5e2#&*P1Irkq#5^kDRl=~uVBZan>< zR%lW`c=R+|*FNJxZ~#)vB_q~b!D1vX=QJbAWmN<45$~IRU=pc{IfySw%e)CL*ogAX^<*VNuCgkXLMAZkAhjUXCnFG0-5F* z&wva0$p+F)FdoMBh-XhM3PUe+`>>HB9Lp81oFV+{u34x3R=W|+loThP&B=1oM1u5? z-#&7X3!!c#=86JhA&8AYHWGUadEIwBD0tVTiO~3j>MURp(7#!!{Cpj8h654z7ypKO zb{rn&pv$9zU|um18BSYM!Zgn`w^x~`@S`0~fKo%pM~&eD#3GYmxzSB)RL$>K?UF4+*hvyL6JyaObqn3-KJXzR<`~E+D%}LVhg-G- zOCuA5p&5f-ODFLdHcNl}O4S6S3g>dqLiBfG@AriwgFxC|5#U?xyn>Y2ZpRqf;By{^ zJIXTNVih=0u+_CTk!WoymncagirV_A^)W|FE8B=?TGVOCJ>#7m27U+1Fl^u$eF1^=RODo=eT=H1{4JWtOp8`YTk%8(nF0)0JbT&0h8y;w+3)H5VgbS; z^I!6Id?v8u4vjb?N4*vFT1MPGaKuk88U2ykwXZQ1An#zv+^ z!)?l(?iA>Zax8N_`R{!u@N?kOZ>+ONN-lH>ECO}l`^$mi&@6q`o*w0ZAD0J}4rVh* zjR+j5`=3D8g`!kB?LRCQsujCBYI-_WD4Et7b;jHQZK zi*Mp!=;DH7+tArVE)SOSJjpJ8XrawoZ1tEoH4k73rs6f2<3fh6pLZQg;) z4RZd7AxVOfo@x#9GoQoYoFd|xDz=lc2|ew{4_Y(p7!=rri;$tn=6~waE}hY1n6XNI zLODfrN&-c>__|j4vxBCqB<4#?eYV@|O%eG-Lre8ad3j$7k<12Mx&YOH^z^B3Y5XSz z?ua-zjC1W&i@2H9@v37yaSz4%?!IK0 zAJK*@WNyCSlXH9oQJwefZ~EuL`dm}uf#Puq+VaVQ$gfp+VA_RF@YGAU9~H? ze9JF}W((4P5AbDQYm?}*hPxG+)u z_TLayJ|^U{lrR{wQ~8P+d$N+MX<|NhZ=Cyl`L+KbTbM^)m?-~XeYzXO8>($KD0#a0 zS+S+pNkq8fbnz2db8;dnr6$>b_yi`EVKe6p^gaFhi?jO&c*LiK$cJmsxur`$Y*O!Z z5I^;?4xlse(P5}mI3_(lKZsX2IlDIPbraa;QMlOEpf7rrJl+&JNm4DOcs{=y;uqkv z?@6lpA{0B$0=I$w--pj7)5>Xb=8$TAh-ne9;c`4ekBh)yE$X*Y*$Uc>=j)BxA$9r% zBetNKu{AIrD0~q!lf2aMRCL}z_`4i{HF?h1!Tq0=y7>hf{b>#APfR3 zNUO$@qw;Prr_7));{1?Vrf*oY!C+zfsM}1|JWeGKAb3pXX-WV|m8uzQT^@NOk^jci z0b9VP%YmZsHX5BJ><0huq>b{#eXCrzC)=s5156hi;qn*Q%k z&dGd$wA{d4g>jaEzwLdQxp^{$HE<*ma@qr2AX=JFW=hOGu_QkiR{AcxI<(aq5;yLn zVRP!l0MyuG=7`5%uVVh5WF%{<9BA*oz_0gqlj)Iq{hF4gc_<7u# z15pSQ>YnvyW<^{1-@n*je=CFv^&u7r>kT_&2FLp%$jLgR(WtXd1D;a$-CFGv+4-Mw z)4lf*CFesI_+`(kg7e?(<)0F>|KhhGW*=zX;jp>?YR3P?s{hqPAutpYgnZYal02`6p0a{Ilr(UySd+vf_L|n}(q!%puZc@ke;#N@N^ zJ%`@i|Fwa?yF;3TC`%eO(OJj)=WToWp+yu)?OzaVIBG?XY1j~13gtzY>)2S?LR$Y_ zQxF2!Zvg-7d#hfV=s%`mjkNT@gnwvz-P)jwE8V*_j@j7%=8B44?j!kMj>&&Dx&Qe0 zHW{E?!Tq|ci$s5(zRBVZp^2Fz4Gs!)bF?Em$Mh4B9vq}kD*V$2@ju(hU!MjmMXC-b(D(g&g!`JWXoR%Ga;{$@5*ao^7uH8A zM!3mea%t^GJiBjK;s4jO!w2n&Xb=L>=~6c@c0$>y?jBt*K>iW-cz^>2D_~8GrN9^R z>X&Sq0H%V<7lB)aGVqW8^<0RO9>BJL0FQ(9#EeJ8&pEIWk|s>o;lwyg+DV-;#$B|D zA(^R2exzvQEzq$z)cIatGWo{RWzh|vKo`zvf6#*>v#I<`T%MVC8>h}Z7dN}Z*-2kVe`?aDIzvpr(ffAJtWJzi$=cERSFv_3-V^7GM%hX zFE}riN(@c_|7YPVA%T5WstEI$;w0O{UB>Uc#Po2;SW)9y5)yT`TbboFbtYr{Ixo#0 zwjYmUb?^z)g;U!H26n8rL-)#Er)a*1gdpF;Vo!p-0hcP0)ncJ9>jyqu6E_>FPa_zM|P?6i-SbkB9K};ha8_bKkod(X;igOrbMO07&&ZPr0Nx zidLP~7AZyW9S1Rq)%92L6y5Zp(=S8S7U~{2fHI0xzQEA}NK%IXosp4$Z*6XRc*NNW z<=pC{8z?`AC-#XLNxXi{at1T$b`K{V815RsK?3FRdSC$5n>)@{qSIGg>0!0`G|wcMiM}7;5JmCn4|NLh=@(Cg@wI0)pOav%=>sV6{8*B(RlOxka28XvtNOGf6-iMOrOTr`v#Zp zZ;sj^c4(XZ!Oj#5HWIPx>l#jpfeJdXyqv6F@J?#xM9z;lWRfy;>Qpu@KWD=AbC^Hs ztbd0UQ(;$^rqia%dO!&eS!h>`a77z`iDZFR4Gka*kwd3syw9?-oHgZ+wrYMBXSJG- z+B+UGRr%y>+NRxbeYDkIP&{m(ASwZ7bMWnyNs21!qFH)C`hLVss(!OJOh{Kx8A?KL z)AOipG7Gq*2rtr9&OED1rZNUqdW=8-oX27cDnZ{v% zIuZ$+1`>f?L^MqEU9Y zfKeZISynf;#b<w$z5;pZ0|RdRX~Lf?9n5jFlanw0PoJC@EU|Z3FM;Y&oA*sii$e zqJ@vz)skw}-+sR{ey@rNdY4DqO(1?)7=Yc8g7j_OSTcHp+3UiIiznu7iT-QPaAa4V zG7kjT@m%&??|@Trd7tpzN?>0Da%IK-xF)z)eLZBT>>mNr0~!$*RfkobV(_+gT}AuG zqYq5?hJw<0ulWL|l)6zgMd863qY03}U*-zI{;=I-ov&0xBN9gRDXn|DNZlA#s8;rU z=*yR%d*@Iv2re}t-FQJ$s~l7xfT|8B3)Gp>5^dhQ=Z6!+jesjG&=-BfUIarUKx+Fw zE>QH3!%huLy8d#SAtTAos4W{0=#a?dxszWXOcfYMm@hZZNjjY@zb#NM5v#zve*z=% zTif4gI+;+FubWQq_>*jS-KkC&svdD;4eHOe@+-T>*aZCD(iJ7;f^8=GJk3rO$Lf%e z0RqxR^ShV;JR*J#ZS`_91D%(lJ$>F`A2fclQZr%>Lw^8-;AH|9j4PS!ePnIRd++SX zX%58#-lW+X4_$UXs`7{UCBjL@vMC_tdS}?*3~;xnR``b^q-_fLe+r0s?%I^hEmO#m z?#m(ZG8ZDRb_c7mm^sF=n9hIg|4mQ7)&DyZz;xQ~j*@Ytw#R2l;0*9%!>Ri19}F;R z_Z~Sdn!d4#?|`*VWA6a-B{>1QU+7=qp9&iNW>QTRycDokxGInoG^}SS)o7)s{6R@R z^$CgvK;EWry*2<1W%>_&Byr4#OIs;j2r*BiuAIecIW+Cg9STWrZb#dl`n^nI_(2H? zjUkJHzGsDK-bu?7t5mi5Tm+g|-gs73v2uhszHhl!Q$6L!tj}YYc+85B8aV*5Lm8tr zKib4u*y8o%ke~W`til-GbTrkI&t)Y3lgMYLgG`ATy75e#4Dagi)k3c+r6V*yJBh6{ zdt^!{&0}ak_9=KOV&6IPt8=>FO3@TvFUbIi$BJe295aNpUk!^g038z zCcs80x_#EeMY_*dzpQdacdx?*D(2nEEjZn#B~=-`JnQvzRRKUirdiGL-n0$W-@1c9 zvDn|h@$CG?yD1f9RgG}H?UGpyB)`g)wPXAV<=MFJ zH)?EGJJ=N7Y_<||L3!LPskC7QgzMtD!1|hi4)pa0oVn5Xr*3*MWU?`^w)n;_7U`4< zZ#5$#BAB>}wYz1)0g#q6fHf+TKEVS! zt+twNCQl{Zp`em@3NR5Gvza1gUGXIIHz142(Kx_KlE*N}@P-qZ?T)4|L4p8_^1~_J ze?U&bpd!tNWk`e&_lJ`8EdaN9mv3u(JF07Ue0{_lP76&I)Ps|I)9GljARb1%)MywK z#%p=4e!d>^!+ETMJkaRzH*&+vV+dop(+LkAlR@d^l-cmS4-A4-+(`-W-$42>Zs|N#zR@GG(Jdt~&H(ucj_5=te?#XC`OFyx)Is*@l1Rj+sGD!BO(?AwD*qlwju+(*roN_pV=!P?I#jBrkfLc$f+a3_~>Q9e+o> zljxtdYB{4z{%riS(rl&egmoE$!Jtqmy&p3LzQig}kP&B*`0Pz&&L~r)mMl!TxhPWV z0vG8CB&xNP)r0mB(D{9EAzBBDLkQ@ywaysnfLh~_Nssj%*NC|qXKsj=`$<;N)>vETIuEMDV(acV5A$nx8 zVj2Jq8~!N z!Q3U_ZANH+mHvY?N3IsBOd@;SUh(-xm1>5tR2;LJV>~?}6SQKHnnT^y^#ZdvX0-zd z3ckbzs7jXAV=K7%s7=;JddX;E6@0oAA(8*BUT=>JhF|3}DA4cv>jOFi7;!#A>Zy4+Tr3qHU zRB_i>SRnMSe4AD+mVf14$Qu{sw}VsRX=`WQ z8$&DvM&gdUl#0Y|!q-nbijfb+%E`agyu1{Grx8CshBk<@hxK--%@q{CK79M$JjE5R z6#j&NxKz)vu7$c&DChv8;_UG;YwNrf@lUV}KpOwD^wZ*Y>y_|wn+t+$4<*rKfwBZU z;p9YLEo-<>-Av$HoOqhEG$tpKWmQikVF z%^95igidtDBcfczc_*q>39RQxM`cF7H+ZNBgHT{{dReE;;kdK{m}>gp$1a_NJDpw&L@*%5g0HCG zVyeE)TxYM;@G6>YYWBvJVp1vQXR??sswh1+%U=Weh|jj0xo0S{b>i<#XH$J>C~pSh ztIXc5Is2jj^gl5>{w}{3GZk8AU5;X1^Zluk_dnH#lPQXf2dr!Ps;937wNd zL*@$ULN*SbN}Uu3^Hmi9!@PRPcPA4L8E5YtcW*K;1M8#8XeR2mvpF7g(z-KP8mY(c zd@^5EaKIz4{G8Sv)(a9T;2hUZ6Jb7^+KiUXIuRQ^ur--CF`g#)nOd#VB(=eq69EcE zV8v-=>3p!lim5I5$-IRmb(##S!JW&F&eZRUSqT?PE(ggfju=ENm z$G|F6`I_re`o_{pobUd`_RUON5@qGg0F-zpP*X$s)P=v@7t67cyTD&mPN9E!|mairHQVA?Jl*||3=h^r?7OO29I`^LN z^p=rm`o96y@~)$KQFI=*w&jQfRhknWkqUr60jre^#w@VbU0EW7#6u4}A)v)Rj=|gS z&$hV@aXQ&*EMzMdC?}k+;tSTBtcchbr&$*ozaIbkTMEyA5Z^s!O|BQ5dlQVv&wZl zge^p*<1Qw%r4CrG*u$%N!_SSr(p8#*>fp!NP;?nKes+ls#ZP4cs#K%62VU)&Z2XDC8~H!DRwxF8hkm0q2HHBjaL+{wt%Moast) zQpu35A>O`KSaOp=fV#sP4Ql7v?SQFWh##eNy!k$fkN_SY7xGYS8hN^Z2!Qb^w(Y`x zYV2Ebaa9&t8+=dVWl&tj7xMD}bAjv9diZLFnMNHC^&zB0hsh0G?LvCZ`dqlS;oWfD z-1EE{^>_ZfE#%d*#QG8?kME`N>GMRc+=hJtP)jy-*R#cVfQA ziayJM^g7w?_;(o3{pbNwzbj_FL`;VSWZ_hxUMw=Z+0;8aplF*vYD^Fuo*)Y|*aCkryxkwi`%$Y~jTjYb>(Fd00B zugwegAx|vNZ@y5p+zy5y^o1(7nt=OT{x2U3eou55%%0?Hs;Uv7C>5r_Rj^1B|ym6b)Zky3ak`{f%-x-Uw%<4t>Ug!ge3^ojw zoe~N1F=;gi?0>a4F_4(B)Ntd>9Gkc14%i;8A3WMA5~TUTGx3aNQ!0vy+2bBXVMK1F zs7TSL-OW|A7WK*o(As4`*Pp0LC>r>Auv@hG`U|sMtis$#5Md)58nkIJ<84)_m)rr! zqLoQ{V@_vPf!@OR#9osJh;(#x(pqj7nd}QL4MS1dUXh%%}Sd=;l3 zj~i|*QGf08k_72_-rv26Bz{Tz!S@hgw~Ynje|5KCP?8X?#mcz zL2Ws-AI^sgHgcMjr9=D1Qu7H3;;xyn^7Cog03$TE4Ri-kIosux&lg0;akEd8?M(u%q#R7Mn z3`ub!p6oQ@q<|yJ{U^7PWDh3uSyY#HvvBTadf~8Wn1`E%6eyW8)M_Hn0a_@lNKM2s zuO2^pVf1#qBe&ZjfW18O3U90LzxEyYrwDL39@H)h&~$?>)n>&bhR(&pL1`TT(!E}9 zG8#}SGPq+Jajww(Y5D>Mlciuha$9cal6nE0%cPTxdPJcc1W+>N6hyqlyF4(`F}X0V z!nm+)-WT+%guXJ)t9<(*_KEC4emZ3|;@+ZwUXN6i{adtd>zO{PphHe`ts{CZIe*jr zRTDJXBaic`&LjvTs|9kU%RN2V+{XsG6nJtxPQBlUGx5fvlE*E0QX8+k*!M8;)ev3# zTItB0cl}u4Ibl45Bj&$6#!aRpql1sF#|9dEm<7X+t)RGCSt+Px%xS1-EMLWJ^Dy^onGM202`uH z=`{4!$cGA}5k|f5HoT9yhr!}KXh%}TU``bq*(O(qEI+2s)aykTdG|m0TrpP`qZ2XBW|qCACAUAPG!=N)q~Eq9fMKJ;kAbgkDDtFq7OGusI63e; zTJd^8@$iUa%P->f4ZpC2_Pv_xfCgX>*Ue5RTg%Fc7oIm3LxaPfpP3szUko_`2z!y< z2?r%5{y6^R05k%A4_B`utQv6luxuDt5%aXYbuqtRVE#Q4;i@Bp+`5oGaH)Bp)MqYx z9@ll#rOEf#{3f?SWA^W?QycaC&!bp1 z)c|Zfp~X_YRF>btr*?u)iPK957@KUo1~i#$Bl5oDtS|r;GW{68;X{;E#!Q5SwFRo8PF&4P3kYfoBMca z7YBWqo1~K*T-xcv-`ltJ6XY=k9>Q#WD|Kt7rO;@!8gW}5jWa%LX!(5Vo+1cLVUCMEr!Z)!k%sJ%Z) z0WT{69630=>~shcpch1I7i)S8@{iSAf%Se!8m%@y@%JWJfd_8kD&pz3sX;Pa+#n~qwp)gVXN-%`kh{b z{c6f_>@~@V@VJ@&KH++-Qi;2OCyejh%^0r6=jbf}7sZu24&|o@!eWW0)#jIorc;I` ztL270ng~r{Wejb73qdsOS?bSkb*xL01f^M zd_>*^oxwn!f?5yrns?m{=1hooUoeoET4!Ck*6B|B_wS;}; z`0RFF_$$C=D`S|1rX8}ZoGD6nA3dcd`+`HSDm;|%X)G`?dU+ZzN61;ft6!1kg!IuJ zDC5TpL?kSAms}K$p!hDI>qCyRkBHJqpaRpKspIqbjpzmQ%+9S>rXx|qzuh6865;7& zV>pV(gA;Afg#LVIL;{dt%k8xvVT-<-A1!uYs%TgvM>#^?pG2g5)4CKz2^xxJl=wnD z^i2nlzfO%Q5-^(2igI?rDozS2%nRJwh2Y+oau`QA>lt z%BtlCOs6e1}q7fpM!VwZ&p1?1oaXv?hKkVo`tN-q%P`x2~rDl45 zdvbWB%A%EF{`)z?7Q6CYjnN0MXJ`n!-rujl|5%;FAa>!Yq#OT6e<*#*lUy79=Rl~< z+(Xx%8Ju^P?(&v_*5nr>Gw+$Q-W*k#bmL&XDuj=aU2r`5ogU5;0M&uG(anh}x;|U6 zgC_5bmLrDZ`kDMA{~=Txf)L4U2J+7CFzvJCTSusOhK1P zhqtd1?D&JPx*qt8Iwz%P&>cKfZgQwT8}B`vOaIrcYtaV8e2u*Hq7TWGKM3%FZ4efg zNCl|<358Ov@_XTz0y&^&66Kb73uPV8&K0>H_WqE!1)HeK5#);Bz6~~tj1>dpab)va7E*|LzM!R{lMGRja zKb4C0n{gxL8nY*@G+m6??S@lhM|DH@!Eis6qlvqLXeU>t%$FZ+yob>moz0UpI+ceS zbMS#S7IZ<3-J2qVpm2pxK~lgkhX4;(cDXlkHjgavn+Chexh78h^RqfVNF5|sZh+`V zn5mBiqIjF;;j`9ka*hFD`vW*Hq?2l<=#Feh-50eFNI!f#Upv&^p^=X)uscGv4^gQS zHw6By!*>$;3Olx2mgK@wwJDz226XF(1>fLwqZMx8SNW8dxI&6&TlSVTHU2D-9}E_# zFm?(bI$pMk`u+4kR9s@+M5S&7110-Y0MjJ5m4{VeR5jrnSXd~2J}~%y zylH(6yQ()hES-X;8oqX#Cg><<3S{N0AC{K(e*1>|Rlfc$5}I+I%1G~W%Hb-%Qc&0_ z+HQLOieMN6?wbJVJKa5z5Pf;Jx-MqLqmOivX?&RR?4F7EvLdkv=)}1ewFDjJ-*BCaY*E z$JVRga}Hy^w3MCE8-$tJZdM5-GYxkDdTGVsx%5+ z#O0^M`7LK~l#Y`egH^G}7yFGBppIRUDp$QT2qVfHlU_^XOSiW`FLrT@Ofu)!MDH+4 z`ZyVwk6rG8uRyBvnD1>c8o4ey0r zT!Zx*d68OE0Jgy}%{kKI5}dJWg;5zd$`;w|Mvn|uALzKcaN8n@F$bodxS#Z+#B}Ni zN;qxdCSvYFDv|exoQa$fsxM@d5}G$ddk6RNpAw!N;-^{%&sJ#$zLg+Mzm;Nw2*gzb zoTm)sA6pg1Xadoi&7pjrDtR3cns6_^=EOE6>iJIzcVBw}2&mn*EhXR&BI$h3Ue%*`!6}2rcKnmN`Y-#qUpThPMK#`zkb^#5mQpM1BXHL= z)ni)kMZ@_>A`EfKz_JyTn$5Oz&N4MdF#Bl^2cLUKruEBd|7W-9A1)Q23E3;l_QyIq zR4b9`i)7trXf86tk>n0nQ48%l_qpjNTr@iMdWdwz4YXubXrDfPa=a64nu+8r;-e2C zmOsLYo>Bk)UY#Hc3A3G2u&>WsX_B3wcA-}vpGN5Vpl;(Aw7$EsyesH#Jr(=`I>_7}5mo!FOm-xguCqwP0jw2dcQ(p+Z==b?9Gy zlX_?wGi%$(@P_E&q^wqR{oi;3vDTo1X>MtCZ^VF*o&23Iek`jL{P@E5Rs|m%c@sT< zd(CD3M7cp8W-zI}_X0Fk%_;($SZVv=I`a0=Rc?^wquc4J4-)ogCG(gx{T2-MU$Dn3 z4OUbxLg<9E)xu04kW|C^s&_z%E!O;BpjBIcvitb8J_6kmjAnRRnC0|iY|r4w5f+Ws z*ix1{+AMG;wPZCWL?A23B-gpgEVMogJiHlU68k1)4>xx z9HDmnWxZk1)cTY_?`+FCJqfS?DOEtF#fne&4?MvdOAai2K1^s+P-szx2$9e$h`(Dp z5J1)a)UH;^wk}lLs2~371{xbBAUKF0E*CjV^p`-{KHq4q{ays85v3XF@!kZQ3q9lw zG6Ae!S$p`LY)ra{m((w^ddIs?C5K)@tr9^p!2$z5IfIqv7L%iS2XS3}$_7hca5 zXP+%r$`pRdQ_4KYxnAD-;?QfQ11AmPCm=gPjk4zk+M-d0O-o?2oKJq9E_y@bdbZJ1 zgSr9itnULjQ&D#yA-n}oS2IxeVN0Gy+x3Y46hDYG^ncSS^jk|f#w>kRMHD#OXvvxk z7@X0UCP5PNTB-lir-F_CO+8sfUWwNa>VnJ!)HCHIQYILX&O5asf( z)QXn!S>i;=jw~svQdQtyT2Ym04@C3lvI-yEf-GbE9y*t+z;IbKVb(ejyc$pxB2z+>n55^%jAP zR+RMSr{=d{A2dQP(G?F~Z_l`^0t}q956Z=&Bp#D}vk2q-{ZZ6Y*Le!`{eBqU%B<$I znd3>!PR%Y(r3drBap9?6K=$-XOruS)KX?1CcG-_V^85Pf^4&+EN?d^p@HoE421Q)> zA;2P9cpan7AGak%0+)@q7Hj17Za2l^heVDDTm68VCawPjX#4yX4CY+jFVgL}|5{*# zT7_O5!pF|(dRRMOEZa(&|_w?jB#ps^Ow z+wF-MQ;@~A0S!rZozC&%My^S8Gy#zF%nct4|jj?ShEW@5v)NPj1USuHnqHR2V|FebEdW{@=+ z)v8W(2UBETAlQPhO_@K$>XQ6Ke=-ff*IhDK`#sVqGu;6X<^GXP|F2?@3+5E zj`cq}rT@oaC1t_z#^+^6IK~g+H)<9TJ>#SF6%A%H;$7bn7MF{w%m8sUhPH2#5`WK} zQOL@={Y?lHZAr1lB>H%+xO-K}RS|LQN$)TftE!OCwz61n=0ON6I zu4ns|ET*qIt>sK8eO{Z`mYs6Itn712N&OLN#B(kCE-xC=n4VP|+{ zIr*L%ZMTq)bgHnysDq9vOO&P(5iH;3u|#`mI7N-eGgFc@;C&!aHNvC|Ci31t2^N9g zgX#MWi=l1ru!3-aK9IJ->wQ=3Ur==4e*O?-vfc$jj8q|7i^hO~qyg<*^DSyqp}#{5 z`L_EL6_0p6InX6>?~qD*yF>dh*JASd#wrJmaC(1gK!mF?#+rhX%R{Zv0#!9v!nG10rz)f~!ODC)eVfyNg zR9m3Q%Xf)m5B6~s3Ho=uamd!FW1`WlmGAif*n7*UxZPn>;K3!h2iKs% zAwY0VrKqZN>ili*{p{b<(jbKK6N=8G zE62d!e%gLek@_yR3L&5iuRI}Nw#n0I^h;JJaIneU@X{2H>wpYj;p(f zEUC)PRQB)58fLE;&2oCkv1Xr*)^|9YJ;Xxs#f)yVpBS^?UPs)c2$xjwzCy^wBUMN2 z)Wx~reCM^Css(rnval;xX95R3%;RDb%j8EI{wE87Frcl`ayHCv*G=($e228$Tr3T% zoMA7tR?nr6w00NqC<{}C(2ujjce*St>; zCDoGvZA`a>!C%x6Aw`!iX4Ux6t-9fIk-(bfvLbiIRVfGG=;48?9)hcYhi!57*)xm~0z<(> zc4v+s&JQD;7^Jbi;oFq$zM+S{RI0>B z5%QP9R{;@bse}k1dr}$sT+^)W)mJ&lHb9ywP#+!KbcMPgr|PU`EF(x?qFL1Fsupug z7Kl83G;col@=$8R2(;4^wHAd}jMOp27fSOi*Ap()eVCJUs)Nh|lP$GAO(775`D<%j z&n1n3eE$80dv2RgJXtp2eW{0Cpzp-aj3cSvOls4>I&vm6@~C5xvKM{@{2rCD$?m{YOC` z8WH}75IXdDm=HK?lj|&UzFaXg5&oW5toZe%Q_XVBT;{}&77xYM?dkOUI>l-H7uV~Z zUxX2O5`wD!=KbXwwZ(U+J0*bF0%P@;_D-9?4|WdR)s;f&Z6Uzz3-0Vk}PgK0w* z_lR0#wRo3~E`>eE_Upk%-CMTtJ`%c*#+<=_4BdE;xQ2cJX)K1VQT)!KAHpbMGS1&B z#r{poK@dGe3)D4=;RX2pDdE7QO1(bAx$qvdoG!JmRD_FpT;KwNb<1Y@-juh|3+y&3 zkZn@F@K!KFRQC1BesSB6N9gsZjK3k50X0OGgpnk?(6ec{8~&ebiq$36J5W}$4f;pQYn;+Z7{^p0Yxr8ouIN&t#s)o!_pn@ z2#}aqX|((n#_M{u*YJM-ICC0W8(+*mSADMK8ezm}0-pF{FsGDQz2C>Y{r5R~$QLG* z3Ge6W;G5$N*DzS9ycpH~t{OkM>u>o%?;}r4CNe@hp7ZErjoHxyV5Wr$LU?aeU9iZj z`DR43i$C^6qgEvsN+mIAWoWF0A2OZkM59_aMU22qslq&#h~G1&V6mvgCa@_YZrN0P zUbmbm7{uuVp@TaiN78BINW#GyuJ9C4n+d>8psqwfyr2BJ#md#0D~gb=PcL-VbAQKD zNE-N+<@U%t13m$UAt}CW7sGG-O7}1UNvtx;^YGBJfJV32p#REDt>QcT!QO`V2N1r( z?;f-yRufdS^>Rd@ysf(?PmR>=@CZlx7a*jB3FgfX@-fB;kgyx~WS|z2Ej?csOe~73 zwc2zr{&obK9dXc=1C%pSQBZbsjAhdmf=~|Uvnff~W6S5;ms}tNFUA)$hV1#QG+}Vr zbXDhT*ssZyVMbT+h&#AJCFbsGjBL$TuHKI7>R%pj07Bcm8H;T{*Kp9O-uRT8GOt2K zwBDVH5J`|)*Tx&cFNR08{3izFdUCCFJiu+H-TgizPw4&V#La8*G@(oI+?{(GFojh3 za?;3heMN&C&$dMF*EK2@Fg`P#@4ZYvw0|_N6wqiMf63Ft0nXp3nVmK|vHlA1_B%sD z3cvkYTNezkS{u}hNtwKQC@95=*(NySRff`P?a(b={WehU>u?x#3PL{=DIEVfzmC1I zj>)?X+;XR)f4_i1jeoDSfu<@Rhx8za#AS*I$y4oINL`uqH|Pb4;GyNBrr) zuzbB&o!*DTrz;NDD_fjNa`0*)UVfqpYB|olP3p3TeAyOg3Sa z1T8?T>SVgzdU$EPHfQrVTNJUEsdYN&Y*m&yWpXF5nbs!DjV>Urw!0^hB;nuf) zYPEkJ+{Nni_a^35@P{ZwGoh`2-|o5{-5pf}!7PMgQnG~z{jup-ce;1uOQZNtK@e&EYNAW75FRmX1wf}?s zxSAvUE#6r_CY4-)vg*kdRI(*?d~`Oi>Ow)NI|$hh9m{uYhcgpiE1p#6`N3MT%?0(| z0XeT*&wxJ>=qPP(u&7AV{!fhEv=G8S) zJ48&avzS>B)gUhBI}2AxsIa~eYEOgMJ}rJ7hw`v|y7$GRDe!IO9 zY=gxREbuacwbI<8^;8|g8#P%BCCrkx$Qa5i75!4?0?E@!LV(lx>$l7i5(-jXT@m1z zMI$mG<8X3-u?syody`-5hqf9Pm}D1I^eEyo$Mr1Cf)0vf;p)+bk%UJA=UM^_bJ1f@ zjzbt$H=RlMd%QU|e0B@LPf}Qhe!a+X@8;C>hU0?;;!+04SdyJr!xw8r7@|SRlul;v zLu*7`<=x`vX=tqcnS0ET2jzDDB9q(212z%(QHk4)Of1g6Mb5Sjtjj9ecAvaZKo_vN#c%4L?Q zRR_vp`$>&fr7MQSzzEE#)JVZ_k`gVS!_RE!KEn0o3*x+wlF+~Ilv%P>u#4{`4|?S?hsSncB&jVS4vf3ojP(peX5fcVL}*e{g=#^l z@2ysRt@UXlfTd7j`N_l~e=8E?C0g6zxw&`OV2yjrJw|!NUBX!-3Rrgqf0Dmr`4D2R z&;+sV0{fW@Sm?GoWv;9`hIJuhniL8ei2vL_SK%XB-)QxGO%;+L|{IaF656e{y zlyR`w6xfkN>v6M~BIx_@WgU>@7o~LmL)AtQ{Q?ep*dN339cQ=h-3-G(2Fu+uU?{IK zHMtZydHqH_T}LHCT_aQI=6P4$CNh$lU|FSsv&ObitoPa@WTG4p*Zo*{hf zx2r8v7zUrSOEfb?+wFd2R!%bgPp*OPP))XPS=^OY(hjQrVHO2owO!fxfGgJ6Jgas{ zrJrkq0R4H98eWn_EGkqpZaRl2<>`7m)lh@}#c!|n-^#T=F2RFsOQgGN1alNoKptLH z8TO2M2@^H}=wE_sfkhAb-sl$1Vtlbt?gOSuBoabb2Z~u0>NQfQjGB#Xk7?+1lkMP` zQPh81zWPU|pa;vh`lN}^9#VhWP-KW>_{y?@831ixqUGN3gAzD$6dgu$&uW*1(?aVGThO+$P38{w zulgAo74+3=c*ea-rPRMY+M>gfF+f*+@2rs5iqNobvcrMDH(*xh0x=AvU==6_WC=JI zgGl`h5NgtyixGq*fxmC2$;hCGyaVclgji4vnzhvbshaVB(urW8Lv>Pvmj1r8L+1m& z;S&Er=vlW)PekTFTx}g*TuL(<+ueQLXD(9ivCqk`9EF3e=MFq;6mM< zexm%pxx4@I*|FGAq#&_BJah}6{;xlU30fFE&fwn&ZT`a@iWfb!_K{l3*fw${V}2Q<*pUML!hi5VjDpX(X_9A)Ut=paQQ zY6GpH9i{*6!oY2$HbC%^SV*tI5|q*aBqwHeM;8u;)Fa*8d-_@qf$=um?F9 zHuu8Qo5J~jU7tkFV69f0X-0%F9#BOjLH7#(&26QJ6S^w!{6zBXpWhDhgypbOmq&Po zgj;QNoL&y+i-ms$8b$Ji1H%;>PnP(i7%_yu3ZBUi;YxypzHJm@Y3u*zr}wQE5rkm$pt^I_fzg*i5}s(5eY+lhf(oz&#PI#1cmI0y zS?D4E2x;|*xcfY>BQFwkhr@v-vaJWS+Wr>3QROvIU*fPghQ~gXN+F3EJ$Zj~`0cmd zZdjOFiJcMc_wwdJQwi7w(9nx*WF#R5Y!5l~U{t2^(n#E=e9JqlSI=;(^@o+a#j^Sj zlc=~7zcA)8DWwDvKeS;}E_vUb;E6@z-}Mx)?~&JU2M)`|#s9M;+y!!3Sx0pF$6&{T zDv=jrwrvoHU}%w&Kf(D91^dk14>`;4hLI6NE1{9E^TiVa=gqFNU|{KOce~fBR0l?| z7Wkbp&yWz%dQgZ)J z;frEkj<3!%-`3XaJIGf4z%&rS7N7AnP}@_w&%pGIKkTagwzz zTM$AjRt>b^R$Ud~DRIE2$@&n4V=t?%(L;`jGH zDT~*&*x`_cIQtDSP?-DWNGFxa&2BW7AlW~e%t(?*uQ9?=F`CRc3w-lj4M3MyNTS#H zc~u~Jv$+LRs>A0qY5~9EvKZ}7KTNW*R%H9G2D0}V~a&D;((bN(Dz7TqwU)n zH79ofGR#b#=)3b3ak21^h4}2|Uos(p{|cM^fXs5MGf5_&yDE{$YZx};*U#VEj;HGu zX!OxIDs?;M00?%W2m%^_pzyZSeBmsVO;4(|Yh425hqM6s+tLh;gr8!r3dr_OUm6Y~ zPI~EOFdKd~TP!9`{H#eSk?tSR7HN`>h~|t+#2qp0!AYI-^*ya>d2w(}uk{6=mN(9r zZVpQdr6oSl$|YN!3YU7m^16XJH>pSB1W{OP)gyPcz3B3Vxj8=3rBOT6nyc0qN$jyk z_R3#tbuM!vJatuH2Dr8oZ>yao1|QAlOT_}iu~3<{L_t2>9Y42vz#5Sss89>#;=i_s z?~Ejd{~e4bp^y<>WVYL({yh>;D3!<{t5T|r8n+8Pu;~+xy1CcAa}KphV)GmTJ~$op zo`72Wx5Hdmw)t{TUi;nt?ZI(a`RK(m!}rU9Ywy=K*91my{!-1RO4|njP*LxA%(2{T zOHL%V9@F4?@x$;l<=W3HVfH7Y2zL=okyY|~8lOL!2 z?N8KdoogKjU#;6PxTr#cg1rLzrPZc#d&P^ z|F+s}E6hvOLne2!SW|M1a4L*)9{w&kny^qzI_cY;g~s7&TCV0Gxv*|1T?AkEd)gYq z0r|Wy)*X^04xm?}rTIr;cW;;C^QSwK9PF|`i#ptp)V~9+-`Y8o=oJ(G4ufi0`bUl1VGghu0Vg!SDz6q_3_3Mg}Niz;iM12;=x(D4^Y9 z`^$J}x-<(kCt=eqTnIjk(CXAnRKw$N@i_6#8$c)1Z-Kpk1ns5=10m8zyKY zH4aPc?SPfV@2R@Wth>J2jR`c4{W?}zQ9ZxZc5v`IcE?k~gOfZ6_G+hA%nSIcK*U*K zrzZ-^PsFBEo$3h;pIcfe*C>UjH|MouhPUG@KELshMyx)xvDH1M1N;FI6rn(dH4~2i|myEHw%#gdnBrtDz>2mZH#Z3hX<2*i=u1IwGJ9h;j z>ek8ZVnVmt2O!$W$fmQiZz7i6E$c2AYN=D`AXc5`VP63&atTYQvl^?= zff{8S8X?mZ$SbN-_QlkNiU2apB$dohzBY_w~#g+AkPHx7Ld3d z*SubD7ScA`Xe@MWQd@a@xi_GvBEtxH<_g-zj)`T8(<4N*Hlt{z0CFIP1G1aGA>JYZ z`NEI237qm)--pLc$C8S*N}zXvFai2BbCQ!6i+6gdB72VA<7*-GR4-J#TY#O~0!mfQh$pojB&rx(oa(R@1O{@g_Ca8RbY zM~@iG-|g;MDwZmX-&Lyhb+xcZWE{Q};X^8HphJTzf&5@{p*yJjdrMdvo8@1Yi#)M# zE#m8YsOAnh8gk$O{>q=Yawzf%egwOc-Y_Vl67|vJts4d*u@oMw@7WZwc_YudlYfBb zj4AXO=p=`o*#z(+rd`o6%?wrh93B}Th9^VN<R99P6z1Z>{<>_>LZ#8JcG80%D)b0#to{iL(%+B3WWqS#qw|!eV zOcCHXyUh7?H15f%Jm1DAu&$BLW@ScA>2$K_i~S+|8;7b~_a+Xgz;G}^Wf1W6Ob$XL z`D&ydsXzeQ8zM(Ju1XUN@(NHp%^JQ9LW2ctM_%dBJITTViy*`TUc8XJV=8!u$(EOw zWJ$Hb)G2=ZKU(Yzw#3|4tMseG2=QID$=%o)D+xIt}0MyFI8CV)|D+f05EoKTrkCgD)&Biht@I1XVY~qa_ zqhU^ttB<3I*E*Gtcvl*&8a{y@d081SSL>&9o0Wgdm=>i%QWyCMyntSVJU1D=9=+xB z6SBz(m8kH7wdEIpfj@J<@s`sAv_waBJiYRK`cy&Q+aR|v*-D!%vf=qe^jV`V0Pt!r zSq&C~15v;)Zj$;_t5xFki5A0e-BUI(Kad|r!Af!-MC$aBN~;Fbs_`xt)27hp2CzhcEc%8Nc|z(&ndm-eyMK?8g{#XW;a}K zC_U@`;wLN$dd)fco7ARjdkO2K{{YpiEd#4jsoMM7#($080k{qWI$-qnxxe#L?RCd4 zr)=%3@0eBZ{hDx!C&L{SMq)8{5c_PUJ~QN&##VyZ3Fs+ljYOLBP8O;JJ{vpd7#D)c z{mTCtIBrrx+t>=&j@fXENHftvyU5obo6xHLO0bJus8jQ{TA7@UB;d@PE3G&jYGj3m z)5v8Lg5H-j=xWi}hQHYw)K<^gq^?+LeoUkQagpDeS?8kRl)hFY<_F`2X*q6`h-Ev! zeU&xVu5*HEAA!wPYYiBh2aaOz&@a-!1zU9AepBp@ZGG?I(Ozbwr6yjzD1#V-N)gqn zwEqDim@-OI!TIp7`iu>@+IS5<>-0XORGGHwdGGA)7(B_%C1%Zx%2 zgwM%OE}Ls~&`zQDha~pn2gbD&xOiR-mfv32zmQrz_emVK_ck)*+$e*Lnf`Vj(LE^e z4Nf*|an*e*O`yrx{L*tIebMb1XOas5ebTS$R?73lkhlVCthAb4B*y`Ro>b8j%un)J z83~`Ijce^mjUvmMw(LD7vtAr-9&A<#C=9{4j#zQ4@?qCI@t7 zVhMp3YFW6%v0L^G-w~R_fc~=H$uk4jA)AKJH_=m!Uaw^i8BJ)Uz|Sg zW+B3oj_q}N9I|{eS#XY>pF%xbX-bx}*Z%Ff&oRj`Sqje$;04MV@OID8RNb0wF8!7V z1TnP&x<``eOcLZ*>qLT4ZMlmMo&&G3qBjhISZlPhCG5BInb0y&cqeaWbRRg90Hy-M zBy*01$?=~`#a24y@*ji@8nsxbt2N&WS)ImkD;Hc-zuW}beGU=?@J|W>MC8KM6<}Rl z@E;iET!&?F(NgCdV*?{=yzdFU>(!44S4qFWP{wmlX<#<@KNgUu^UnDa!29M@6qRMa zNWT|8>;Q&6pS^5>+AqfS9iQj#o4w5e?m1LJbm$4^W^K`yYmThg;%wEN6uZ=wdlp_n zWQ|iIEh{t@W@cbqjC{@|&KdMvY&e#8lpRjFP;1oEpt|y%AU-;S%2M#VFj;ccRaFh5 zR&7gBVtMpO#3_~s&ZG0)p1;S2&v}0mC=Lj%0!@dSF*gh4)3*)K6`HLKL$>WORtT{h zfU^JRg&X#EQZou{H1>Hh}M$_$Q^w$x5qyAk?&S znO2~Y`)TxXH(Va^nO*~T0y8z#=31WUFy?dlM1JMQGunvK@j^wuv=;xC9jZQXDwfA% z>3HA}PF=6o&sR#MQz~F;BJ!qwwzh$A+3yvk=?u*I#<5f-bl z%r%YY@3S(e={1g#c(-U|xXPdA-|Eai)|1-=x@K?m)>rIt5Ns%8(-760nZk6TE*zt^vVh){@r57za5X~-O2u% zI=8D=0gQl2tUjx&``e*dR7b>OveaRrFUcHjjL%;-5lWS7YRR(c4AkNWMm{Y8=>P{N zF^9;Bvmoi(l||8VkDnX~=aB>)HD%rA9`rSK;>RNu#XOVTyeo1UU%Kz9I^7ty+VOWz z6Uv{}=lkm>GDtL>zjno2n>16eRhxz%xdXXtL;-=nA6D)5w-MX+UWxWu7lG9n4bqCZ!IF^MxFFM@v>o&pNvIk%>!6SRQ%`>6e-~f{d4iE9S7I%_DxkSH}x|3Dikk`8x zhw$tonB-A4Ds4 z=2OD=Wu3FZUUk(cj?XQ+6hUEo;ro|{{5VX%erg7Jed}n zv&L}@_S7ZOkvI**$J0m!e(ruyq>0e{#x(}$n_CfX7i4T1dZ0v z#}O#w2xhRTs&$jc;2UOok9Co z1R42r@7d*76p~7KyGS2jI$WQ_wW2Eg116GImrF9wF{@6d5R*nAOQVq8@iGT)auqnb z19FKe<%z=YG1H>~_ravK>{G?cfnRbjsVoJPdd(l7s=w`nD|N?gUm9Ld9$6C|fQH2v zN2I2i@u3Z3pdj=MNU@f5n>FLq0l}T;VL0ROB}|rbeZDoF7PG{#ncCf_u(oYler}?{ zD1zRCXdd3;gM*9tGjR-)fw5EoL}kAHSUNkL!c1TyGO;2JrG_ z!!|KmujbHWO+4R<=@zl5gRae7!bX?i2dw~LWIrCdinc=XXab%nO8Hb#z$`uA^?Gj_ zNVwdRrVZb}yW0vTSzH$<&&gI*&=Eox_I&3Hm7|Ir_=Ak`0aR_yd>VKkKt1AySgA@e8u~uEDxTyiH(dkw;QCmi@C$PV)f~sx%>1p zt9bWcGEaf3RgN+ROjMxSX->Z1TC8nJDo{QJ0rZSxsgq zJ#@;pS|8J^e#4QLs`pl?H~cwp7kmq#L~xxs4`kyzrK{QNZF`^0p?m-Or%k#d8Zddq z|5GJGw9>#5LdPR(K{{G48 zouPx)d0t?6a*5*&3A}Qd#mT*qD;s7cEZuKw&|;A2->Y9TE=qeRn*jv%Z?@hYM+27}Q_lZ4Bv41SQ&(@`1I!F%Y?zxT^TuUv`@E$$`+1X*x>-|QP za%Yih_B6s2gGz-~tZJoBnNyQA4hv7M&V|?C{l+&$V@5s9$8T2bhBBTFBBC*XNyp#Fb+e6Ene1oQ@~ac`W$Q2aKiE zGIiM83R|PpRP}hhzh$j6c%Q_@zkGgYx$f*{?0&`1f=Djlp&8hFQQ0F8uegeV#3v0otF;8kB`gt3 zb+?FkY4XQ5fF=2ob@VV85yretMKgnLtmE{WlleggT%?x-`&aKHe#-8FXco6&l39AJ zz*xY@NL>bb*~|TdK!2&Tqo*6w+PrPM_sk?~1df;kDgc8}bNpNRy?r7{!OsQA+_DS_ zS$^*rWj(30rMi`cmPEMUjh}3tZH^UylO}5hib{?rC{m+MPPFtT|NooNk|`kO-q z%Fv)Q#oIGj&pG`G112~;sKuf&GLz`FhwBVDrgutMixpwSxk;Rla*V4!Yt~35Hc&<$ zmHc4(iF%)>>oqTKna`_MsV+x@1L(pfW9OOdVThE^+gC)hxn+`E_PY?UQ5?Tc+Fh`* zj;d9v-eYD85Un&Ros)LG;he>MvAJNnJ$xe{&*mH7Udrg+g(13P8dF+;Spz`cO0c=Q zUa5ufzw&C_L`18LWKJ(BO`!Fj5lf{bJY3pDWggH*xC!>pP)c@3F*!&*z5K zZ~Q6Cpz;25_kpuFRDg2z!A-|g!uPy*B#?z`+>EqApi4j30SnatQq-JzR* zr@g`7Zb}hPJcfI=RHs?!dtvkD__xpYd!s`M8OnG%XEL|*s|3-)8$e1fSA{7>fNi-~ z&^_qeLU?}gSK^#O5kvRB8#@4+!2LQmeV*YG|RdNG|FoOgl^;oUSu-yVOAa2 zUBzjV^#uvS82wY)l$xxF@=u(P<}@1Q6-JN7{P*#iKOmRFkc&qs?SQ>?VP>i(?xA5x ziy3^%^;Lgz^>6%AP!)XDD&eHx^i`2XJ$hE8Qc+Wo6C&>7vtIf2c|7eU+>CQdj@^7& zOZ#KBd-SmrkXcPMTbjxaqJ^V(u56(~lM`ux-YsWFgB1aIEM?63gS2F8DK&;KQs}}6 zc*Xgn1jx8e!k9WXFsU$d!aH}2fFK8!{ z?)%i5up#!*<_S7ZAutR(1EjN}K?M2}H(b;ohGQaDCp}lDW_>#bbbe)-xhph|UX4Al zuG$K04nl>Y)VT~}Qn4gU^##A_G-}`cinJ?QU(q%gMB^?#SCB;!=0UlyP$2fbJzkNI zMHH%jN?CEKPX`hY1>G`VVNF5jAz++*Ugy)RmN0*g5}g;wQOB9_UqT59fIwu7xk(1t z0pNQMpQ+_?2R|VtHv`^a%9l5-CCe_u-Y#zezA^h!u}W~DXSH7rrt@+>GLev#%+*!?JC$t>dC8PG<}p;&SVMu9(J=K@*j8oTRv zO5V@*f9!?lx33vH75yK;(mpqZ*uA`m;WtKnwR_W61O?Gt_C%r!!sS}P87-JW_eMD# z93lAW`Er}8-e#Dkkj(#z*Xl;0P|(kPZacjrOv3lI^V>RqE96c`xy*cRUg?a!FV7hBukKaPiX=@Wg()eDAG%vZrx;do;(vKQ)d6 z!EsI-PvzNIgmWfmHF+uJ7i1GUz+|06cw@_$!Zls#r`J}`54vrh_U=~59%WnvB?E*q zd{!qv3@XmfHq65P?38~hQZax|1Y1bQ2Iqj!7u=cK^tK{y5oT5xSW*XAUofl^WDtoy5-BoyfKf=U^0#J?Gi}6>aq|8U zaUbUlC{5b=8K{KsMMl23y2ii~c|TNh_43cv84rsBd{q(2WLiIkzX4KzRKx|TKKAr< zK=Q&B&%oOd#!<`sXEQE!qQPuwrl;|J_YtD9rlt9Cr@>(Re8VnHo-QJKCWqI#AJEwx zdfFALo+>62nXQ|(`QL)?e;_6zF7h;(6HL>pluCGNJi`0KcAh`4RrwDLNP1R7E1`Nh zsRA%NzdTe68nih5DWXabw=2E6v!A1*FoO!IsbBP=$1|_#=)hRpLYYTW?IIrn0C#CC z3N#foSyV`DD4NY9j0pFmYY?O;`&mA7|6rP&S1f)#j3c0S8+Z}~nzD*TbC4NgZUOC; z{tr^~KjkAYh-Yh#44O7Dus!H=<9e*#sX~B7=FjQ8ldLkZ_kO#}Ixga)KHUDil(}Y; zm7$v8ZbTiucCB*7g3&y=!;HpzGe$69w@q}cv*qp=B9sfD(VCV8u%{?25s+627J7v| z?$ZQGQ&QI_7~r_RKjNI5)@HbDTOBy!uC`j^F9QA*S3jOgUg$jm8=DO~>Vr$+Q}P<3 z0MBu6DV4%*mpiG15>wd-5)**qkH*(RXelL3_GV>9w)H_fLq>V%i^j>uR)N%%4GGM3 z^qeFi3N&N)UB9;!R4=9U#r5Ha!kmOtP4X8SM}$vI!6?@&LePkjpNlSNafT&#A75WjSGLC8SjBb?VONt)^kVUzQNd&gaZ6f87bin=X z8_qp~0CtXvnw)c6z_sHeeJXxi?x}76O6=jvSKP`}TvC5NrBks@vMOu2x6j7ZOTmFY zdqE5(^72|e8w`L7738We-hCJn^tKa7^6H#|>VT96D|t_^*rXSQeieAWXwO|#4%;A@ zV1A`$wRzl=cTaV?G+Hi>Ici^H@4W@fdqPWg_FyMZp+W~ zmOvx=r_8aPT8v4J7#5+OIpDOm+yB?vyKIZ-$4)WER{@xH@y$w$L$7WQ|%2mv1;WVoS(>%)U#`iZ1X&Ey~(Dq zB|h!lx5%RVAx~kfs^w_AZ#`jGo~$@LNW9PS$NF132~~N(&h_&mx;$m{gMWP@gGL6o z!)rol)V}FV!r@%|N>PAURB9ceCpqrHS8qQK6tB*e+IF%+iyxTg;q^kt_>|+mZLoE; z?_HPAcV%@$C(0ZV$Mh8p4<3!w@}r<&VhX285CDfg;Vgq72geO`N;c0y&p-$f%!@4m zT~bEcQMmU_2LSiR-CIF76&xn(!j2?UCSNX|ItDm7CxTxkZg!t}w{hlm500;Xj!V02 ze9g8<#An3%R`D44S7z|8qM|jkv7P2aRsvU1{3ZMl!ZVy5r?ZFx}&4nO`jN<&74OH^_kIjxA(`BQo0&k+<`FLmDH;hMqoq z@K4*JrTj9;`53becGD!7dA0fQ=^)&h-IEA_n6wFjOF3i5Yysg{_Pxl8UetXxkYn(PGzm7V=E1sT+{o1UX3+xh|M1; z{i4USw`C93X8xy!fQ%OUPcj#ZkN@ra-ghV{nfERl{+28a;TMvXsp}Wk$SWQ8$>0A} zsjYxbi;14m7$}64d@WboR6dWtby0A}`;QIkBs!v(X}zp=zhiaRYc_EkNQnwgzPo>f z`D2ElVGGX~r?;_9K5x-XGM>h!(5i|s;lf11S!Mmh*|s|9cAa@h2=ayB4={2l=ZrKu zzTZ$`ypx5Q%th-$sPSqEq<4`BLL>43M-cN5m8@=Qp!Eyka*qm+zAiRswoHhK!+52% zfZ)hIWe=)Fi%Of4*zGB?9X}Nz;@BUk`wDISIJB-aoqpDRc%cYf-VgUKa$%B3YfRsL zBCXNPLNL_7-tPn(l@V<{lfbi_cqz8LpKG))+BR$ey3YoJ8~9ZVrBtv9dsHnIv$Xjt zny#9q(PEdl99WI(!$xqFVAVAC^wOYH6h+>N>}@~B-|u>%HET&Zr0LWc9g0tF4X#ZY z76KvHCOc6TtRYlr)Tw@&^;=UEk_57-FnJNdKdAk2$B5Y73WNv+3CAQ>>P+M%raheq z?^n)>MzHmjC2piyR)P z(~|0I)csJAZnGA|K&jlTe_^|!T5dD?FmEsuw4@*)D9A=I*RS`*_*1*lrrkULypqoG z6{qPHjuDbu;!*)7-YU#bQaiACN7<^3n(c0pWDijG>Q(FQ*s(aLv?#QS&EC4+v)?R( z2Lz}ax=)5moc5#fuHhaLC_Xz^7?s^;!bd7B&|U37<4OoK0owwt(q?Ct?!CwEun<0) z+6%&>wFwYr6>SRfWlnUFk|!vIo}~vHFm><~i*u@S-Q0nDt_`hDhDCj7i^2n{tY!IG7Nph&7`|K+S2G&D+G_@%E#5dT_ruWhC7a ztX`Y)e5e9u^wM=gdLluD4YJUDq?tsND`_h?k3Kh~2O0BNo~N zlS9cXJ?V1q5?O8og`sg62134+I!)=ug3U}*AY7)J|=UT&koQMm0d&^w;2j7I8X zZ*xw4kHofo-J30Q66kuxuP2ARjZi%M$0UX;LPxw^P!ko#b>0GywJ4-Racslw+3ekZ z9LEQOpA)pQ{TeR$JxBQ!knY?kSB|uEpYq`Uhq|{6so@iBy<5`5p$YcnP{OP51c6w9fM*Kp-(@o)IFN4CkfR*^0Iz~- zofO&edwf&2d*n!xKvQzy*Cm$0QpG%F<%1hWz&^v$(a|twO|B81Cr#$62yqk3aTS!-k8V!hR5iZN)sE5Zu}WH zSfJtD2E;!S?lu%vvz^3aw;=*{^!#NBu<#Pjhm*#M3aTB{i`_HrF6xLfHIP1=w+ysH zgx0*RQqe>_x$_rUuf$p%Zm}xz&z;tI8a?qgXuzY!_X##4AGETGc9$3gZift$VV+h_gNGGBA5_YxFAm4q0*9?V zFk0h!X-Li<3A`d9yhA4phiy5*DzVLz898}VEB4iL{5BriLDGOrdoa2+1v7p+i)Q=C zmT?vV35UEaG6!W)mIbNZV@o7-+)yJ%Jx=5s%oy_dX>;!wtVA>phXO(|MyJ%-Ub}KI zg2G>MmqhNyPXHV#Kf2+aG!971hdob?-p2~NiS3I;i-)}BAdW=RsbFY-X9 ze0!~GHlD{V)o;;4Sh32z^Y&cV{3b-(%+{UHB>wE;wWt+zWDVv_r#I)p=dsOTFIlb} z#=OLTYORG}t_B>KaJxHjgpcsoiR#q(ZKD+()k#bARcTsl}Uo8XgZe8O+}DD`r_k0p8Xl^BFjxZ+_wdi7I3nw zD0HZO?aZ$gPH8Z6p&z@+YxwLU`hqEn|4ECyHnY=<&7nS!_7Z9s!J`-) zr4FXhml-q}OV?-;PL)c3k@fA${EA*!^1H`;KBpc4z}5nF%hrzPM_yH7~{!KvQsp& zH|sMmp_0PgL_f41;$v4vl zihp@R{vr6B&SSr6hkD^8ROO)^4^n^TW+*1ciNJFqfi~e+6iS5Tqp3-VXt2N8ug#@=>fl)gag4ZtZ6*{OG&-QHxST z5yVlg^XJo~t%i5N@#=0(zxJc9I#$)lJ-6C-us~(?hB25DS^UyXCn)_x+V{GE0Kz+s zpqB5$cgI!V*yA@du-UOmvnij93iaATV_F2_ z>b)neH#~DcxmJ)z$uDsRPUHuN!w)i4$|C9ci3XND2sBypcD(lj7-8>!`RNFtS0A@` zpg2KEi{VQ{XY^&lS@Vy=!3#SuaGIat7gOHMfc)v4QzsRI-O66bLv}Q4{e0bA=d>^c z0j3{9DT;glNC;Z{^`AET4QCYpneuF!F5w`%z31P648n#eCTp#-nrlR0(rMMo8Lqf6 z{>-zXVl@vn_4lCd(N_j`DHX6Y2&E5DkX@`4MJD}~&j$;M&%8dZ4nZ;8gV=BJO#HQK zHg>`66b?`)A9od zZ8E`qN{oNQq1V%D>s|k8QtD+0H3pM9@nz$a+KOoMCRoQc(-s9!m$h|$4tMFiX*#^N z#^R;<{BG4kANhvlf>w_Pe3=)C%bGFsb$q~=ls{$@+L@>uECw!7qQZRWL9X9X5X8`* zAYJlI*za|0+Y#a8JumrGxOLhd`eNFxsbSNkgO(h$Q($*p@bPuJS@Or1pM$kz9Z9a? z#Fp~w>*vT-OORlmZFF?~CMtf=KsaipI(qbmFOLMY0A#6xDvOZk(lM_VO%nweEHmMC z1@G~EzELJhGM>W_p816K@w=dIeoY|RMoI|h>{xcziv1wBJ>e-E)C;=Z+d0sV9W`CU zr6;t~{!^Lb_u#o88tOsUTN3G!A`@Ws<1QItsCg;f51xd+Z;98)ww6?K4*&XVb(wH(%CRo>XeW2 zgquc}+vuZxLK!ZjUcqxjqgTg$rXUkmZYtmDlNGF*YQ^$|MwN=M>5=YI$!*Yi!rz#< zyQh21Bm*pm_lQNv3Qdh9x>=UC&=+h+Cilxto*=1@mA|Y1Uf|X2Qez`Ze>^4+^QAY@*D#!A0hY;HYGYE%O_E zCC+IYyUEu>;yIY(fjLYNxF_fU-QfmmzYXkV5`3?@{fgfJM(&B(irqY9k#0_gZy1b# z#Az`;&U;^trtKyp8XTXK*IgJndnnhb1E%6_026 zOa-i5CRx#KId{n-hYtOSAHkjQ(S4CVEDjHU`f$vM=(E?(Gs-d9?)C)!XR*^oPhF6R zIUkrFH}f}i3d`g;(DlMT#&S1}FEpwn6z=q{cO)PX3O@-T6NKMrcg~-AdrEAz)tMo; z5j2e4;|)+ikB8F|MI{v6qYYwUwP(WU5a~xg)@9}g3kiLmf|B6z+~MJ?)Pe==pdELD z!Plyy73!6C(L&=l>9d8{1aQG1aNU_I+0ME)2HaDS*c_lwe1mWlfu7}pG(1Z7M}Y(m z-_coH!-b?X!^UI=$D)m20y{XddWa22LT*05xC+)?tkhp`wr~3AXuN}5go++wM5~ak zbV6)30Qc^6I9&}d2Bzi*gvAEQo@OatO93F&^84fZ?kubH0@}gbV%=x(W$FQ7*o%&gjOxoXls}Q6XlShJcAhaJ~?;t6@V?N?*Vc1cf-IjgbV>X_p&Q|)#?j&oW=zTTnLB#{){Ue}Iy6YGW^ zCc1GYh7Re8c5w3c2Y*zwE}5SAlGlnV=q*dYqGp`$!trKr>{y%JnCOux7}5<26>mCE z({T=_{Q%0m3~O1xlZ=$lDI_vw85@Jq*9*?GSJPpCUsN3*p6M?N*;5=X?THPH7z;+Q zb8oQQ;en;sryM`H3F&*_drdV@=jdndtXi?+5*hkqlxpFm38QC(r7k-lif4{>V=fm#H4R`a4 zN$(L~@FDi|!It-h=Zw&y_l(e~b8b?S)2yPIn!H&X*7m|qUvSZoEmOS&F=9JV*x}a) zeLvslX`IxO#G!zDHQI&Pm3I{7vW~Q|Y5-mo>ID z|BWTr14lk(AZyRQGBvI5A%{Y3VT+1qoi1K=NWghj**z zQikc8MaVD^PGQm0m-APh9q_#b)5efc95S4ict4&mB8C=@e5SZffuSy(Jal7Z zSK0m{6qk`hrO4BH_f06b^|+-s9j5svkeu1R>)Od&c=@qT4q^EHY^m)`c$QtWx<}M}m2goq_C`8<_^zeL5+D?fq z^#TU*_Bg4f=e|q>QXLv-QAo9aXu~$*BWO|U#BJU&U1s?E9UQjbF_OJ%T59mrIp$R~YJ+7F6Uy!+0*fmU0Kv;F(ar zVKp`y#n3z~r`4xuGs!J)mev^d3tmDw2;SP#U1~iq$5Ix8OA(=nr?jU5=J-^#P_52%Ojl=ho>bdL z7&J^|zm_8?TwBUm)?0wmtW79v*Xc)!O}&GwP$z-Ar`p6-tUYD>`0{*eFWuqhJ^`l2 zZ@kU0$SsezFXt4Hahr=_0+6qmBQNd5IH7NFS0ZrsjE>PR|5EOIu+HMKUpjmc1~Z~9 zE%EJWbV;JTfD0N%9#oZ%g26Jh>S^2R6(tOb%!b{9;+YShCK5^nD}R)nnJ`W;`qBcj z&EGLj8Xg{9lzzLXfrY)+?IrezQ*$S|?ZHLjbH(tGoKxiLrwU zC7e{4pUY#|?j6nIq+B{_vt=D%64>JHJmuaH|IS-*70-C%v1)bRd*;Ltl!l0Q zc6NDlrvwRfMp^gRWR+X*x1?1Au&g?&cF5UV^LqO<2n&cr3u*T}jjt)vb6eg9A;A_B zE+N#y-K{(vgKq`%zJ4HFbvvoBrTcU4`r+nL_}2v&adP$)npN4*cl58H!ajipe22z+ zAK^o>=pNIDgtb-nbSA*(L?` zNme@z6-O)fSimTPG`=6GQFLo^bXx%O@?3i~yD3%m+BiUH@thXK+D1zbCKn<-s_LQj z3Fk1M;xZUK*D@{Yrec6xf}#n-wraTg%nRx*f_S)2C~oS7)5|6Zf@q#X7gfPyN) zDqVJC3Oh4SLHpECpY32b%pVW>%y?=H!L(OY5qPsM@7+tPp)hTHOe*W1#cjKUG}DKK z$Yf4RMQi+rr=)Y@LQqX%9HZfbXU9N6< z4@4rJIP>`X{9w4z`38$HkpDhTUlLOr7YMJMla=@{Dfv-r$dx=26#egoGagQHem;ej zHSkfeUmL_&1M07uc!FUoe&S$GZoaj; zc&3vL`}SjVlEXAZFPWtp6gu->h)OO)zo(DYE>PCU`^ll?@ERzhMy{iKGJ1xti;KM9 zt%af&QVk^QxK{u0Y&T*HO!Lv!6|8T}Ok*sC8^IhU$}#^?LDlsX^|U;Q34rXI;^9f1 zU#y^^QVOt|{lo3sc9-M62gZl;k(S=@@3aj6E)Cp{QkqNX~4!fb$)xFCdczhx4{*!Rqzd{ zRaq7K=gSP7_r96hU4s&LFF*Dm-AS*Nw7Jv6s)e;2Rvl*Wxy2cx5tvjvX=Fr@St+4B z)qJzccD=*JL5bb_w7R7lpo}Y@#VvHCTW1%Ro$iE$==i{omFgu~)@eyy>YDcCYZt$A zGf9_?OnN7spiWGO+?R+5EnBUylwAMfGY`Ajz~fPD=jNZM>JPM2ZdS|?ROjFH&O?QD ztr}Zay5WopEtHHy{nU~FfyZ=I$u!T(Q`~a>NiFh?(Ytc z3WYhxmxP?(0hi(!n2`GkN|u0Tg%EtWF&E_ zOj7YQ$5g{L08@77r7Gm44fB3PMDgE@h9xkEmEsEH5(86cX33TUMiZT2PABN57XWq$ zlc%yI_*fuk-xT!-XGY}R0nGw^pNL@-i^yh%hV86G>Oldfc$x1LBdDGtv2Aqy^5P6g z=a*dMkVI(meeq6)X^2Y2dx50zCS*ig6?D{HHsjFpng|MbO0A!FXD&__gaS=#a@-w0 zp0C>rjn#ZH;^WWmY}?BL{Dk!Id>hhiG9%C4_L;xu~1~Yixns)j# zkrg8-Mfdh>%qkmpmrD}x^=bnNBAUkBo4#cd5$6+~dn2lrL>8xO$!nus7lOgEvdM_z z64Epv#5JW}ghZj=(fMXuOj{ysQq@G#yq<8G?)^aMrPJsBo~Ht>MO-&G%EfQcxj;W5 z&tD^Y0Dv79=^o+v{!FB0rIUe7P zUN3qYbEJQf+RpQ{hTQ-|WJI^g*A}r#zb@~Vnp42zE{ZAH$!GBie6RZL+*J1vng*FF zc0Lo12?M=*GW-p%=Gsr5FWj2Sz)$@5u+c4er&=_NHqwrlU0Qg(^}H ztwCbhB8|tq#W#lcyWh!4%Jb^9WV=ci-;j{wbDa{@(`mu8>%9=qIRr!9SB0-cOO~i` zw(lh^TSfk$(Za$z3@{fLLy5xVKODD-qve>uCG1p&i1rx>hYa>(pDn@f2VJLc*_-Wb zbOoK{5b^NTUf6bn!J!(jsZ9RkR*RNs`UuD<_sa3{^Eu(Un;jKQWROV)81c|h)DW2D zfpk>Aw79m+1^G156b8J;>1mhYW&03llT%6c1(0B|Sid)1-4Cfqp~Td@n-yN5_i;Q7 zb62(n`JFi!6B>i-*-};&g&Dq&aEK^56P+?n9xVDAH{6ya)kT4sG&W|?~XSzCKiultXt&SynQ3K-wA&#~dUjfTG zAWfGOS|zP!IYfh(D~pn2d>WTH( zP~_FKb?t;W+P&KiuB+W)xy(^COZS($(B)qg@kiAP;}z3)VEXu~vF8U8ejO|)b98uF zy7L87p(^CBnSv52?kUBV4dyqQDhnQ>w*F0jK#z+>uC8EFb#>e%R1$&qwVLTy^rb-Z z*ct?6K>~N;+10$ywiRyu0ye%c=MU@8o!YktRt~SKt2NlDb&D%SV@WA(JAVjXJ%1Z@ z!_e{meyLaF-aqh+t+AxWp^;x27pd0WtZA8+mj3!n*O5Z6vlP7f&GW%$bqIK^>bBK# zCtx)K#HivL0PeybThtw&o-1ozUFv#`Hh@3dB6U`_!AxXd7)*Vt7%`04QQv0--UXYy z+OpShZF0Db z&jPo4J!JWVp^u26m4}ND0zkBVW;$e1fF7jv*T{;=8HP3)+golh!y1TpuUL*{s#8It zZLRcDe4O1tx4O0YCOE~)x&x_+Jy7`|_+y!M3MTSieOQ`hH2R8@oya?c4nk4tIGOd5 zk3IdcWqihKx#p#qFCNy4yq)bQSM|-HXI!jxH;zA>?QUtxg;K{%6zmAo4Z8Sx#JmoG z`ccPPjkvaw*`_%q`Uw)b&op`E)mRk3>5fPEs^=NYF97`5TC#1tWY-IoeXrA{Y9~Uy zm2C>cTyF&+KkoXwU_sTS2-~Ri%fll)Hr%!D-VY?^RuS1sZeW_Bk0t#JG70zKT1}Z` zEa6;Ozx5m13Kgu>yoQY(-vYEEOWl>d^h$r?qv8JA1 z=-ZO-aPlIao#sEV4<}ED9%k zA3W3dzzlZX%yP5LeSD08=Rk|_;s~@*Nt32(a2|pGL@Bl7Y%UBk^n?em2jiz3CS-Ub zu+t(p)j-Jmlw0!FoXMpvvU$X<*wjeVRBZLS7Yd>>DU5#2hR$Mk7`WZEe0=G3m#z#M zO2+f2xyBib8x%&nQ*yb{G|?5L{;q_1;_@E++^I4Ywbo9P>_o04>CkY_J&c&EoK)Vl z;1S@PUFJG*Ku|Teq6+a5N{f_K*s(%n79JOKTHw%zOZ2^^*eE1&HOmg34pX$P{soj% z)KgyuWd<;3x=g&C5tfQqOox$8*crM^`QW1v%`4e>On&@$ zjq4xcSRg@ELAN0?8)npLvY}x}-Y4^M2EzWJMXI1(8 zZEmkFXVib|z94fy+K}(Tiy`Q%z`|7#U)%Pz2=l}&Z9Swmnhadg74pCVy@ zl!I#5y3Z~22mzx%$tQwAaQ{<(BN@Z4=OgWK%Z875^NFN4v8Mv00Y=2*r=9GuXoxTH zlVz*>saf_5Y4!|qaMs=LeeI#sFOW@ZaO2`yvFd%s_NEgYiqZkl(&Si>_`Kq9l$hT% zoJK}EvL@>lTi0gfvttf^whgmUROcV-~}zlOmIH zN#x&NHvsjFJR{K9QYg#>c~9WVGez^l?*`~h;nVkV#6P}_$>?C#k3v~g^c{OPlp?`8 zu?7UA@+Oe*AIl&Z1d((@es2~QhWK`PyP=V44eyPVjgZb>_i-4n5zU0o&9u%A6kEgx_`77j zuVNh8sF&->xHjtQ#=hz8?BT1zQqi;9y}f(-oLEUouV!M06Uz+i8y=;2ogwzyf#Q##0yuJfry^bGy7`z(RC)MN`AE zMEl@S_-kA=Wns{V6g(M$* zlBj-%tEvX+9FE3Uj}jlwW!_9TrsmB{Zs;o%-J=}%r#dVcwwF6fyU z2SqbOQ72euv+5+rcl7qsG1@OttAiDB@U(2`-zCWLPEbv5?Du$(6>XNW=7wz9_dv4J zZyu02+IX0k{WdMg(;}7BGc`+^oAf7c%p_wm5CP%XT3v@eT8P79x~^N9P9;EM+t0Vi zGKuEd(c|$4Zc;9=b*Ix1EZM`L*pC_W)12tpCrP1I9OCW~V9W^tJZN7BCYw!)M?$`>>gjk+sjd6y>4glg=pm&h78-fl_U+YrL^C>0G zMgK#OQvXj~PWGOe2`WZ=CNvt<)wSQ0__$-)$;F`Fv`&?T8r{aRscNW&|*(Ay*HiEbcTSGHg%^8RbPjn z?W}dXph(VjgvvKmU;j|V5{BesvU1^)SI+%p#}=}jal;o-c6Qd`ezV@BCBgnd#|)$I z!wtb3fHlGk_6Y}U#)fN@M-^Md*Kk0L=eIx5Ao*Rw{ZCtDRWAK3*pZSk#DTgx0Fh;7 z`nX-v8@T=lv0f~*q1Xx(`()pQ7VstE33;+Goq*VU98kn_s!TOGOg&q57n^Jz+E+<)NuRuFR$96A1qa9@PUC&}n$ z1YhnL1D&v-aou7H`clR#W)>pjPnnh`XExaf9&8#cz9yQ>6P`LoU;67+j)?c7nV>kE zEBufnT;S;o7Yf@wxC@qoeMn)>Sv!48cWR6@JsY)E^~zp zqs4F!7A0VRI?wp0&R~H>k0y+y+OzxGw(!DrALDmh^F#c2vhv~R{MH~x-v#f{o>6-+ zs7E#0dA|Cf%@S=VL%V69K68NYdXQZM6v*b@=-NOvoQU(vA3NZ!PiErNwJnaOqb#9q zbU+Myhte20`4UFUV-~V*KNfj?T}H%&FGvxH4(aIqaIUz`LA^)AELRa$lH_vc(j!9D zJRoGd_$i~R39j^O7X5Zv;O&9Dy*iCFRFX;#*-<{NTp02R3)ft8t#%2gfT71R4oDh% zk882lANKUf8UCl(e^P1lc)hOvVL#m%ra;fc5 zknjQF3twQ@3z|n}(BVP|2~82d`$d)J@&19aedl#pF7Uh0M75RD8i<>-&C|`!4=LIP zoGe|ArQ(D>M=99|A&T5S2!Dj)DDZ!4lV7$!qBfPPa~)l(UT^YzLA1IWJ8R0y*`37})v5}iW8&j79(}jFuy<4d!f4^62>{3nx zQ3%J-k$1#qOJ!4JmrSi%SfP$&G6Db=oOx`3>cWQ$s@D9UFP9C~1uoKg*4d1ZU~H@dZU4xA3PmlAD>o?; zBL>T5v%Hu2L`90wh3(N~H(C47VTEfUkXl3T7i4ld=Q7iQ>^1MvXsR(WF&Ci?niyN) z#I+$p5z}uz`v4P?Squ$Qh}7$a95Bk=18jqgw2#X^1%Ik!$Hv-UrFTz|%BKUy%ZguP z4mDAVfGaucCr$W3`bBd@#|~E)$}KzVkUV-OFGJrf?-e5AEdh};B^<_=k5_c3w%4Xbn?C!VMp{$VA6eC zSb}5wL0B^r?SylQyUnl`@ZF-7sc`dVyvD!LKLK`cAk%8&&SP-GRzGdCQDV)oDu$}{ zTwr%y{GB+uIYDu};yNe$AW6T&Z9-wOR&2Yy@fp{N5}381IlbDX#v_p zVY@|WT03VT@ji~^{p2;&ov0=*+SG57QQ_xJSGZi^KW>-2Ymz$Fe~wD~N+~#w)et>r z;|G87jJlq$!X|wve`93l$4r~#)Y-s#rTzI%}Ys) zyLZo$F@6A3Zz}8>oqzKotRN6;!sNen+%HrToFj_SVGqaUl{FKtR_!9hPX88%BIEh| zOQN=i{t}!vMe9xvF><@uNbTOMQCPp}~4Kq{A8eSV=itpgG>pz~S zv=1W~HZYZhYu|w9v5xlwymgwFy(9^J4st!rR{x8^3}MLf%GF!ND2DY zV->K!o%8-gQ4u4~jF7F>9AlMc(M8Cc7XNz&thC&G@&4N}{9j_MwhZG>`;5+_8x(14Wh!Q<;)7m<00R5!)5n zDS*YBpy#q43%eIantbX=0Ro|$>}`t6)-)z<3FAxsyYqHs@@8lPN3rP2o7D?~l=j+4 z8TU2ASI%(fABe5$i-ivjV~MeR==+gw6)JJvODa2=)jth0Ux9O@sO`W^Ts9E zs@+LLDk}zTdoT2e(U8N!UkSu)r2*Hn?8hF?{g0vb)M{(=+-(bwX8r zalVawECka$5n0(NpO^ENn|1rF{hdH4l{Q(ku5+#PwWbC#c;Cc-nfL$H2>FQKgd5Ud z62bFdo%p*e1z{qq^|TdCA*ixWPEHGh85r`k3F+x{9^u%SqfCK7phr2Foc=9uy$c2h3>IBxFCofDe)t`IWj;FoEgTb>|5`!+ zT1x+0gFK-ahT=MXFF^!+a=LH+hJc`Fogg0aO7PD) z`+qVjxU+kF5TD@p`J6r{{Bw4I4NJ}eDI+5T1`7D`d0ZtB3psrO@P6U*g9gB>)hSWX z>oi6rGb-yLV$(UiQV!52{hNRNul2GQ@c}2qDI`|-f4u#F@5#Sw2Og34`a%@!3bCdB zZ|3;Vza~&Ys-cf#aKAvu&1w1DL|)R@ZludB$ONEB$^wcpoO0iX&si4U)}r;-!0T_02agn678p_ znb;@t_paNsqVy+9f#jQbvV-u~+Zqlz`dd+RmzztWgXq_niyW2d*PSmP-`m-Qp|^yX z;P?-@@2ZFT>fuKf?k6X+unfGGB~^N}O+KX>haP7!c?#R>U4 zzWy(F{-0*^KOE)_#9s?NIBk;p|J~94Yd-y}v1j<#Lh8B9{r}5=O2;g5k_xze)$s42 zvAL7OW??SPbF&J2>9N_MKJ{Ov^9S9xs8wl+g4r@ZHd*H+_T@QVt@U`K#{WhrDk&My zw!oD>Rw*u$m>)J4y4dy?S$eJ0@LTWHe&K7AMB#fp<0uA8-o*7>XZepv&#^HEx^MX^ za=-tS;NS2q#b#6@5AG3eex>&ZffQlgcO7(c)>P`hAUK!DPhyGk`uGMq83%uw;Ca2N zdq+t!C26A(?2keEohUHR~P z*w8;o$oo;YSQcl&-Md+>Ms3#PXWW^g7TwLFjFVISr1yn{jGEaKIQx8&?p8bDTsz?Y z6`OMfZt(@wcoGHTC2tJIlxwEg}>I^Z0)-H4$pgBWI>_C4!D@L-feT{W*}Zz=I1ww z{RJJaeLXHo^iMyPdO}Jfmnqkq-#_}>ZKi&Vy4fF>jXhZmdi4|vJ8}hzM*a?!Fxq|t z)n6QW^EdoOXIeg(N+}=}zg7T*Bwney1$0 zvGJ;zN2x!0XHNZRZ}9~d@ZCf-^Gg=^n%rRHZNyDQFr86*Y~S<~$bOBKDRpOO>#Xy! zq=y_f_ZZzV7HEimpUBfKmU|3Gjz^aI3OSX{zU3qp?0W~434-WRvIJuRZX7O2RazY= zPE(iPs^PAw4bI))5;oLl#efAfk+aF8*~VM0TCKx@ZLI5r(e;%)Cjptv9KT zgz?MnOHZGS=;-Oq#_84VRCJ7pn5Hi%7MbL_74^8}v~~(WKKLd9P5vSnkwWH6IUrRU zPZcWp_@;1v4~erI2hkZQF8RIKbk{ttt9_frR;PtE?fHo3UG&GU1T3W83z8kkTmP*C zMHuP>zbW|@n3P}U@S)ov*_dFW7@% zTCNdfky(flhy`7wVbMsAd0Sj<3mMFmdbUI*SysXv2Jx}tl<>28T}v3fOk~3DI6Lmm zk5{{*v6)n;j|`}vkt9Xw@*Q`F#n1DXtBIEyT|iK&`TrfTAKy~20lM* z-cMPI$KG2yn_SvBEqw~HS#ay9_jum(kFN)swr>J+#@x(6m6rkesjh&B^EGJ*I3%%o z^JxtR-p6s0>dXn43c zzxr<1(S*clIjJ}$r~sDt+rUHMPc`xwXLtieH>o@>s#r0mKWaN=m$GEF=s%TYJ<0FWSZ$4>zGkyPvdtL}_opbpPpOv6Ui-Im%g6aP!<(Vg z=Pe6)!^sjTjW{29^f%3e0bmEF#P>(y|^lY zMz&g2!R_@O4Crx5X6ZS@Y}@Gsm&GreL>PpVJ)^!l_;%g~=JbK3ugtc)L2*wIPo`ji zS9_0g;~pWJe*m`rRzf_d5*vql_qzm+9HNbz3Zvl({tA4 zo~fCBRmnIJde1%H#xSjuJqqDP5`Ic z_^{+k7%MfU`<})N&h&uB+*4*71&67YVI7VSB?>M#A-z`@rgZ6Loov$u; z;-BI7XDcrO3mWdO@Z(q>EmqM0rP}g}>tc}p(oqTWV>WR*ZFZTd%dL2~Qk19$DbQ@U zR`iG3TEmhM7ev*ir+%(CiJuaruiNkN*ALWSEw1LR7i)V)go3->HP}Ls zQMjgQYjL@3Ze2Xd7iSP=vPhmjkU}^_yx!&Mg+H(H6e#j(gl<4NDyAdvHc%*ZJTYb(i;iqz z$z_SDnSv1;L+Dz(oAna+KD6F}B>8g_uf!o-j3U9cu797c&sY9ek2`U{4|p6k0fN_k zQhCt%nV`D{jTf==RHIE3qJA-qpIE|sa4&j8EzO<`)PL=d8g7EtrWa&e)*pO$-)VY# zRlExQuq8(BiMUTzmNeFywa3y7eG9vc?(1eJxqAAzHYkSk_`LSF1qJRR7Qv`p6kWM8 zwvWm<5nJpq446A{wyxw?EoWV5re|2Hjr6KjIss3kN_}p+EG$0yqC&I!^zoVW16IMg8UXWq+DPaI%?OiQ%a zd%MZI#XQh?4@O-X+BPMhrguN%&|pEAxi1Lz;S+KSn5=xXJ{i$C7LF8v6os-Hk~zW=JSK zRgc|TmEvi(&OC3Z(6?wx)dv@)%#Gm+bU&rrJwm5l*X5IKznfLO=c6WnPy(y}mgl38 zEf-n~kIk#PfzLjd{`+nj4gY;@VsdEpOt;p@dGjeShu4(hRpOaas;k&X!gX}5)p|)= zImEUu^#%a7F#~VaU1)D+0>AAntJ|-#M?aSh)lvwALLd%zY!yxW_j7FSU^AG@XUkeiWU_?S6 zF1*5zV1h=ph^SGe^|~{lXnJ!;d#}|Wl|qKp{193e$z+QNVr%+HG>li5Icr&ku>MI< z=-qRZW@rU_TD--=DPq{s-D%!X#B>wruAA$9F3hn~#RBP)(DKuZh~4Ga0C)qO--~jO zcPI{bznFSBp3EoO;SHMZMBSFn9+08F{n8kx4&Jo_F5{~QCp`j0L;YYG33)7if{FQ@ z)C8owLEq+Z!G`k1IJb>Z;>OP+yBam|nzlSEGge`py6O5yxX4s+o??>~r+js+U27`z zz7*+kem#;Zmfe?4wP>cOCoKfqLrnhc^w9@=%!5P{b89=OV7U8OHT|!ZC>CGEG8fr< zQ}hG&evS#H|2!%zEnPQ=9jc%E%h?0plpyUv&9v(Kc@PQXw0g&m$fTYq_4@mPcH{x| zTHNUp94yGVh9Jpc#jPxRE$F1ELcK~dO(u!$a0TEeBqJ@&I{h4B-P!}XaALz6H+Vsd z3ON7s$fOH>FvMJ8sJZ23k-;?v$5LDNZjoys1x_;3ZhAdT00cSw`=W2ovNLq(Vc*!E zmaCTscu_FVqN7of2`M8Z-+Vye6LW=6w^KQey$wbor)9PE3&MjnXVe$gcal%$-|+pC z-AdRWa!wfDSH{V+1z%p}bd)PJA77fB@L&(m*xmM6x!~`!x-H!EijzZNg*J3EKRKJC zbN)ZfeRWh-OZzY!K}tFWq?B$%kdW>?gmiZ|NOyOqba$7eNC`-DXi-vH>E_$w@78wIZurcCyhd2VB8`jKE=pTMuzV4&|V+ohPHc?l)Qq1g9FoBkMsJ? z0g`N6R>XUS>1vY71<4P3yKRwQY9&Jx91?V_Ww-WYnkb$=WD?q7eD{_x+n>#R3#R$2 z?_qdcWh9r=-sCra4s;r)9%TEGJ2sW({IUN#SL|5}cEhU1Mnx;1X?e;&_Ibyl8+u4& z3cQz6#X+x^(AeKqzs`#*bDccvc>#|VJ%oe4P88|L_*}V>bm&RV^v&)F$_rvvi##U* z4|cO1O#VjQ5{JE^_biU<7UsSK&fW)KkPb6r70h9=3Uca^eLUQ%^G)=8gz6m?s|4V& zieK$q$x;FxAow`HpKC00tJ;}3X3m4Han7OF7X%HB)wG@ijs-ufYA^J%*Tj<7VOhB4 z3|Y<ajd;>D3ELP`j?M#F=-Os!Ft1;^_Oq1N^B@5w*>XsUYXFHOO zt2@O_GM}bi;!^0&rmLUpPCxJDD5pdmjsXqs#^4DZG2-Au^`|Lt%kJ%t0p{hJ|h+ z8GI|U(0;GuoPE=VQ-nrV=um|mXIG%2ndUk@7gehW%%4ttakPW)&oH;0l+``MK=x9* zTY#V|P?&LfZ^}B_37^M+Z#22(jytVo3$I`6$2;KLgzx-3j@`x482nI-X9nGSlCwYMjLqwq7CcHp4C+o6Jhz@h6Ag976r89t_8 z@#>n9pofPc#Ki`F-9nb?5fcy#5)ye7q_SzRr*79@Yx|meY?~?=KE=TT;4RF;hKaRpz+v6RGsw{kWU*C4-ZF+-VDd41#c`Kek10Av0 zF-`|@-d$qGVC!R4E{7=Z?pe?mkuaHrw0(h8s58>f*GQHjAoc;Qj^Cye?7*vr}TmxwrYCc@=> zsflfCI$X1+wXWX$jo@N1&mwYM{|SN~?^%$5x)NxRq42eaCTfOm7p78nRVXSV5gJwG zqTOMHt96%ge9p|4bvtHRaBm(S76pY&N^wWhT)j+;%v@eJBKDh$G^dNNaU*ru43{1cj81l^G*OSb7Oh>V7!SG$BtMP~ z@E5fD%XfB|Em^D*m!jk&b`MXpqlw{`O$(Y-g~Nu5oLs zWYhlc@Y0BZweEi$FkaEIBd>a~PV36VfQ32mJU#?1K3Bw3CT-M3URo_VVR>CE4MM-# zj`B)9os9~OUxt%f$3sMW=0>qZgbS4>`YB->!$=znub?j>;eok_E;uU^?_dT`llOs_fkw12{7N6;Y)60V$iolU zNQaSQqJdYn`auf|J0~QAB~=2?tE?IG@iN+jK`X4$0|_)+`d^6a9*y=E8&_L3uS}6){NA)myhEgXL(dsZ*%*W7N&7-M9hd$N zbf~ZhM^SD~k%PG3MQk2crH%)TQdRa7{}Z!_Egw(yFNaa5^=UVt<*nWyhrHT%oE_7+ z^HW`1Vjj;#E>~o?>kj4t2i@c`Tp6E+qp;wn-Tn)u7t7xrB^}c)pwFU*DrI6#?es1*v^-YAo?HQ0QW%w140cXq-ouTU&AWM@;xTO;A(Ut6* zan*Wkrs-zAHPJWM;YW*h_7_bFOBYC1D}F}?6lIJ;j8^TE^xd7l1VeA%J{Nj6HGOpz zR=L`Ys|7h5s(9X{Ly+^D%^y9?W7y8{URc@(GRUYk++lrm`8?=4TI>`T&FLbXt0G5e zM_sVf;4#G;zyX@yI5_*pvV~1EoZs_-6yGFI<%NpW%PtvtZfX0&ubNJCTLM%Q5zPfByLa&ol~i^d z*ZW2%e5I2KZ&q@qRis+%t~^g!++kFDGV?&}tg9o$*husN8~5QPtNCSJ?PMYcGH0pHQ`*~^pahg=j{y3{Q#uUan|nlADuTU~0g>+}?kr#(^?Fy*N=^O6UIVA+>6bzu^I{_>myd0Ls?F zdI(T?F%@O%zH(a!%66f^!eDH>xc?$L!VXda*1aO!*AH3ld6eKcs)CMyT9&u* zpEm&+bSLk|R?3%#S4OQGYMbs~zA0B2*uGlmMC44Py*DB}8 z)(%`Mdntj1My2eyIjNPog4zW*h4}R_&`S-ji%3>~bH$V=#l05?%=?>pY`m^9jH0`YwuK0(T; zgMp{CP#sV{>q!UbYPuTV_Vlz1GMqWIKy-?IrhSl4ek=H!>w~fFuYwaR4(UsMRDvmA z0$eZ)%{GP~?GH0G^s@=A>&HXkemI6*pD&Qbr?uQ`mYqg5vVg2&F8CeGKmOrL7Z)`W zh2WBs{Rir3XS9pVhyf2@GE3*?9j96gIo0jOeF+vrzJ?kA;zFTE+j~ zEYQJ%=T152%JaihBxKpD@8;34*zSl8Dz1#>J$YD3v!JZ4UUtgYaWf|}7hhXYc%u`R zJ@n+r^NZsbYr*{>E#o!bqxNQzxzv&uVY_xUsgu5+w2DreQ@Z;;VdqJ#IXpGQgX*J6 zR4|_&r>Ne4lbg?~94Z<@s$RZH+LelH z%sWZgZ!)e!vCYV9hl7vT*Xgysh_lZNX7SM2?>anYb649wSY)ruRFOv!@Ey|1K;@kj zv@&-pm3e$qcIo0rG}9w7oFe<8oE|}yz19|k)@9kDegL7A3%8?9s{H;7VcBRs-v<&n z#Pr%^ee#jw&jSW5bO!7h_sh?~ff0nIlxJD2aF$nKTXmjGfV^CXo^2xulAXb07F`oR ztQZt$ay^QA#?DZ zHNOp3cy9X2m{yVl-qTEx_x*wEyW5KDVOzZhX|BA69sh25f@PR|ZWLIi2VZiByGw>C z;{)1=P!}kH9FfV*4|~L|BUb=E^Dmamp2{ePPOQ}lyl9^mAMn*HjwR3goR7P0(Rm~M zbqk`hs|~oZL#%LfJxtiw(p6PI-5JIy`SiTgxCE0t zHcvG^@VFV;!%a7wqrvqE+o7NfXQfbf3Nl!6IO<5iBmhcCSQxM?8nN)KS}rT`f_OHnL9z zDp=>AkLanPagv-JAx=5OjR^g`}RqaYR|Woxz14X+$*REO-gYI#0NT0C@8k(wJu+U`Yo30 z1=vA^3TzppRroUX>Qh4s9T^Rf7%X}wi#^mm2tr9m!EMW45&1yOU?BdGE7p#VTp+O%o8y~`tOLQKWcrz`2k10KiaVfurY2pT3b*~BwPo6h zxZy?D!B%7K=-c=d76&DLX)V>Sb!9ge!qIkUzXPhlPQ#K`k zs)+NrS1P)+qUB{0=8P|#k#r2D04)*nps`n#aKGR+@mMNE3<*D_wm=GgVB$wq4ciWa z`_`XHg~w>lvP zwq{`rViG0x1fWt6l7gM%xeiYi9Iu^u^R7};!B5-{Ih4%IDz=zX0Q@C;Z;uO{(q93Z9^@Yszd3}55K&g))(S%qa zFH5I9jIEx*!b}I#6Oib{9&<%CSX+m{?1(f7WrrZ1Qii)a{DGVm+EKA?@iYUTwryg8|zGR%bFr4 zLQ{dHTc^5D=AK^MQNIh}ag`kcru9s6Ym|9B98jt<4QBKD)Q<8zp>avGBI*a<2^oB& zWOo7ai*Bprw@LAyzOKzPPl_yABs2kfQY?(Vy*`?O>Mc_8sufWPPq-l0NbI-tKu5BK zui_}e(bOH|>~1%Vb`rZ>xr^w{Pb@nOGY^C-YPqe@?>Y}kvp;Wen+beQ4zKnFkK9Vc z+{34d(bKJ1%Rlsxl889FFNe7>f_Zb0!8EHc9|!`9QV+vjAb$la5Wl;1LB;)NNyh>G z7sv##9*^N4xRp6?IF@gGz2T}vXfO;6_s|PfdyO$_sY4*}xca7BJ`?kTZU!23L5G*S zw`g6p;5wf^Zrq9H5ur&!ViZ(#XRj*Kz>_Y2hEa#nl{M)vSYq4Gt@f`rKeh6BbkWz8 zW+~8mLVV%QSRrSthmj{-tL|`Lunz`;mgNHZ(pzw`5Vo=Im|PXCZ;&~s#GnYolFT`D z(I%{K%KKfML6{#a>5@yOH`1m)X_wz9rEyz&UM{*m%M6M-)f{yMO8EK^3cOH>d14t4 zVHz^rJU=QNjQXL9X(sTJjB0qTH{<3{+HQ?0WLjNM2S zjtbrNhd+EaoajWiArS6wKx*ao%h%x4>%B|jvR3cYj_b;fXU|lyyX&j*V;)MJFbY{) zKH9ww8~SJ~T^~C_C7k^Mf!VTS(QUksa7Q<}L7%yPs+9P8er2nN11pm<+(oLF8>mAa z$MpC*joVR<>&zp-)be@TD=>gxru2aEiP5L5=fvY@zNvz3u$yPt7NrN+ihNOu+%6s*s4`yhXAnecCnXay+2HYrJ`YJzly*V(ElFzeDe8+TL*W z2`l=Jrn&OpBQ=^-GP2#g5#QUg=}0v=Q`ld;N*%zQ8JSj5uYKyL9gp5&b@5@(B0X*Q z;fJl@P;8Lpy{9wgE>c{xb*8mErE2w|Jg&REyVV)QIn1&;Jywg76%dI?8SkyvYLZ;H z)c1=rjFhG@0(hf( zYu@G=E&1HLz*3KkBw~Mm5oK8r-g#X;wsM^RgB4j_Ji>dqt9j`euWD@L5>TZwymRnY zH_u15-GF?Xg7S(QuNX&}P{;*{+AqZ_9{DVaN3UpRG2GB>;^ZmP#7>7#f>~_>AM6xv z5a29$(XN%Qzf6d!2gXo4{$}T5dt=eYf)iJ067@DUnz+Z(>utGL<)ByN=Zz_@;NFX_ zs<#b#A_CX~pR5{b{K&d@xxS`(#VJ)rjd3c4l=G3mB4RlR#U~rd!8?l5O)^G?gjeaa zHj+LFCAaP1IN2%)^6xWR)%yg?liy_S5<6T51atk5ZChCMAzv0ZBHYD zt{AXLpUJL$YP=3h=Ua@UP5aO&X`$s%4x_qkj8}I_^iG zS1{x};EIS(Rz<;T*kv-fJI#tDnJ9>r!S`-lF^`t_hE))e=Zxypeclv3@++GrE@*M4OQTe%ujT&whvq)Rx@ntYy6Ir7)IS2P*#=1%bzn%hB4O$Vejw7+}~LtqA3`9 zm!}Bi^SLX3_q+QSjD&5QR4`W6z}L`Of`^CU?me54#{|;v;*Mgjks?TUGEEo=q;lqH zkV#v?Zc?FNwC8E2K4pYNtn)*fRLr*;L+#%r9)`?=?AZChexOPJ-%j7O+!$&qS`)~G`u=a^TJfF zj4V=S#(`ergvX-l1kvidz1q)NY}Y*W%N0m$cOkrO+GT7y-gi9TXLGNV69v2xGa5EG z&FhNvEFV-vl5I`GpJq$%-+9#%RH9^ZJjxCR0+Y;GO4|pT-Vo0xd&V{JWxLk%@jeFp zX;C#k*cNnkq*-_tTb>qNcrpu-2p1o`njC}&Uf^sYaRCLtS8Cc?ZpR5u8(H=Zq`o!= zO~HT@O#-QaxJp`e>;bk4A#0d&#B%YS-wZRgS4_K4z(co}uI{a8S>xz(xf;fFtTHqJ&4FB}e{&u8)L?7~Y#sfOH1LF0t> zg^y7I7kc^fFg+4TQeTiC&QO{h7hq=Ek04MT@D(3Lknh8|@V^_h;Dt4OEcPCQ{HT5O zIq_w;;_Uf;$MY#ne#X|;{u1NLR_;-iL%^DE3i8U~kbSLIS}^s|&Gp7N>tHtu=qJ

s~@+J$3>m+~Zloh*&dc?h!$u0#0XOL*4Tgaxw} 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ℜ0YUY zU^n96VY@Z7R>`-VtqvM#egP3pkt~CzB+h$%v%J1exK3#uowS3xU2l1WOWmIDP}c5t zG{4w!CWA*nYHTBW(Bk8dc7qm%i}1TBni}^FX9`K2v2=w?_iWdix-`?@I7MMO5;Jl4 zR5zYLLNcp?yq04Z+9#06X&0zSqoa)~UXo_n4zyhA9be_Y|f`me%= zdG22|>pLffmps@jlY*TuWfbfO-We?Ra8}UynUudq|-U+R@|@s$ZM;|7AYpyMjU;oOkqs*dFbhlF-1_yIc>$pQoQ*2bz7frS1>rJS{j_Bo9x9CsBHKAl$An3@IMRZ9!lQI~R9@W3{ zm~-dk>{S?c+2(N^XAPwK^0v^O?(>DUM;Xg6&d(A#@2xO8ylbVbtt+Mq)wF;E z%~7kg{EOA?aloSNr$kriX`f)wcT=wACo^ z2Fr*T{QU%7Hp-!)GIsfp}}uvIk|(eZ0N%mrX@j~92kE#dSc|EFEa#aLK%Ke+Eak7v5+}y#ZCC? zX35cQ&tGpgq9shEsWDO_3w(WMGloJ{Wy4H;7AD89bsaJ9AHdN!9U2MxT*_1?twgZB z;|gu6iBL&y!wgB`G4z6*T4NCr#dP@%ckh1lX?XscLVf$?uX!P2d!Vg*L9pVOX#g&6 z@=iZy#d*%b`;tHR7^;w;df$7O-wJhJs#k#ie05y;QG@FQy4e#J5rmX^4x1UDy4Fhc z>J{B1jCl8}&mQ$V++`%MDe|w$KG9a%REDpUk&)?yd~YHrVzY=MoG!u_W*&Y6yEPCW zm7L5L?}htN93XfUCqP44qF5*ozRBp_#G}IURUw%L8tom_vp(6R5_<97-cZsOZ|fRk zCjCm5>W`)xUiU-7Nb2qBfJx@b9uiwS>oo=F)Aecl`a}9NC0*wJ_(V+W({CJpyzn>i z+fpPQMdX>#X#w1JUb^n;M~v+JUh71r7hHHudl6P@=#wEV8Yet|Ct z=2$&Nt_iAkv~pqC z1RN5&iJV;GL~c$UxMdx??W8k+=60ieu4`5MUb zd$G6WHvUj9v+gT!JtDg$;|Kbptai`22C_#N^jD@{Cs{5v4Mgxu$5D*(6c3UobwE-m zMbSMh9|RvoE*tfCbbAY8mOnDIfPfkbdT6cBvw;d=C^CMKk$RIo?KwV@j!YVT#5=w~ z$i<}M#@LrhX2$Bu-yP{JPzjJLhy9>A7CFqHUVU}&G?)W*l7py}Fj!(JKF_xX2X7+y zCWT0mkw3S9v#=R#{X{1*_!DzF8$9-+f?~j11AToeLGNtF4XyC{f{e3BJ?>FIJy$MP zZ_N5a3=Mz2gKaQ8aOQzHDYRoZK#DUOl7ehh^T+e%(cx{^f4|3Q!%iv~V%pwUaOS3bSOaekbF| ztd;@WDc*Xzh}kF@;>bMzd}VcRhm#8I`(ZPrmn>!{%}Wl0-TmgE%5>VaQOl*kr#_Rh z{ciq+?j^V)vq>7_>QF0- z-YP)^(~q_i3-!7d;ng|BbMK5osfDYFz2oLw)ygbp0H-hHFeopzeX-+l4I-T3!$Rs<9!-_=tJm;+d*l4TtXFcA%N-7Yc(mp zm6Et~3He@_nsB_hh2h_%iliz55?0wJ`_r8U)U$o>WOy<1DDU+2@|MdU zGussi#^7C8^5$)3`M}Pr6?R_8Ll(~o{(44TsbxYS`%DajM*Scei}BzU3HMeao=&{g zTaOab;-=V`j=z|Dce?k@qT zI1*>hRMUAbjm)_Un&~*=A42t+Oto>gDPe5z)%UPw{85&4-g0y1H^5VqBzYskOP_iI}XFX z&*oUBusZovqa8Iv!|hHwLKE>?LkUG=q*}8h!`^&t==;$GMxYUI0{R4wfp#!YUXXBo zA!~;0&F5CrYu=QrA;6Lq_w{PLfydx4kHCM=>v}a~VO`z=8EH0h+xR;4Q%?OSh<-#S_8o!oAzRzGrYPO^$ofCa{@P;I>8+g+z|CSG*z>mU9DhlZ$iJ z##Bzni_E)~K46ee^_R7{@#O~T=8v`KRR_P565=l_>UNm^WPbtctZ4<$tVQl$!GoM{ zP4$9;=sDgyXR5$;e83>j1wRwQ^ngxNPh6E9t9MmfkIMta;Hb9F6~&(nvmQ&_g9?6F z!UZ)ZF3r#JW)y*O2R3t!W)bG|RZ2mhCUB<7kb}QoFHMTf*IVR9M3C@P020G$plJe? zQ<<30Xb9y~s&f;$@(QUA;^a&4;DT$4mW3B?y1~b&q)mW|zgHdPc)41|XykDr`wd>x+I!HZje{GRuU`eKRCEgE_3%GruRq+P z)(8L%qWt$4`nT($tln!99I28*t z<-H8wWevSfTPJ-GdzN?%U)+1Grev44HqSeb+H+rT5FnJ407APpQNu9v;(7Z=Q%&x3 z5azuDH5pwkhOXu77!1~R0lEOk^Oem>tVQBMb)_VOYJW?y9N|}`aHR!o*ppFa=0r1Fp5R~iPNo__Ff-=892Ioa%2xNA7gJ^gIt z!{tq#1w8e8vH*`kxeiy{-o9oi<+A?f=C0^=DRWR>1G<{|yUKQ&kc2JYad@8;lCGqy zyQ+q;7C(~0Nf$?_9NElOgQLSr8U|nX#s`y%9{&-1E-v)oG758jn9&iEX1MISp;Z0o z)$Djsbh>DWeEy>jm_vr9uZE$E!OO4VR(JayRYV^JrGA%p4QB{ znE(vYD{{%f*I)G(-F)QpFu1?!a#2(qtyx|Ds#U%~g&{&3HihzuCx+Uq5aFoV@klVkH8Vs(8cQQ6eTQ_GLSQ+r5$jt#2nvOHAZtQzArNy`_T|GUt z7!Gaos1aIPn@e+Tsh*s1M7KH~oc$bMqVwXN%F}pjXv{{_c;68l#^S=@&_wElTBpol z3uThEL6w74g;klI&pTc9j#B1xjI?pyDOw-)Hmuf^1dYej{sp5TMeeV&r(i2Wp~Re8DER&)N@B`K;Qlj)Il#H<>iQ>X2g?*@O{Gg#Itw>?D) za*|%snZ>TDcAjo8Z$eb+C{umF)>&+ohTPxWNI0t&SZEk*%fC)zF{YflryQvZk0_5w z3FRn<=isw73r(&SK!zp$y+2h(TMbQPT!7xo5Ux!9>Qmm~uH`@`V5MItPpNM?!oAgU zA-%g>Aj_FPVlX(kA^{K95YR+(Pc_yvXai+n5@^(w{3ZkD_a80fj1l;y$@qZ5p3$k- zjXB<^!yV@Fe@Vn{5k(!?lJWba?z6?;7K-?+2dyuTcSc3Iz}IcKC+Dc9kC~Z`t<}SJ z=2z*V9Mos~d^IeK?EA;ofSN*jd&UV_yCmtmmV1E(7US27(5ulMgL{5F+B1~1a8UU& z$^P~QDJ#y-{&FwxvB6Jhh(bOqTr-zyF^@!~krs;??-1kLo?8eR<}30xiIUZm(?{WU zRpI40>}u(d{c085?vIPS0( zQYD`&L2DZ15(i`u?eY`PuAPJL-rKR#=eE4GWyl3twW6PvDHZ3j(uwrarm9GANglc8 z2NAHI3s!$q=@!G(#`Zz18_9S^Ozd>FTveYCYMk3Gp7io4-4 zGe+AsZSF2xxA|mvIgW@hlJM})-_=$t-}c{ z)o3p0(hp6be+B%JatemHZ-|Adx-9(4A)@3H71fK4cH$>#*Bs9|emQmarURS%IiLK% zx}jiDe=~j$*CK@P2uii6eNt57Q(m)#&GlTGpI;bt;(shD{%AGNA^z?6XEdU|qk6Uk zHM?!`h&D)AnZa!6s2Jd|ht7*#o<)2{ZiJ^(Xv(>0$S-cId(Do0^>fB$i^8O5NKL(K zM=r86CdKr3^XU}KS~7PbBTuP--G zyzJe*s6l{?hqJORmSE4PUK$kXc^o0kUO|DaH|iaB#+^v%Tzp>Sp6(ChL2+VC5tQiw z;Kl99mq{Yz##tNDVl9ZvsQnf|VJP?nC1UB{cZcFt)5Q}@aEvLok^$?Qlp952)0oHe zl*g``bpUQG-D`M!x!H9IG@NZ({WffCbR|zrR(66foF;PBv2rS$Km5e><8A=76)R12Sg|lxZ zi@7_s>uSYyGz-e?LwD-s_7+V%ziaYg@4iX z!hv{(?A#X_jY1=3NCgG{kjFEF?=Ar8P5z?|WKCB$4+-mp$@&P>nWL2Km_L?+*ZwBh z^f((q<}*JU(Nv7w@1Xu_sGG>Lt5Zuwur|vohW>nDmkprb+bsSEgvX-UA%43RO zn$+JKnyNI)#*=+W-}soVpHiN8m@Q&+iAinncSu~%U)aGTNd5$$23WiAv6fu^bXo>2U3gVQ zT+tgJv2bvRwVp&TQ=fiiyO@q@GQG7m%qasuH!|+Ov;qaXs02M*u17XT6#hv^_!kz5 z02uxdhp4|^AMGiz>WhabcMew6wtFG$T&bc>rk^5_`+dtnjMIQTXRVLv#Cd9^)wtaL zU_WyFrd+jGiM;wnUmhPQ6Infq z_BeNUR`Ld83)}ZNe@RYw_XZ(%5-i#4dnDdL5}0is7MjfW%i9MrfX46QnUXk^SNt)F z)!PQUEeewaEmR~N&SLC^a;2uGNmcJrG+AN!pxnZ;iS1g`YGNJ3!yGA?C8#A z3zblm%qFD&NO-pl);kCoYbF`LcTvu1SIa?Tm1a%AtM?P#$KU!hkeQSW zing*!^FhHx9-5UxE~(mK{Ky1`sy?tGx~@O$@(L-v$DEhfHcNPcoMMH^J+qcHVhM%( zVFesl?2x;l{?V?qq}BP-RhIAeflljW4awC^S7%S2iew=-&#PBj_0Q#we|`%306^zu zYu#&80Hj)m?&E%oCBj0)ZZ-X?K(o+yv+re!0dsAU%A^aOO6mCCj0Ly-e3pyCBdiR85=+aO~7530BsQN|6CdAl`XK0{E2|)eBP~ z8RR*i(vOxz=}S2*pR?O41Ll5wqtE9Wl1ckDH0O07AriVs?#$0M7Y=ol7)3(-RxUVQ ztQ?gdhga??L5_`&zdQA5C%?uEB&{m;$7;^MoF3H7*)rvCkDDeAY`}BesSR94WySpa zYcfp#E#G?l;-mR$mGpQt!z z8TU?`w_J`kX_r;gq<;d()v><*+cC!=K&>HQbC12co6g%h0)wGx;@~s~)0F7P)OqIr zTdVtH<)aD~xOdE7ZvIAcl6!GBg{jAs4d_Jh)9@XKH z{*B6e*1Be~ZWHs1Am)5GqOG@9Q^1rAc(4KKmy81KuK~_fnpkXXA9|Fy^UtqtS?t+4qTkc zYCLd1>JgJ6O=GZ3XYA+oI-SEJCEeygh;8(E{0gz#?pvGH<|XJ79e!DuDmb*gp$|2$ zEIx@fc0PZnkQb|flXyMaKChraap_5TwT{_4`lcCOexiN+c!A6_ngn_jt=VWhpx}py zKgX5I?UjiOyAE$yppW14^KS5?hpW!@d-*(j@$BILl(_vP7U6<%>lV$!NWMf21`3%e zAK8A9k&TVo_z|LQ5VMubA=*f&suo)SCmbDsF*49;=x$PL4F9#aIBU zTwV90=i@}1me~R`C5tQyP09-*Xq22>IP5b`o%h{+;{LC&vEQ`1+S_g7WzU{0RO{&J zUC&CxbS6-f9#Kof;v;J=vh^{QFE*wk$Wu_5dXOERH1IV+KkT46FNkX}Gu0cXxlXlu zC7^kl|5};K@S*f784Uy)#F8RO7TqT` zX764GMF5ECgiz5u^)mE1lK?h#A!utRkUY;D>xB1wikyJgF$MQVU{e7Ae0^xF_p0KW zV1!6{?Y(3?+y{rHYK%#dVbVO#a6DcxjZSP8*QmTwbOl$6Zf480V@?sUJ)jZX?#nh- zYHN{z>6n@2x$O5S*x3q-5dxmj!f1&SdvL7r&q}s8REhu80+^Zs#hl;4*wM0DYyFHJpQ?iEg%s>TuADMbL;lJTco%f29`(HV;;e+;hLpJYv9Y!I> znL|H0HQF8>zk9k|pB=9D)~ZmPJjAAPhwO~C2|PY9e_Q<>4hp(9Y8X7H{`j$;XR5y5 z%x%i1idf?7e9f6u_`$348_i%IMxau?p8bn_=ek^r=!9nx>TLB(B97)*%RH@ItzMf< zc+AP^dfBM$+UMFex5g_w-H=WhrOO?&&IQ%K&T@sK{Y!FYF}nK=42I9x8l~t^m9o>K zgij<)>|a@Yzi=p4OYRz8|2B>gtPnJF#t}cjp>U6i(e)!-C#S~X`i58XiOqSAU|yJb zv!){g4J=C)X)`ZSe=wO86y_4_oWi!-f#kt`Y2}Prb!Eca2>PG&&gK(i;!E+;g=TYbQn_om%0~Qsg6fef-cSj*}S)hbIm&B^GqcG#0*}AwAM5r zxu{AyBM@G9hysHIbkyMuoZl8|=g|Tk4Q%sH=mi!7j%?@|Xz^HnRz_Bvy-*Oo*FP{M<&P z3udP#d4*U+BZ@!y54CpBm|}sv_~#azZz4MoEp1^bkkKcqe8SBFpCJ&HS;A8If3SO% z(NOvOvRtit`SPw?xu4Gvgyx)WTulD@KL6NqRR$i!2Lsf*QJ%lBPoWu* z?HyhmSQ=Qo`#3O0%BZ8`)|x11IVEH9{c5lEaVmUIi_FfNxt=+nO@(=7HC^q%j;g#H z7>K}XO=q_saZ4ci%K~k2K%NV=o)7pj&wtSP%3A+Wd3%{o639jV%2i~J2F`^xXYVAv zvEbq1f!H`2sEroN=Vra(nDVx#8WR!lN1F#?!=RavxxKkAk%dUjM&?p4O^qrL8TOkI zEK*P*l}7LZ>T_G%Z<&4A`>XxB~^Yi?o@I!a*L4m~HU1Fkf8h zd5KPG2|)eaQWEoTRj4V;_#2s`=|;^x`@_q;dl;c&N8mR7l7cWn$>V54W>*5zv{RuP?L3!%#!s;f%4ldC39Q?frS_F+B3M zlYv1FJQ7l9dV0D7>vqgPzZoD$@IUfMT^%n_*RRZL7O9j*n^fQ0Pk?Ms$8`6cjg!BS zP}kyNlDwkKUUpYuC;FI??jI2Fc0t75-M58ZH><0=TRc7OT4I@Jt-nqe;g2@M=TO|c z$cMh7Y-cn*!DP~yCTfgxVJ^_$zc2M@o+e5**uuq?g#ul@(zf=Kh{&8Hg04twQ*G_9 z&N^5YmbhnZ?%~9oMeLr3h`zhI)@wr8?Xw+nE>U>z`vB5I?phccvFQh(M*L(Eo3S{6 zI?I>GE4Op-9j|ly=0MyaPkS_y*KiUgfRWD#D;LO0&(~QxPz8-*=|fnJ%StqBKM%yy zrWSUlB0%3qT@ta217&w+hm7Mf_M(j%GQq+ z=;LY4LRxS-{IFxo#5IqNY#}QYN9LJQv=c2HQU%Nv+@s@SM0Y&G?4!5J1dZU>zWwvc zO%w+Ji=mvsHsI9CTwr~Ce6TPvGj?3So3ytcJ!JB=5{5via>dH;BpvzpOKu3yX0crK zJ2&g9Um-*&Gq$$nu6A|nsfg$L+Ow@q#Y;%V2GJ@47<$j7QkIg)6&kY9Yr4iNw5u(N zOHBL*b!SLc*J~qgXM~tGiI7M95z@=3{v|Cs(tvh9Htt^^zW@2Y>dn*RxLIX0K_K#V zojU!%np6gzkS13mZm7U=P6qe&*I>U7TZz?1gNrUuF<)?>h>t9;`X}kQrz5X|@mc0| z6T7z5x`=~E(AMb0=59IFc3E8&=hKm#jQnA9so~_Ow8-}1rS6nVlx7xb_=3Mmc^L+8{fMfyWg74q#SI1 zcS(F&E!Ku8hYMc6E>>UV@YLg|=wTIGth5Qom#WhC#*)KONC^uG<*1HlabW}hhzu3E z#eUOGEeNZE3w}zirGlJLW~d+{GMRL z!uH3q7N%5bc{89&(U)qW;j$_GX{t$BC6yf*^lC7BDu+ctU^26}yk+TPI!3vD`4eG( zH4{drZ@>1SR1G|VDx4$SJVWZT$H@s`*)=EjR?+VPz7oHQgInmE+t8`&-rjUi!SA?@ zf}Zy_Rid}s3=27;E06n+L$s(y&||s47?Vk8?6_6?i4COB%VPF?0sw(HE-DgDTZ7t| zCnzzfC%qn}OLaTm-1ap%pJjb)qM}VNT=B>}kvsVuI^AlbIXbqJ9-p5^vd`3h-{chE zi^ON%%(v{3yUC;8O2(ghQR@!ARS_?$H=C3XKet5TUaiL`#UEo!p^Yx3soXZp-$|JNRG4@m_cg@%+#vhM=i(Q01Nkz}k9(rio!s z!igBEV=)nNNpas=wX;f)3HN<49a^X|ySDVOgjAbe65bwN?@inuhXdW-S*r#|cbDLE z#z}kDV2u(W?6+^bJw~cV4Q9`S@CjcXE*WpHeFerA+$ois;_S_4wu%z)^baehqXr88 z@E`rYU}ZsZy&OYhEl98pnch6HPn5&kYq})5FhQWg+Fv;l?2n<=Oc%Z}NG19tyCQQd zp0G9wm}};plg28&Ez?vLxeyPa&HZ4!r@;I|;gi;i;N>mCAi#-Hu zWO2H(71#Yo`iJo$w}utCi3&lFa~@Wt>M19hV84Ob_p}W&6=RDM4VUS-;1*`R8e&dc zMZm8N)(uiHzL;Dm2-XGAPzFqIcXq>~=X*GmqZlsC;>r8dMKtAX9b9A%EWgK~rNdTi z&Dt&I0YL&i^kN+_U5wIKGtC=Y$tSNstxZkPcgi%y{(8-7RhG}-}_8cpW8TD5OnPPZqal^yCg_JC+Av(uxHmN5W? zNgO4yZpIr)Mc0U1ATH-$U%M&RnJ<+k&y>hX4J0ry1Vs?XD4ER^%9gWi&2{*F@rfLV z#{EoY!d3WFFwj>9Uq#2+;Sk-4&eIrIsKaP z22`Sz--uA{Q9w_z~cS3T=VoQQ+aSE%JHbAGD-C{z_N-=Ypur|uaMX69;4ZYyQOEXYu0*mqJ z0B?ejKlvu&HZlgBXgG0H)&P+ZKm@&TxKTguowM8Cw?+q$D-~Vh=U)luM~d3wi=^K9 zyMJ3gG^$lwH^yd?qJ$|y;X(Mt@_RhH_YxA@FL+v@EH28NRc zDe%@{aW#MPMI4~c(W&0Of!~=mZq>$6j^U-|73hXt^s1PnuX%_=bobp5$#O)=Yvs)j z!ev#RyvK)RK0b&2*vAog#|l<$QYTBx30233dW8hTuJrd#PLV+NEeX_|c$$cyK`q--M1y^6jN%!t z5dsZYHCXmOw^ozTK1`pnYyL;`?|#dqyh4_iwzqCKi7dujej({^Um_9M4IefVY<&0= z65(?wvD$=*OhscO?)qXlJDc$xOppg7%6>v4-usNjWjK^B5=?-e&$78QLb9&J$`J228exe57Gk~77F7r&b(YO>AaervdXWx74< z>UbltGr({+bTpAjy8VGm$_+7CPFEza2<_7WA|cx`CbQ`c9izDS{AR`cKC9WKkuDq+ zJ+o(AI5+_MJ{lNeGoh}88bXdW-)xnh_UaSQH@^?mH#qz}m?^Srk`?_Zg9+^AxX6OD zAFr0K5t1DPOO<_JtB$`G+3fEnV`V2~l0gm+Pv_A69x7{fJD|i20VtpXP|v%^?;+w% zfj3l+U%u3!Tllgq2i{NYEnk);$J@2ETSsuTj$#dFlMFKDDQLv5wZ6i|EmBBvBbrZB z>14>~JAE8Tqzv-(0;Ik7&@_Te$uak5GgHA5;}eHiM0LolpZ{Uu-C>Sur&W7;)&j9|=T~HJ ztM<}>xuDBu+Fqx;@GCIqJA=jy6TMr5ad8;E?Zx~FZAlNMBYq7iE+5>l9*eqIdz{j{ zB@@K+o4IzG{bgB8z9ddyk*4kT_w`9yxypc~>$GYt9GY>FGchwYCF5z*a+W==?awe_ z92C={F-`aT#`VFV!^VmH9bWNygPa8@SN?}JeR_=Q9LT^YR3m?xFLO!*ow@aXC6T2_oG+h8)Ed5n&P#xhwNjSS=a z{W*>^h6M!(&?rM}XI2=G(p1RNJM%Ev^bYBn!M^l2*E(BT+rCT&dkiRkyD;zm;fpaZ1gUiPMS>#Jkxi7zPPI@6CRJ&Xm62&h$&GZzo8Y)D8{RrPvC~eibh{ z^?TB7foR>u;YN%^4*~XPGU0N;?}8HT))`@P_$ayZv}+R^RQx#t9(r>3?`tL<&C=*p z;j~%s;;YF3go(fwPTp2oT~H7@Pz^k3me9uzqj3=j3=R}`%(N{ZzE%rf-mfh{LseX` znUC~Q&*)P)D`$qnh-g*hhT8ewS<73H2cA(b@U}3L_~YL^p3e{JvErRpi4u2Zrx)Ws zx)JCNha`FSh0$C@zT3kZb%aXx`xgW|at*DBdcfg#f1h4#I?`Z*_d=688w(&DT2MmS55`8ey1@(S`eC4B!jT zEXuTsp!e7*;tQIta;CzRx5=B}X_;XBW)m6nYt0v{8t9r*N5LLh2=~E!=>sDeeheP( zn?{WwBujpe{PL@@tME4XQ7HP|SrJ2*Aa$%0A+_BrWCWz0$k_(fvxw`9PW_93Q=Rwd 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�y|z`I+Lv*I zefYU?8J{5~uX1>i# zv#cO1bH;shd(FBkP&vj>-9NsV)v!$bKzyB||LcwjD10W^ATO;!54%v>FTIi2-u9=@ z@M?Q0YUQ2GuKRn(&DSN)DfjsLX-SksoziNMS?>Fn6Nyw5KjmZc+)T~3_6HVK4JdGE#EgZ5L_YLk*~8y%=EiAXuP_MsnhrwOW& zgb?k7P!&a!aC zzDnl0dR;J!=w&?=M-MvGswRDqe22VQ`2ac~5txK2GtDXhMIfuj1un8a9DOMV)^ClT zY?VjQ^wYE=1^EQIdg>e5C12NEYimGMym@9Noi%@j$qFMU|&17Q&f1b|_}6@-yZwM z{Z=>!lNCrJPo%afMtx+FMfxE}KQDg%cd(j@HxgSErwe^C1QLIEW`7v2S@rz;JR;Yn z+8)f17kB8MsC}QEA+b9%a8Ug^?@xb5T7-@%N(3hwg%{BsHnh^P2HvszJi9-D?s}+a z27Wa>qsbQDS=0bI$q22Qg-GD`TYK92L8ho*-t{$-5S=UXuT~O)OrSxjE#v6SLd-d| z|2{~1r@;fN<4uar@7~bQfM2it#)|ukvv{0{w-7iIHO`xb(*n1^<e_qwKiLpJ`Pl-O7N7{;YezjK&pPm>(kZac z&RZ{BhPMqhlfy1;=kLut5W7qAbIUk+&b_l_q#`XLkNq+|4wL=)Eyz8&uVilKv-tiC z_p^UFtwUO=tT(XQbL6eOZ?kFq2NoV28>rElCpavz0yKyzAWy7Pvg77r8b zUK2L?jfA6`4(?z$Sbv7^@CcWEJ79i2B_b51J(V{ovc1CP+Az{R`AjbFcHW`RlW)?2 z7OLc)J!azMR}*rj1|1*Y5cp2iZSLQEL=?FDaOO9~btzIK_??@)$kRQ4H5xF|%_~H9 ztqBX6SFj8|Pi*aebMD;}8S1Yvd}j-07KK*jdi5v^AX(jzRn6s=BJNmb4)Y+U%d0gP zUPfLt`wwXWp{Y@W6xiog7L@N0XS4cC820DIf#j5}c40praJ_GQySy~vq7RsN09UQb zmAWNMTek+E7n{mQarP}(D0j>a-Jww_ebz$!*8Cwf<*w!MYx%2us|voWkOM31vZAx% z4BWTOm`u|Hv;0Eoc-3CO7W+HJbfu8D$w1BZj}>T=~FQ@8M~a>OT0?BsSsC z&VuE5B(3>F&{gMaIv{z|r+g}gc>p|3S)E-F*v!_lljMol&~8!N;`{$|#b<)ogG*&o zN*gGUuS_W=xawN`{w(OQDJ?%iF;}Zaev`w zog;*4s-plSV$kAE9+Kz4Aj2roTk%vPq7iL(Knc;P`S>zMYtjlD4&C%w?ryDRKVo18 zzJNAtSftZE`|Wjj`oRSL5pNWnDw|bo0rmKEC0PQ@xQ*Zcz0`~2UsvP0!#JIo3mPc$ z9F2GEg-wW-X*52H%XImri07|cgUb{|;i%&FCDtCRbpF#c}rQJi9x zvmYd7QWcc?eqN0b@QFl8zcFt|8TjLDO}>tw%Z01=5Hbkrco`Hdws8cw_q)J2M^$eDlM{WnW?S)+41)ezRx=B>-Sy@T=JxReD#F_OvoNn+o+RxD98vgNMC0qmH$kjBzY^8@;F! z5|vEn8$_KNsMB*7FW&pOl#Weaddj$yAiL(#zMLqajH-`y!Ed!#*Pd_mpS@fwTNpK- z9t_-11hFeh9UWC2>duVCRQC7JQ^MJ^ZIxnr8W(JF!RGTZ6EdF_Z?oc050ze|0*`yeE`X9#ArS6GR<3S4C=ra^Ben10nhr z;9LbHxQToO8Qw`06EEb^vN@FZ2*|{sRy9$w8HNR2zZQe=Av|wlxshMg^z#TazMxMJ zIHj|u= z^SpONkied2p)I48K@m6ncGBx^!uaq2fhe-ye3gbF@)Io@{#v)HMeXBoWzbh$NenUiT*=s@Zy@M9o_RoMwElT^{5 zzV0I8HRue3Qk%gLBG@-26mR|^!6TG+;y^nTu9%ALEQHZGP;FX59JT5*gwD(h?&*vS5Rfi1cf}v7)&pWeD&h67J+8Rl(lgHfBw-ZP1K^QWZD9<9;qS{SBSn-Rl1CrB;c+$(k&N03ySAp7FbCKt|o8xZYMJcf&lxHA8sq?;FPe#0Ru zmMa_}Sl~b(KELjTP{y+Wfr!B!tpx~5a_2N6{!}k|EZ5stDR|1uXOuxp2zrOTC*zVd z%CLOEBbrfW{iP&07p*>U$8ss>T@BNSOzN%|($m9da6c}tZO9LEQi`H=ZBU^PEM*B) zFe4hS8-9kyV2JwB41k(3k+c26{?pA<6JXyPmwJzo+(9DW(MPr!BG>Z8!?2R*3IL+ z8{R2s1)sv}@Y)n&k0Hvog6K2l&OxgRP$E4tJTFqUrvB>=KLA`$dS?rGUa9JMPP+F5 zJ>B`))|{$xNR2l7N#C5X^z*2|IcQNl__l;A%SHmV=HU$!P0baiw$nLo*8<)0pswt* zy6MYYt*v|>PA0PpZLCm)1LXNt;jSA*(Ll5%^w?gaWHs;AUKc+ zO#_%$y>vwPUO7OH^1k>qYN93Jj-KE%Ng2Ta<4!QdM<86pCgw%5zw4<>P@wfq0SvSUY zX~e633Y;D9GQDjj|5>@8P`%wgeZ6~K9I1*dzbQeg7-x1Vzlg9qTI69RayYQ6wgXiS z`OMB)mv2`gjf~PSVnX|nANlHdS$0-JRRm;av1@Yq0YIgb8gN#RkUxR>t&L~jDs1s-rkW0Fi7TS@v%67#= zX?wHqS9tcakbD?gbr<{R zAc(Z{qlti_g(W|IxLaU7Bc`XJ_1-^hMd9opYabd0J~7`R_3jMy*OL5NGZq*mJ@NCm z2ZcY^>FSk!ZHe5oPAxqB^)CtVzXDy>EtH64<6a!JVkB*;a;&Imr3}{M3KKLrk`~%+ z`oUK3ywt1l_@Ay~eEXJ6Bz>@M*E=em3W@KDe#;Mf?V8NfwdlJWRq#FAq_?YMLJbIC z`Hs`tv13J_f)^zBz~YPYT;K=^1=)&>z=l2s>xOB7)q`hC1YUWPmH*A==I>zEKO|}j z_iq`uQHLo92yv%F6=xs$2yV2`3KAbRSadV~=YV_som!tLXc$1-1&`b^jW$yBHw+8)!>2<)(KLn|<>AeQuSRB`xTG2UXKaL&oV_T)wcE zpH9n9rG*R43K@Lm9-ebpVPU&s8&Nr3P9ACg++!}6+&Wfl(m$Mq915)nH$ux|p{&2V!5ke21ep-7loaWi!Ge z%jA9Ki)9Y77bUOGHr1KWM|8s{^4)!hEA|GP30lQoc9wW=x15x(n0RH>8jBI;{^V%v zLu_tty7~HYeQ9lJS@`gw!mF7*6F(STNvRjlN*5d)9_mbK#|q)_@~)^d-FN!S*jMk~ znWM_3X?DKDGPzC^g2`QHSzvu{O*N(;g`+EPnj|RH%cM5ia%$3 zSGUS0sRH(EBwNCMLG|tTjWh2RsfFCq6wc&`z(I2}bGuH6-^({fBlvWQ;)!j8Un~mK z;yb0pAHe6LtDm1c4ZX!|1S)!K48s;B)UTKmF99#ZpWVnZ|0L}pIpPQWW0haX@9OVe zpCI;OVyhQDJ|WT{E+O%vY#WujQScZEST*6b%0eG5933wKAAXoP{<1Wh$2iT6%Q*_W z&XnZ$RLqm*+-stUSn_Gq7MSNjRxh}QKSBsgMERn$hMNHzDCbS^+wVC9e6HbF1sB@f z^8y=wGbW6=hOE)M;gP@d1gD^Bmhk$f< z$H2@m@tf~^e&>D9IscsJ`F!>tQ+w~V*X+ISbzk>&T}vl6ev(ro4b<~Mj)fV>Az5`s zq?dr;kw54^Pe`En2|IL8QPS34SCD#SwXniBWT0Olb)6WQ~pP7BZNjxbH20s>`tG9O<zx;kRLAP9&d-@VGha9z54YZpOIbh)2vSHVi{SXe zVjW#f%q$OPIchs}mx=8#b9axt#qs+V6t&_YdeT+cP5{%n$a8pBi5pAwRs|1*T~jBO z%O`G$B6I6QL*(_R`uxTY>)^~%>UOZ_$uvCt#_0AP%tRP6l=vIMQU(%ciEZ(~@(P6* z4HGWyEwX@}&^dwqXEBj8;kdHlH^XAPUUqJC7z%;j;GzUTKX8|SWRmN_Dox5dZ5WO~H=z6Tnrv4WT9o977L<}&sC!zaf?QX363b$M=luYd&D&tD-gZXMBW0>>ul2!LTR z6Qm?2_qg`j9$h_}^d}DCYbFcjf;>(h&^Tl*(G<*Yj4LfWO$fY$k1wuRDTLs>kJD#9 zQz#r(pOR2#VVo~IPSDW8CjJI&*w*)F{g6QPAJCCEpk*(lvnIDiykcM}eEDnnvfW8G zpQ^YH@=z6|7Z5MCKBh_0ZeY}Uc_q8dz?5yU@eYUfbr;?-YfjHT{aG2zeHPk*SwGS5 zQXTsE`mxbk(%5)yFlo5|#at`3RZRQ?un_O2Zdyt<#8qKo^-Mqca1|z*8C;Jk*-qQh zW#x|k@e4CS#w$`c7b`x_x^=o;bgCeFpb%WJbVn<9CB!ZIc4?HJ>~w%5-E@j1SKEIj zB>$AvArE}vb-s7mg6Yp$hDk4PKtLXtmXk2U{H998oPDF!WdgI1nh4BFqEaVHJ&q7{V}F*s_a+s&%N zl@bozNq10yAQ*q$*A`&gF1qQsHMjUJK$qw>DP4`qG!(xVX-LQ9bB7}x@>K3QzNYN@ z(BN1>d+zYFln8v~maY0}o%0ubp_X%VtEU)PTK^o#u;ubMb-o){HYb9J5qbzvKhtdhTFY6eMD5Hr>LNC zM3J5S_{6s+1h+rUkkUBxtmr#Wgx8Sv6poYfhs)J}K1VncC8yjKHe7=148PN;2le&! z%};cI`so@b%3a^UI5oKsY-SGU7E%iv+IrrlH6K>84oY2~e=;tQQ=vb{jxkO1aqD{xSFOp(rAv?+0u*PV36e2)4|8-FEjttT)VkgQu6S zx}7fLIH-T7aZ-2$G-MD*cz{@T;wX2(L)@p2jsubVW&eyI)q&5YoN&C+Ca3BC0CCau zBm}OS);UGpjFU?5@}f#b{6=qs+!33uHTzyT2Q69IzKygVUa5hqfO&yo`;En$#MZK= z@!wtyXR^lU?^wyd&REP_3Qkw(8m@gv%FR?>*!i+|X0(xPswMb~z5eU`B~z?8ms~=Y z-w^(%pPQC5Zv{T4dJCM#1L}&^Y~@4^45SDDw7q$m*ncpNZxNqfnycGwUm~$$ zfofmQ6n6C|Nuj8d(PlBa*2R2U81z;E@0O71H=7|hJ9=pSr7r7>gLNYp^87_(11cGT zCw_`*ZND!xT!HW%58-~OfygLiI=k`~CT(C#&gwy_VN#l~Semb#4kG~_UXn!51fa%p z+LkF1vD@EVX-^(9_lR8eALf<_2}IjOOuMm90qd`|E+)*7AZ)oXK%?w;A`gxn>XcGy z;}SgjNST*;w%N&*aX6>4=t65Dmh4Bp_&cNQ8;8n}k1}Hq^$6*DvRrKLMGbzgzHGT)dW5)Uq>e4Gyg}-$#-aZ9W@?n^BAJ(vTIKCquPd0Z271TX6Bw7c-rK_a7s< z{HKMTrUu5@7#g4`6xU_i0|oT2;Tt&%-`~c6HRJ62%ZI%l zL{g98P`np>ii8R)6us*NAAJekJ|-Urf2;Tne~XEz_2E5w_1hb4HMWDxSZE0`7Y{F* zs8gU@?2Diern*6F&@2)k)O`+5$=C#TA?=NP1IUF=+jH#;lkYgi-*0M+$#WGV!(zS^ ze6bg%a=k-k8159Ry8_bvtb~GELr2GiyW?*hECA8yc*BSkhO}63@RfZ47?k(nM7cXGl-tP$oDwOh&x;##LzcdUl!L` zZUILGoe*^pz3->Hyuwxuh?v$V^43h8Sc#(LU#SK6L(?t5kJe%FfGXFt$FTW|``ojT zsRfcH7TNrQO*lG(fNRCFoG1tzhVvL*FG;A6xZn!+@cq^RFn(k_p2?tI85)v8ZRtr$ULx}oWH~4hrrZ~7^r_{M`i*VE3Y{$VB zmF7uGT~ELh65s5v_WQ@9&~?C0{w zdVBW^YlQb*N33O(e`$J~KM(S}J#%?FW;qvkhwGy_lU${Uee4dt)C`$ZUgyv4kh<(SUO& zY6~$z`RzecQ){cTni_}_A|~4YS=8CX6gL4<3UW$5oZp6vBAK<)^To~{>1cNrtN^85 zcHMV^*O54-RFO=0>cm)X`z8DZMj+OD?32;nBwR%apO@uW@O5`=pQnBo@ts1e+8=av z42{ziKS8(SA9tr=gmk=9s_3G)zMLa?lBoZB1}aG4|mURh&&-2Qp%?1 zT6N!prl7Lq+wS(9MR`$&2t2>4@Cwj71_?NdN!4E9$~+NIq&y_M3DVW#Mbg6qgKooK zFD#g#;ZqapVjnxoV7lV2B@m*|;<~s*^KThVGZORK|F@>ATgGDxtp^=AE7(uBlRd@Y zb5nEAS)IeDFbYdmKkoK!XL5!$F*4F5=0NQe(lW} zRvul3b^W3TOGfKec0B#YV{^bAN8Kf9Wp$EroRJXK7+Mzcv^Vfuqmr&O;M%WNL_=9# zq(3RJR&z>f?Wepa;ZLOj^Lw@D<3lX6vlypKn}u~B3p&T5;jB_o4$YoWu4o1}HqZB_ zXs~3~Gfp>d$b91N$TY;+2M}mi$bAq!9={&?bMd@ET>9oz% zEx9iQC2vd2?>9-|`|>}&6TVq)5ujT<7MC6#@xBXY-Hcs2XUaD*Y{kadU)?*P>$;bldj;^WJ) z0>fk@m(eVK1@wbsvJJHt@9INXAGYPykK8)Jk`i(Qha4pmp`4S%4=<`h3CdZ$(Jx-t zRmPcmi$BePiESUwkp6a;qMP!NA`K_7 zuPXh$0lrj;L#w;Ib^K5Z+N487dEhzi->ZicPKiSSy})MCy4fRD*FVr0Tc z!v#nOyi zh7LBk>Tog!6f)16P(f70Sw-W@_y*5vr!1g>Et$PCspuBK+$+Y+u&KKlB!&^p#ah4r zmOv&fAbR@kIabFME7dIr1JK^NHo`i+RMMy8dyfAWCp>6^We4x>xbW@*;4kDLTZGWR zh|L!_?x7l`^9Wf6O>J{oY0WpUh_RngA8l7XsGm7h7^wi89dy{EFdt{?wt3RuQyMRC z=i_mM(nI#ruzt%0x2H9x+i~9;@M{g|Y8H7cglfNjyRN~Y=L}(Op!Vir*YqU$hsF9O za@qqSWaH&RQ9IPeFTbN7pK#{@a`h>nZf~XaW)C^Jjb_iBtN>Pb!5+s+OP4s?Lyr5Z z1#fgeyGN34b5?en1^(`{_I1o@gUv49JlU#j{jZ>$Op`Xl#y=K*#sbv=9wQL1kU-D{DUI-@Ly3(VFKxJijFCDACKUhpu@+N#|v(m4-r(h(3?&p*Q>qNw&zM8%lcDy`-_&2 z3PW#Jg7SAO%Ww+eg=mPe1eYL-`2fJbQr`8dGHBy>+0q+bV4b2;xqej>&Tjr)eGwg93B&WM)+f&@8d?;vrGsAx;CH+rvDGp5Q z%!|SsQX1g+lHcGF*)R@x_ESbRyYJ6_q{3_RREVIqd`{p%+9m~ko%KECWpi^1v006c zZQ)zg<+!IhyKl*&$6yz(l5y5l*EHw4*tlHB5{TKw>2A-5l%8t@S$8^EW5xalVub_L z3OI;H;0DhGjM@Gh9``?yP}~qYPQCWIW?E|7!5N)8{UBOklYGI2`ZPUiV{$Ne5W$e+7^`sV8XGRJ1V6 zqw1Eb^brE@cy@u`oSZu`skOgukd8}G=U5*Q4jpmWj!l z$kH-DAKy}m{PT~j4^Z0*YP@+#+&bUh>TSFnuMd$)yT10za&q$<#rYz@r@@-}6$xn~ z+RZq{B2GqxP#&AadbN0uVzhY*x#Plj-Gh53 zueFFiW$McR9BpWd+ID{`F#RN!dL2?`2#N&cs*4-db^d+v*tyZ0fjC$R)z2eaL2m~KtpWp zkA)F~y;CE08!N%yG2t=4@jS?$^w8|sW|(}Uo-lq-6}ti45&UaGCfL=! zqa*#k&nU+qEvdCB&4owSxB~{|fGWYYKLQUP?i+eR^r^^dW!{QtV6rZ9fK>h*!y`-9@Y-66zx_;v1QCA?Ye{*y3hf$K zf_8$iGf$s9dv4!cE%LCP_go6SCQ|Frw9u{p{(Pes~f4&(k1Y1 zb>9+DM;{EDq}bq+?$O#je#H^J#L}~Niq=(ZV)}~>e7wM9bye$n>sPZn06s51iP)SQ zo$!qdem9Z|SV3_6A3Wp_+RdmiX!hQg;MKO|46AxF+}Ya-h>XX@2Z!ezWE;p{o!#lN+kGkG zk%>Rv%*2?Gn1E~dw{)!&02Tq#=4NM_%k{g^#3%e!Z|c9~xuWrs3=o_pV#*-e=^ffy z7&#ckqeu{aFZAtCt%bzdH*pl0<<0eLgdz(*=ZU#Z;3{)zt2ufI9K{?d1r_A8v?&z@ zwmak{@=L^+9w7*QipBQb32Q*XE6+H_uoDC@2|G07Uq-=91oULrvd#3K-3Pj5y_e`% zE%!E8RRNz(~j{f1F5P93A z(+|ixb-caVlA8ne_UYcdCva_`I`3*iKX*9C)|MUVll31Czsx)8T zht?5^HZms}WA7$HdLc*f;^{j->OL|Bl8_d-WXQJ~ccUhHB_nPx)hKEtCcX(O37zvJu|H1RBMtq9YTj1XdFneAd@j-}?` zAy^Xs)+P(^XJBrRypo1aQ`bYDs(U`9xttNxuHvDz5tfQ?=*TFC6$Mg0ghr#UflHRQ zDfHazT8}q5<*Bfu;$d9je3Sc1nR2L}_dF%VzE7z(1nFWgTB5!ObjL|QCMEwcfoJf@ zZo0FAj~FK+8iU1fec}`C+{=VyCcZ{iqC&xgphKdP`X8Dxp((y$)H)ORkYPO1z{tPv zoU#K%9?4DmeiekT6LAd>-n}`G$3+PyL*rn+Qt(R+JbU;jrKkr#9<2BS&U*&O?|)&7 zppAG;$mO9ve=@pXMy-7}$M(U)fPyBPH0veYR~|Dw{Hd^B|cBFiz65vz7VVKL`};PVKce08_PvaBaR?S5!9LmL=>hOyVF_6C@H0$?C|Kxq7nh#}yXm85!lv!)qN z<>%iBaNSu`vVbhS41s@4ZX~42pQyv@YGNlk)Lp#G+^O`kU>TOL5(4(5c0d=sYMK>=S}~4-IZ=uo&5!aJkb9)_oD^FI94_ zdzfjUne{Va|B|xUo-M$GA z=d8x=Hi4H}NtI@H^C4Z&&{t2Y%^tP*Ll0SQ93U6!3U_4M?JjqA9ZGhxAp4BVRuu+_ zX_ZE3qfHbmmJ|Q}zqf^=l|Jy_9Syy>*dAU2p%D4-arn_f`=U@vT3Du#`P1#oQy?0$ zd?*Lnmt()Wp#R)?|JG&+q+TOc zzQq?W8Z4O>&Kmw+YZnw~W>}=<+cWz7!8$Ps$;%r}>HT*Zq=?fJu%z~8EdAI&droQ`FUcxF1f0X zjEW-8ao0stNXy%3e!*fe3gau{_v=oi`x#%@==mIG$T#MNn&P5JA5B)rUW-BXAZX80 zvnuMR+`7k%tz`jl5CE>M@1bxSwiVxb!X*uNH@vUs7fpP8aYyQNyg6`PNK zv~A%=HDAawQU*s6X%t8jP`L!#Mhzr^+*#Si-h0rXCeu#5%BqKD%^ve}6miAoPR*J!u+8#K+HXdZp?9AG=gh?;RXur%5-Cdw2InU(~4S`TTBhSgea(e3gwwy!j)lE```N{EGH&YWzZqF#*|n2_dNt4$-XTwvt)sI z2I&yOnp4ILvGaj*(o%rg25R%O4yn&!79y>b+lMs`BVA%MND;_yvyk6>u62YGwhy+n zuilIDiAK89EelTq47FcfsoU(RGnht@G^Nw&9WwXkkm8JV-8TDcRO>|y@ENg%s8EZ- zYdhiXo(O)=AksZz=pJZPwAY>Va`zR}Yx!Se52&S~*;)vxOTO5u(O;xK&3VQbdhLBXfm`Y^AdlfX}fgzU!g#3}h04(o&7 z1k&9U9;p!)qCef1>S;dB_A`8UUECcX`_I$7f=4v9U$4cN)|F0oFS0<6U9;e`VpHWv znclaZMN|+zspUBwy$fr_7ke;a`|7xeP@j{r5f{+!h7?I;{e>vppzyYAGV2Vs(vSBiir$YxIRZ zn%J;jh^wP@2lmI7$GogkJLi~jNmtHnDdEcI{4yws9`&GnY@o$_Q*v74UK~^*xES5L zgDS2`NAtBafR~=tpPniV;~W56f_KyGa6K~!biu2C0=r?gHCeko@jcXc7*a0>zkK%R z8$j>E&;A{+EhEH9004MpTB@s zZbkmXJEPfMCAbXJ<%F$WdBMMj{dk-kcUY?U0nn1ZcP34M!4zaahFMHca)S{(Aguct zJ=}by)$~kC__!iZ{r$tQZx2(iLH_D1$1HV=p!k|VLgM;8poomrChm_$@38CAk6@k% zLqt15cK2nyQ50x@a>Ee}A$r_=Jbe^HV$@Ga{9FTgK!VF+A+q+U?+DZKAV=2fXL7p< z5%r>0Y*)F_WGfmP-q9E?LSH6+O1rc%alLp}=!hLS8p)o$8i`Z~0_A#6psza&uKaUg z5E{R;$^wpJ&rnbPcv-amEIe5Zxc!(Lf1}H@D*@j zr#UtTV1k0YtQT0joH6GYqoY)sh~x@h=8DVtU9NQC-z6Y8W0YhcvLhLUa@(&@zOhMV zWRp{&YPZXs6?Ma~9RSNzCLvZ}SW4XOC_>*1p;o@4s7|%A>gs?da+xGHihtddXvVMy zDh-xDf7i$AWcsK-0i=xNcF%9^5}rcGIY0&2HV5zDN7!UOXBRx_AGZY~ z`Qe8)tVb}hdeh&Ew~^OSJ{vkSA<`N5Vcku1;{ufvNY~gViRv|Yw(93F)s8DL{xg(< z@fg<7@8gJDDI=fe6I2l@sdaw`PIG)xmBcW5EnOWluw)+q$&yx{yy|H_D%z~ufs-Hi zz;5C{qXFII+rTM^fh8*O{G8Ub6f>kxyXT)-nPj}FekK>#k_%;$4n`=np?ZFn=OVs+ z_1er57dej~+nwNIyoA4jD=_B8{qF*<>YaH1F%z|?{y?Mt#gm#` zdR}V0vmdyl$Z1s-JJuxv_{@s`n9b_kW>AzHHjfv)V~;{>r`EjI*EMP19egC4{OQo#=eZ}bML?r=U{;h}9^73la7*l|pD zP6#Sle#c$>oqm>c%J!PR)rw|#VNHFWBmH_&{6o0gL*p0?1N-P_S#qA|-0{@VW|@rz z|N30V{81^o6mHk5N1^eds|HUresO4=|IWl39S50Rtc_=hJXFs#vN9bXZwB09HFuDi zg{jR)7Dn;9_PO7AI(J*dFjQ`gVJHeyVH8AoGBc%7{!m%8a>err433B>r1-gV5q)m1 zrgNsre41rRNW@>i_Fc0uXo^+6`_(Yras`B~EWHRDRv6CbI}oA4$PX$ z?tj>|Ah`=8ZG~6k!CqKwWPM?<3Gv?v_EVjPZ15{}wytx1&UweSuuHiuss~*_ZR=Qm zRMd{c1gp(>GDZO`bP{r-jG%(4b|j>lmixusgb4X4S+v8u7oW#>ceg^RQvPFl-r1#GU{duI zRh-BZQ)LImHz)pS=T}I3=i1Z-|vI&wA7~|1$;nS5r$%C~f)BLk#to zsXzQ>uM-~ToA#4hOg^lIe=+WYZ<)6Zabq?ON|%O0OR$gm6hf|#u4BpaL015Yr~LmNuZYX+#Q8hVQx3aBLprO>^`v7$ zWhYO;o`!!_$f^PDC9AofZv$uNSgew-@>%RM&|#g$Ks$mIcEu^<=PN_+!1meC;p7SB_n7vn zymQhf?~)yl*4J6jI|3cA1D?(0<$BMVzmld51IPn^j{n_1D_uUJJ>|$Q^%XoHxo5kY zFwbJFd!g{}0a7>si;a^2UitTDM?{aTT$92VprVP)&5Czm$kOITKppmcX8FmL%Ms!uiZKB@^3gY020)C z1!oNZr8%8SI(VCIzc@s_QO`02j83Vpcz)4i|BQYG*ljb7@1?x_jyVa1QCP777KGC1 z4(TK5mcpjClNh!6DtE2#3t07(ZJR2z9}#<}f>lULoZqgP{Fus0_SO*l+@()j0u)ID zm`UPe<3&65(?|oni)MK-DrLPaR_g1==eN}+tsR2F54xA7xgQfh4B!zBe<=k=E;iPUH+_F@Elvl0NOVH@?oaTl`|CC$ zUSAkJ)f0Cv?D;JDO2H)2ULEs8h#E>D%X549QP4+sz55o)7dd-V^a6tsfN`UJm7jv} zyp|M9_7A0n$}28(lwlH~WAyf@fL4FWQBlIa=HUnGQ=`|x(GO|~R(GrD;1+TdYae&5 zRg)mUB-S74%b^*vGY5HO?5f1SVeR{ZL``D#-Hobp7N2W=w@EM zK-3eRXFZ4Drp9RDm|l;uY__M5BaAuNK2^D&gJ07TuuQzUcwJ4B$;)- zP}lbBJ0I$IBl7$3ZfftoYtj7})Krgcen$YA$Fl(`l!8sSr=yt(yI5E|MK(l;7pUal zRB7HO_twmdi_LE%gOX+16AMpSM0jz@a)I;Ja^3n0@4d`Ndl2dY7o}T?SSbelhhdF0 zFjm)eKCnxH9Ae=0r4~KEjUu{GQxnqeJFz*i>}HiEj)-w5g>(;EN;se8h_V<(oJvm5 zTqYL6*S|WSq@AkN+~5ZiWte1LK_q_zo?%lSr`NhI&nH#&oO2(il0OTqTTxvgG<6J4 zu%v0E`2_{_!)5RN*uS^@WU9&3sgqAx?@IdTcw1peEfObSRQ>kB4{7JZbxg9rq|H}i zq1{|^l@xfdAitEgTcvTk1Y60177VMRdv`xt*kgc+&`yyy-8I6sMaB8-;V_dbEnEdD zgmqdckeWqN+;pvMBsJo&e6=YeH;wE*>Oihja+HEaJ;(sX1T+D+E8r2uRKuY5s5wT8 zaNy96HN&5fN-CoerUMdqWIrTMHl(&y6~SVjBVQ2QSCwyMN2XM0#OYWOA1a8{9cFhc z{23iM8I34>Jw}aLDXIskAq#9?K}Z2ljot)bEiyrj(Ec2k1Fr~pFt6B^kfPvjHhtPk zA$X&y|26a4oIx^8?8}DRD99EBde*Q2geT>Itd8g|K$#ZLxh2l_5PHc4a^UaPOR4t)632>s+F zysD4U^8qB8Qk&Xe075N_G`xC~4Zp>|L#;4t^!QGSn>_9Pt@aG;8sj5~hOd-OQVq4Q z_LTj%4`*Bkw*NGhfkt-9jc^G zCorTfG}u*wQkjW$3*kIA5z8=v*#qqC5ugDt+i5E*$2*BfuPVdB&iM&T1_L>GLm&Oa$z?e3>9 zm?cCAn6^aL1(k5;N01aFO5b~+SB!tZi7(j*6=2;~GHw!@rWl?kmk;y9*o1HFs{ZqM zZ=6!F_M;#C*h##Dp+{d6<1u`)SeD}=<7uVTSXB|pK-s<`TRr4oEoi)o8wNZ+`tsw^ zwscCv*=q$AVyRERfamY#MZ(@;YC9Y4HM=EJyNUNQm-Qg=SH&pq(<&4RR)h>Pd>02_ z3qTFfs`DB(8LFb}(4N|!8+k*Yfa1u9L)qPEkxbiAr_~p_v_wpBaxLZoT#k0?E!V4k zbHXY$53XaCA^l^5QVCwWhz#lM|OkmQY< zabZ|!S}Ebe%JNU8mHMOUjT#ck?5|D(z#sCMpA`ZW; zh2MhY(_=tkp`2fVq@7dF?!+@H{xzC?%g!R?zaBjBDSo&^?iob`S%v5V0{ScEh(E5C|8g#4M-;xbv_@ z${w=deX#fDbWVb-!DyTSm7Ei&>~-=^*N}hBIr_x5s~jy}ofUY4 zEPsvQX_r&yTY|1izPpAn0nGfBpt1_18dzB|W6=TrL2O}O$!Dx%<~{N2rfmLrtrdTZ z8e?!uM{=mr5`6gPRNZz2!yffokho2o@SDYFPP4|9JYZ+@4h}bIPf5`G)eB!}@lMpt zIi}rFciy@roh9admneCy61)c#mKC!}#EL+V=H4V zp8eV=?flEsAL1_8KEMVkMy>w*W|_DucCuRPa-jBQ5?DahGn4uuP{H(`^#>O_s)Nz{ z@%iz{@GKBVKoz~Q&{HBH%!sbewNy@%x`X|_YhA45BCR< z8xiqh!)n4kt_@qd5FL>ki-KzzSIh}^i1b-`TyAPvlfe@6MT}T5%h6mllLxDX zK+AxIaNK!2r8_KHg6)AoBNQ@vq#I*pjyJVbJu1xs_;?O*ViEXnxx*PTPeD>wh_aY# z{{u$8>}*Sd)U-PVKTnP*NT`1`bbgp8<&&NzNRpZFC%mN#^9+L#$NNIXgbD?yp&8c# z@e{qIZfDTmzj)oh*^PRCu5gAyT)d1tE!STj)pS?9O)2W1F$wP3{Pe+!c50zBOpYM{ zho%ME&~z^-h68#ks3=>F`|;o7@slV4<3#dm|8`LXZdTnNRwM`4Hd{yHV+Gpmk$n`~ zi`kv(PuCV=3oH@_AFwl6N#dK*QE35})Dd+&KCRTKm-(C#M)qV^;VB<#J9bV@QIM4;+DP7yR zPZAxexHI7_EQW|FR;G?VMg0B9`lU*}@|LVrQ0lHFn{5W@OcSB>p_=sI&H>aMxJAUV z4|+_r$su$OB)^*eG3nrQG2 znR?s?b48?D^WQIxQy*?Suu^!%*f9J!eN30TBKctDH3_W3DAn9R1(IGx>RHz+eHA2% zsn?-ahI5LL#C!|0?YjP}k+)09{U{E~;&`bo=n+8aEnPCXv3Y3V{XTBbeUC94psX){ z8I`Gsd9YsyqfH-ArL#UHQh12IANFO!nqDzR&UWek0Q)gV|Eeg_+dJFS<#Lmk8sQH& z=EfnFqCCOSE)Gk_C?U$bQg0z=csk6D{koz$*KVP3LLIJ|U#wR>OT@ma>xqkK#yqo3K^sW^apf?~lM;mT{)vH%Vb% zwiBBtp~P>myx&yBTbqS8e0znB9IO(@TV4m6HyJvys+*J3Xm+VO~cgeoaaF1fEpi^V%SH8Zn)e*d0MD~g=yD0DhMbm(Wv z0Qem$-R`|on7|N64R&2r?8_hKrAXK1y>U~7P9Q~x81qO;4>IQ!KB{j)^@*ioxyH5+ zgSL2MN`ji0^w#YfbBpW9ia`TT+__xn_3K>q%ain;Hys=t5Tl{>{I-dfWgFU)ikqb0 zTAWXGrDGS~6p&V-rLqOEY}eGLrei9nr9%`xNf!^v9Gb%iBQEf7j-xM68VBt2-ReW!N72K%++SNq zqh43_7pp1~awXh5{r|z8f4Ktt_$fiqHjx(_B~kd7ZLjQ7J{isWbGnyb-Z4MT&?MtN z;n2Bk4X|0k_Wa&39jGeWnz$5&pba%@Wl2 zCJR~rOQQd;w4}3$>%(|Jm&{#pvp)&03c;RGIrN|pnhVFIMfP(v1(`wo4hp5fYqrIv zfZuJ~Xj1>{Nf>P;OZXxmKS>qK%T`{mZfXTxa_%w%9^t%KpWs(qk^gr6nn5xY=B#&; zC487ab-v=D^#-Z}WI$dOfZD7(bG={MtEFq!nmqONT^9Ie)X%Iw?X^j`NtsU-ZZ++0 zA-P9f_hi(U5;S$JfSJYj{~hyeI&W((c=Pjm%RW^e=O3a7$bVGDf1Q((QzbPo^hTJr z+U_Of8+}dwms(2cMF4%&|K!l1)a++h^-hf8@JYrqeMvj`h+(k=c6o1h=+wsWE1Qlu z5SZ^X@;^??LdG3Ka50>|M$hK zBpLqi`jT!DbG%qBhbheW$kSejs;Fkk<34C_{)^u<7F_6oOC|K16~NID4_UL z`>1>ko+U*{eoq5E{!Q~)-Lq$1XKzx0T;DDm@-?Iyy@qTuUZ}R1Lhqo-BCV5kL7>9p3_d^3hr2&2COX3%>z-Nl1F@Pj};`UR6K&9B-^Z<5nKb z9pVTS`b>=tNY`z7mrBq}(@ zcB^ujuJ=I7Q4JNK;_B!Pce)Vr2yf<)VA_F_8vgbEcpIg4#?=GYfdv3qotIqekr$n# zMdhvM4A19Jbm;qf5T6^OA=q>6jwh96fEh{~(F!EjiJt0EISue?%BI>m?uw%6z5GMv z53AIx&1aXqlOUh^D|G~(Tt!R-sCa+sr_IXEL{$;FaoF!KKFnV!H6Z#5NSFP+<;u=o z4`8CZ8Aeeg?pYDZ&2w^y=+7yVrWc%OF6rJ?H{=GY*e&8<@MF4raNXj48Lndk(ooaR zHu@uQ8x{JVwmZM18l|+LJ8Qn_2=q1a<8Lqe3$Z`)n0uOb!naNPK~quMItRRX$2pRX zVLFzq2he*{jfSNODsqLI6uw&CA5T;hCnZ}~-&3?mD$IqhGJy)I>fR*-vNW-d3FF^W zJ?~h>SMZfD5?=V3OO>|uup<3?+8DOtg9d?D(9BMuhY61UdJuwRXDK0c+X_0UT^Sh) z7|QRXB8w`05wiYj8gHMNTM%t$ETW2<$*#84kQVANzTp7_nk+&N+@vf{Ilcp#q-Xe! z&S@8#tZ^&G8}HAbN{d3&OP-d*ZY_Fr@Qv?XN|!vdF8G#Mi{Gs-J4ZBXQBD<|Q!r*wc^1iy+9w2_bZI{@O0T_`WVRCYp)#fE`Mgec)vHQ!?qa^ZY z(o4Sv>gYeAW^}BpzeEkJ&W_i@I_@X#ZZ4F$1!xDJzSmw*HwQ-KiY$5-ECU1=jv+4C z!;Jbkf#zazBd6!k`0KfY{K;#Fdy=apj;J5k#8@zePC&tm|6fdTK(7y7+^G5tn8Z$rb6KQY7Oz~x_5?Z&%R;w zF6-u-FO=3*r-kOMnaIylNcD(>^Bj5-WHdDZh`l!gm}s;{eZ*1iqBfNN>Ga>RgE?#VA%rkCtb253{%XMKd4VT5;Cc78gF}W zc$l=E=tXM+P(xgAsy_={mD4c3kY-=oh6_d9)1T=H=Lh@ltUv_MC8FlxZHE{Vz_se`7VMDa^wOW?ZZNFh{d=Lc z_mxnV#gVjT1BsfN+Hw{&u((G*?d{X;S@w{6+^g&nl*J;f756Hhi6l30Dsa9e4}-DT z^cJ-U2)Q{4QBzJ3hOIiq+(c|9dgH*_&1_b8sBlqu$W~o-SBC{r8Igp8O%j_gE{1=lMC>Gv?l(9a+-koYZFj>H zf1LYqMWsv8+QZ`&G1C*)Xo1QXr3Z~J^BcI(AP*Gor}mFY>1y72-2VoBvJ2iZ!SUzu zR>$waH;6Jpw;4%ybgfC5MKfOT-t@j1kEMwLU$MsXkI5X{x<4=6mlp0P^+&C#<1n>k zprIMY{s}|^c-bN?{`8;&yeXvD0YlEuEgn|CKP<)lWaGkrJg*(cfZtxlMWZViti^c+ zT#DlaF!df?zzl1!Q?S<9%KJFLM}KHWaIx_pj{f;r&?;Kky|=if=e^Bl4^0jnEEGNnC2;k19>g3N6a`g}AX5zHU5lDb^!Z2K{(CR*u=59^`0cAE%`%nYl3rlXd zq79##nbJH~2-z(B)p9qIR6{OK-pKNlk(Tq1nE^kdXpj`NbjL{q$wZ} zLhqdb38cJnx3iz;JZGQtj=_h;2qUbOwKC^DulsjhlToz&FT@HdIr*lo=(h(KFC&%W z{WiIVj8U{}j8}~)BMpvWdRUja-=2)e?C_E&q?-8Jrz&%zu$O7v2R$ER?N+uKI!(%g z%C>X{t|g9c{(hNf*&{0T&KV9vzuE0M&~D;FgeyU!0ciOVd3!%EQ7hA z7R|91B#Da5czxuty#XaK_c2~2Vj>M;vj!Ygt%P|?Fn@?$`W0F%sKHL;U1H8}5K10p zFtq%q8F2tg-jS03=+`505n<@@j1on%jM8Z7I2L|%CAz=B|8iG;w%8Xxv!#J+C-YLm z5hp?}T>y_fYKQhG;K^RX7v{`w&fmiQlvV^Px=HZ{_Wt2@jJ@YZ+#j9AZCD1h$&Y2f z!45R2yv_3jMa{QA0^ zWc=AUGKFBWPd&}uUiv-K@>tcJz~-3E1b$WsHNt+B>t?*jg;Y)eiU6IAYasJWGJ-qK zZum0&Y@MHsod%d!Z!w-P00sZ+C z*z%M?rJB=#`F6#cx7hj0w)}D!GwC-`-C}o*oV^gyg}D;o$L5fx@j?c+^u|N_k%}jT zIa6RIDq_FylrZi&C0hsmh;_yEntbH1pb z@4eugu;QfZqMy*8Q%*T+J=9@wSsRr5P%DAnoQ0xDSlWid(b|MiuM;$6*q4UQ9r`$y>~Q{4Ww zY1g~eb-2_JKsoS|oMbMT?WKMl0IeGl~r>RIRS(*O6hrx zpi!m{h5oC6P({HNg|*&mrJn64Zl%&STI06}n|V3GuR{#)CV#+Lf+%HhO!84c5zT&J z0pby`vj*#UB#R9GARQGPQ8f;xA*v>Csd`!RZKPxEo%~gv!@07Z*5u2At%+g{m}BO} z>kqfQ9zEyvscMi|iVn6!)|$Pj5Gm4PT?@(bdQ*7Y0VP34ZvDWTlR8MWvyvmx zZH@LQ_JkX>HH31i`95ozAPX=G@3G#_x^74aBi%qJsT;w~y#Kb~LU5y9< z$BZkyC`sbN!w%I&j#N&u}hZLVT8xMc&XLsW79Yo}DpHse2dg*l!`_3yp z60{j>XgeD}My9W{)Cr#RzYUqO+Dz3R^H8xG>Zng|dxsl+=-%yKd39F4_qArS{;s^AK|NB~(N@9etp z?yM=0x_CX4Eswz1ONyJ5(HEhZgIn!>kLl0$=RTR9phHSm zoxlUaA(3*Fhn}Wb8EgFqg2RNL;$8Hw`PtCX0Fi68#gzY4I@;A9EtcgMGM=N8{ih+L3RrfaK##DjA3D zz*f8zT{%DkGTX!NOdm$JsSCoS5o~9QfTza$-7HfB0{*B;Wwu9Jp&EaTGGH$V|@$e6+tMA8;q};J8aiHH-n$k5RFx62TbTv&4*dM zRlC9;T4*u)0ZI12#db8(3w9hnMHiB1&`w<7gIh5D`LXc$LkZEF`~ilf|3~vhra&c; zjHwz*6k~=k7MwhlqWov`Hc(!W)Sr@`ASg}aHLO}JnHKqHD@LylpXhov?76`{ViD?r z#L@D&+5|{2H0@4AA_SlZ_2yu3h4;lClE4SUi32bJmk%-QH2THp6(FIY`Q%$OLa*L` zuJwG@`=Nfz-vyoF;PwK46BG>h3)Jjf*LQjMdc?jo0SorLdMi`E5k&YDtLRTDm4L(| zfNsP*f(*h9Td!E-Yn9Yq-U6Zm3j+WA;QyP4%S4sz#qStI@CzIml#wmSWOCNMQtR(1*C4!`^Otqw-&tTx8G0@o)pYSy(Rm_U_yfn17&$=iE!zP(vM8F9@e5C0V?W-^r^BLj7kYZaJWfD(ZS7|11zOJvAx2tn+Z8UEsOe7(_ zN59UwX(H5q*USRrL|+uR$S@f@zL*xy&aBp_;o`dCrIUZ~yNE}eluV(?lgMuSPH0k6 zU^{7`K3F?C{(Fi4AQ5kA@^XPp1{MG-VU8nNfd1o;fUf6G7ic@!rrq~{@fZrJ)VrcT zGs>tpL5P?8b{?n7xCc>FPyu?XL$Mb1awHXcTf^u7@NQ0GD&*viTaQNN~V7XA#W^_ z-w|uv^q;OiIJrM^FG=_H`Kt72IP}9C0mAvrOzPj{L1OhbIk{5jGPnN63!7eXaQXS1 zXwdG^d93i7##qm{o5Xsuu#ev#p-PobI3N%q6!Its@_=5qN;Ty%{?_%5(kZ5F-Og$;o`vr!aeeJRIaJZ+$Teg8#WKsM*MYc7fAZ}B zJC1mRp@fIYsr(TMehsn~y3=KaEe$v+y^CN@w}j_T8?>%Cz5sH3q0??e)Ipk+{P)s0 z#~CA*kp2Y~-c9uV)YU1Li0xJ)@H$&gdwDT(M%(*B9FDH~nce#J9&Y)3zFMES^d{@N z&f!jMSK4QTem9Nm{mu^q%E)YfgG?(CSADzwkd({bk)|W2EUgx$cl+1)_z|kt_YB3R zZMe`m7V0Xud&cxwIO^L@MN@n=9*o?C5;3@T1wmU9lWQt}rZsM!&-=05UB|tU@B#abbQpLtaAL^3SD3B zG#rhf5--GK#J$A+^{4zfEIEO3KOVNuP0P1-L{UwZsSE?d=vNOG{DZdznlQuFqn{~N z6x7Iz&aGIUvpC0{ot~yqGR*My&@fEhV)r-;MjuGaH_!@6mc=O$+oV<`q~vrN&+=*L z(tEr6Nk$!(>Akw!$%~-&32~$<6Rw%ONyYqF8i8EH`;@D;0z)KZ?se4zk@U{aQY+W5 z>sh6S*b$3j8dil{6zPXHorFW#QiPb~^#(#<^!{Pjbi=1t8G-(R?w{TU(Ga`QJriGa zpR-!?28^6qga*>;Qwt4ksZ7yG<0;sLf)yTWCkAmO@5YZREnVl=vzn>%eqZ6R7}}!2 zS+7qWuB@hgJdzz}y9%J&a2uQs`AMp)E|8kDPeE+*CI-6&F%34}X~PZ)3BI{;O@(7d zAm%s(^Uo{*>f6|@hk^oWizu!n&`>)AChWraQ{r=(aDApKy2`kN!hPx|m47*h@?1}^%6MY)3!dd@s$ay+r@j&b;F#ht-8g+Xj}H-Cp}19}D{-xwPR1I|HmwpU zgm;j-MQo9%YI%OzW%d4fLzp4Mm5T2c%DVjO@!VaTMEmTJ=wB*1PGujNzw~fWzEqUV ztBp!3gEs!Ex#5VfRQ*st^XNq@d%RuyDENO>6&gGg|%%aW?v|s4*&@^-ZR#v{vQ=ytW*&80f-d? zm9=k;7k5v*a^&)grZu8S^q1NlUI*4dL%`6Gkq>f_KW!# zQhei2vN_DFeLr0Ym293E|B)myHx^j%4{C@}YLOJqWFwU7^8UCt=U7_t3#s#T0O1QK zk9G08QONnFAN-c91VhZ~KvDKvd89`v;ba4Pro6wI9}|`F{`P;ou76x?AWl7iQr+cM z+ddAsvX5S}a6LH@Z#su;+WajO$pKR^*~-mxc&jUCMPs@Z866c>!^zSL*rqTlf4RiG zXlNk71IxhZ)N5q2Ou{yq+wF4dz_5|MneUUWTV<1oxeEVM?i)8!uPh^`&G(=l2bA@1 z=bWnN-v?8ys}qGsxyI&$-;2p~^o?)GbM54T2d<5$ek!Sii%0;m>sw>f7b8?(y5P%6 zAF@uCKKifm?mrxe2nKcsg`QE;iwFr^QOh$FU?PHa`7N1?>N3Ubv_C zw|IoZK9vi#Fj(@U^k1+;0zUZ?48Kg@ubqC^K%6$MhR21oLm~<=(znMUmO577D2%?D zEM@t;tM*&_RqlD(xuLxn$N!|<2*J3I{XU24x7lw!XzMKp9-)O8Dh7l!h}ZS09fbc4 z_-qMV>Y7%>POc_Iin)0sppom{e?nXS??06w>M>P&Qpqmr&B`vLl3Rt+4)SBjil!xL zTf~5CioF6P2cxFQ(UoNDJwcqkPeb_L51yeKzCB3U0^ahqlj59gH7ajp9ZJEt)r2j2 zyX7G1@+&H)Z#NYh7}+zBZ`I8#{(gLKuPQ->7$$(#)+nODq>Y@Vb`(8Bh~3WqMC?Sk zDh7VNc^c;(OipeY)|c%&8)%nrJLphvyA@ZOWS5nEO<9^a4|5sRecacY4$1gh<-C=! zIcho`9-cN-FhQ&lD2W;%s*GpaCh1m2R;{hum{-N~!BIuY;#rG|d!%ii}L`9Ux!_`9tqZ`)pi+^{2| z?DDAsO*r>yR|2;ywoqxUfaQjYcxaP?oZNo0t{er0-NkOsLqgeL#j)2_3yG z>P0tk+VjRiiIdSH+pCZk(>kw`HAMB0Hi1Gejdyo5dp!nUR3UGdOv*79dI1m}UiVYO zKLb)05WZ*W6d68)drqiqp5_xn^V{L3?0CKZhkLI|MkW0Ba0b}rHnEe$CPNQw^bWop zAdWv0;`a#V-s4v`MD5WdfqMt&w3XOPZh@DJwzu>u6@T-kkLBtOjtLAd8kIaB8BMib zxt_i_MR^ySGWdFu5YoWjdqTW3Ok#4N^27LV864CmTU~a6y}f-sBoFI@)EgwAm7RSM z4o1`cv>zvpR4P5M23CXLf5!kKkWxHpkvt#ayC;2$N%?P%FyiM#S}OfgVzDZUx*bC7 z+1!DJM8;_>`SD4FYq6k(*&+*J4aPmxqSx^O9Hu508ucDJ$6Ap$&iS#kAq_-l;wm>C zx(wTedx9Z@xB7+YK^I^-_zq>;kky?qj@poIEd;fme8R~R)$;kN5_tMRM+fvYYLrOR zy#`P|OD3f|errC=Pg_Mp?C++0w(Hk=V7N|s( z3`zsb7l_XFtKi7_Fk$sQa)Q`?ax7$A>TI953g~tB`vN8Ua_N$+y01(9wR@H0{a+y6 zVp!nC74rL$*@cED%EHd~sqliJj*DBp=|!6EVX zQ6Bxi{s*LM!y?N)wPM8K3YHJQHR-aOn6=#beZB+sTk0}|c?jvhzmk-pAMv*7xxh+P zCnfw#AWLfA#>>{u_xxV!dZkO6_=IO|Zkf0(2G=a<^m{!GPGI+{=Q{%@5@phjZ5r0}!-uZC3} z-FAi+`vtW^-sp*fp?>h+!-3j!^>V}~*M2C~L)dMG1y*%|gG+JA~uk`*Tsa7Cf> z0;?d{XrSb;ElWDyV)Fm9e)lg$uU#fE*L)(=+q^eZoREBW$Gq|0maAWj1g^ae)K|Xy zE{y(Nb5XtVd}4*so5qvBtCj7!4;QNvtM)DIY%RP!3ZIVEwaT7<@#~!zZZ0)c#bfP~ zA9LQt;`aDlPn>qO3KtLi)U+1mzuj=_D}U6eGma(rdsg_l6vzqFJ0M@%=g_|J z3vLYI7X5KH&GAHFLW4Y4vlIL8gI^^tMU$;pbUmxzgtS2J)5Sz7_3SuUgJS{{*z_op z*nw4gnR;k#zkfI_z=lqSJ&4SS-fXqx$OuF2jLt4;z}0=Eia`>PJhKvhd~NqqRtV^f znPCot???WaJoxyrma+I(x z)(EE-XEd9)*+lNY7*copP+P+Fd8T9ulGrD9(>UdZ(p9J^H2kv79Py_8mCn8#&OgdG@D57&FuSd zRSe2OqBE3x+X&q23Oaf$I;N82&-Qvn@;Qt-RLFDDP#qg6lWHBQVU8dDf(_}V`l$3% zWkd)|ZUWrM0~JFw>XL+)&RVYv0`}G!(P0IM!zJJh^wH|t7+Sa>qahbL+&`CNMBq#T z3i_Fd)D7}(-=-rUzMvs!7Z3wT&|%m5H`(}OfI*qmQ58Af_Wm1l6%9w$ies?eFCbL) zjPH#<|0F^eW{&@H#pi_5G9R$HUp?IqIxO#wf)7_sa>O4giQx{}t^!WdB5K5^uy!zg&{>#-v-&g+@) zCS#8$6RY~XwO>AZcTvV)XNF%H6yJv0L#)NNvxWyki&&FPU@S8~qtvj{7JKqW&fLQbj!}`^n{p zFm>!b3ze0Luo~HK;H87FURU7n9>O#D|^ zv()QdxoLnzVn&_B46I+neT6;arR^t!q-Oo8SOus`bReO|0w1qZ>Je^cP6)<6AU!k2 zx+XN7vB%b@1D{C6QJ5))&rMgPo<&=(r zAEE!n?W=k#;L1RCjCQk{PuEix4smCe9mvo}(sXa*%!Ct7l{A9&_kKbP-2$;7z$1z7 z5$-s>dwLRqS4DGd+;_Mc*Y#+j&fjpIw{Z+c__TKPB9WtMWe!?rz%BTMX129B>*F@J zT8N0pX4~uY5QE@9FL=KD!L4Y&KjTm6)zry07gf7ae)SGK_llIrek-QC2DCc4Oaec+ zZzO}cIf;lV}dok3*LSisVeAAII?NR5^wNAFfq>?A0kiY z*aE=yu0l?&CNjG77Z&%}OYuMXE#`V|8tYljyH)wWTpNJttqV6L}u< zdCQ4T_c9sV% zXX*OeX4+trurIxL=3|0}xO6piyLo0?xrPSzJw60+U1*1fEr=DLG(bv+j%B^bGhxN$S zNmQwJtDn(AOb?MJCB#x*XhkW#i+VnMMAhqEui_YcV09l~H(7v7c=wpanFnT!CDv~f zFmqm9|0n)lK$=}+ShRFTOAt|7huIT1^2E&}_M#aXxv66rjZf!RG&XU=PA?2$QD(<3 z9D;l}dzi)wA4mVo6}}okEc{hH;JwfCFrPI3Hghx(Z3!p_auE8~M(yVM0eVH4d5z1H z$v_NeXsfBvrMAHAlGc}RAbxNG0DiD{4#)kdl>b(R?reZ&X7JiZ8$40TnzK%cO+o|T zJe&aYIBlup&3X5@iNp%>A>ITBZpN@oxA~M8Y>m~HA{jYVa}dh9gW13Ez0u+_ccO`m zhKg6N1uX6W6n8{R#B)t{msj>K0{yj2zZ0A9b<(iC#Hy`n_JSKuL8pn_b0)x}9dSmA zDG>jH6Ow<$jt^Q;k$B2|>Z!^>oELkMDdnSR_lETt48cmy;Rj*m7(`or#B+>8b?qII zqe25ee*tb!AB7E|)xM=!`FovLFCE3R%5`?lA7L_Oi6QZko+{^0;OZ-8HR<-`i!GhZwkg+1WSL!5BSB!i%xTRr=9pHYZr~V?2&&p zqT{sw-L^a$B2x*a%`B@Tt#3Fr^}4Tv)iTI}XC~Be|7ZiXE;jH~!+M(5viwKP;SVl- zSf;$!h=DuVF9MHV8}%YLZYCz9PtR_?RYC=^EZ0o&ED;HlXsW$a`TK@hkOoHAQ5~+G zKJu!VqfD)B%6k>DzveZ>ljnbH+0D=1M&M6;4Z!IttUIf<4yN8^DJN9j_IA^$Kg9LJ z?OyK(pn^|ICK#M3)rK_W!*mKDo0Q!aK zOM#U)Hjhb8>BXMkCBhrDizW?$?w}ttB<*CmwTetzr764pwU%;a_bJVO-rTu|uu{#ki|sV$h8^{JU9$GNmqsen((#_IJ6x7uk`}%wa&1S&~{Qag|N zeM7Fl>7I0_7T)xf{EH@!q%Pxf9~sXDiJqG;lRov=D;MmDBDORSgJs5A@dc`DV|f9h zgRn|0#WfO@+#}M4FglK0xlUqm3~}US{b}IESPPzM*O~)d?Yf)(u^E9?Q8un0lR2}F94Q&e6E7hu7 zMHng8lCE(GC@y{=Jq&t^6t_@W#GkZD*4vr$$WgonJ}1zF@p6NVQRE^7j`JK`Egdg2 z^Xb2n!h^w{7Jz`0^8D*jI zx;PW7Ht|$zJjRi%)pPmHR_qZinnyvU?bRWlFn zbs>BUC)cFKApI$OU5WdCuO8sGv%Z3dMiuX@yg-U-GQuD`!-K}f(1(md_Ii|AaBMd7%5I22Q$u8I}^bHb_RsP5ZZz)vts+G5Q z%xsOt_kAu&(SC-QI4H*-sv6}*K<)Sy=3y|jzBq8p;@jYsoL_=g*0n|Bp6Dc#B!OaY zEwL^;OS`F(&EH+2+nLh(!E^)69?R1-uiC>lth9e(m!FhweP5=d;}jA9Z#k)%d~xh6 zv!N0>{yokMC$C*8XtljQby!$yQ4=R@F@4Cg5EG;iV7>=LGzMQrP?;sU%&( zh}>?y^~%*zQF@M0@s>Aq@qZIb7p-^$3{ByU?&kXKB6{WNmTzCa8|2tK6LR?cO+hjV1w2e-bNY7qF@>kAKFFtGmHNI+}BO?qyux&BV_KJYQb(UPNXcz+U&MJP-J{V`Ul|!ppJrQb>RtIiu~SNgf7k(viorW&# zuaz;XHATHCF`XtPbgrEkhk5vF9SQY*uc`bYtGqxflI7fX=D#Md1d?l!fbTBL#AQk; zLY~IlTo6mfzaQ$!cI8bp{_@jNpt)MqdS4{lx!Y{R4)Ez6 zprv>k_uDU}iMWha{6a2pWzkbXg83gzMVu-Nsi`o;(d;*_NB*qAFDqS+q0>++B9M$i znOa3&4$$E+k$HdbwMx^W={5TgB%%5WK9U!!vzZ30MJj;z<^J2OeoWID@h564&wHD* zKU-+kF;2I@LdMbJ_auu=E9jq5@pWvVxYk-i;oR9y{_7iSENy5yDV07pdYqf%qL$c} zlm9Tm^|o>~*>CS)0cum*_y106$%?5liS>WDv|`MFW(l8ql<`XbIU&R>xDQiU)UgwleP7LrXkZ&@49xm%BmXVIAVud?we@1|fNsLR#z9{B>3bQb2<^j1|8|orb11GJ8?8=OB+VO2XV_0>p62drJ88#XE6vkKB^|+lXAa z-}KDSjb^JF9H#knGMEeZ01ms{^SFrHeX)1~g2CoK0wo1KBEJ!X90|`kw~@Yz52=IL zv-2;|Hfx4&;*kPto`KO-5O8bOie-Ms(-rBx0)eYx*&LDDyBor7x6DiR>^!{dGg;r) zJrPVr-rP^PmOS$2OU_ohv-V3Rq(~^zv6hQ2e>N`pO_C)%D=P>3=@Fvo+ix(+`|gX1 zC*#QI>2MlFh?W05G4%hhc(+FLAH-D52|Jq3570fL!wb+UnzDD;A^vGw4%4B0VfW=$ zGDrnnI2tBOy5gu~jv2Idj(ihh+QsP@ias{39s(TK%HM%S=ipop89xCExZOi00L!$n zVq`L`0PKGsPzE9v6mYqx(m0LtKs>Y>+Xc%tk-=#kIOpJfabK{Djym2G3#(!EX`>*7 ze1wJ6=WEa=rTx%tan!-y$Y<={lP%)II3^aj^quDXGkEW)!`$Odwy?6L+n-D+M3sbZ z%Z-X~*uMJ4yCF|v#^+;^tsR@dkYW94F`fRRo^D6Wg|FQ&SQ@PVN|%`*-?M2)dVSq| z{=^=3_c-8}|BD`a7sk$U;w}x!k#9=1+Stuyn-m(Zq}2(g)_r?lnv03f6;$1UuBxO6 zA5UCcrJqk{=g!+`1r3l#0@Zti!afm}e|=g-2@L^5*%TIjdGz6);PZDwC|=v}rc1;+ zX`<2kwX8tw3JV!RlbuH1nb#znvskC%98v`w?5};pgB%l$Wih#1yV1 ztOft9En0{UogZU@iA8C6V<#!_+gsDw0o?ixukvF)Z<$<73&FQ-uCn(KL-~qsWdQB#6T@{3 zfj`ApT_%cwo8G?Tcy7%~LAcGcHuIFMFg|U#f+;5Wlcj|H3kel{Z(W?kUHeu7dF#}x z@CGeoz0tVzGyfIkpXE<5R6r5xyv#{{p)H_kPPI>ljV{+OwVHj-)IyJ`R>W(-$=$VJ6|PXKnWFM;M8@Q{TS4!Jp?4 z8VW|aVD0p;K7r=7IE*;6GIkS2j7>EpFAN%T>30iEc9{h(G^3WvRj!?UOAv9m-OL{! z5n$%sxy~*RH4MslODnnaeY(-c-|iDI3Q|_3B%DX?M(%58IFmijr-cYHacGB>xtr{7 zdaIupgHZf*PEj8(?YqiOfjezkX`j7gE#f`khwD%sxM#idU^C$UQ#aUAwJyY`TQ~LG zMXagZ@69{^RD+EP9fIPQ-m$vfl8bkBM_!-a6y*AjaTu+DLjt8-PsQE3&}HVMg_;%k z`n8H9wfii-3@1R{Sy^B8)=rMWmq@kCDdE>+j)a^Pkd5?R!Fh?cx(h(k+}I5fSL{`p zeorSTT^D)zZUKRxq=ye|pt6TlAPyLhsN=!YxD%nI1FHP_!D7=ec&Z z1Gnxw%h4aS-az#bO zXzR)z(QZY=-#T_G4y2;#BEBT}y`SVGHc&5a&wIC>>=BRRz7aPLPTLY@qumdr0=y&k zFZ7ELM>~I9dI{S6h()Vxug+7=uNcllv+8@@;9mDjEAMy zHp3n9VU$z|EtO-^Kh85rhNg|I%NFLm^_UC4@edp6r|f$Z=Wv1sc(njy@Tk$W={gq0 z%)5=8a+w>xm=>LnF{z#<&Xsyt_?=UBA_VE@halpWVw&nr4_nv6{%k9#+4-!C@I!-?dJ7^NX)fpO z9rfZ%)Xti?@Gfi{UG|wUV};qz_ks79egMYp9b0q%7G8mF#Kal4l^sW4SsqbJaJ^p= zdr+gmeXyjxdlIwfK0XeQc11^9f9RpyH@W{C{b~R#wRG@?h6~=`H51Uda&%O3kRX3~ z@M)x8*kJEelXt`w&FzV~c}(+=h`hx66redUd`;ac?a%s{> z^4i3TRdc9OD4fA2&b8QWi1bI!Sg$2zWw1P~SK zeVD}l3^y?GL9adU6LXNP zG_Yx1PIzwI&glffY=!)=M>?4oCl8bnTLX!!+QUOVbS4p3<(q(Fdw60Rn;z8t0^>GT z$F=7KkJ3|luhzQ@tnBdb!mSj>a~+HStmDNA+d9XT-VrnfHG+T62Rwj7Moe4Z5G*n) zqcxZSvwfHHDZy*pqb5Okn`(dccKfVWd2$zJZJJqb6AtF~268YrcTb;Z$Har0r@wE| zp>1M_1o}+QyvnN-kh4O8p{%EW(D(6Q9`^!dHPtcbZHOQsl#B=nKLY>|_?d>r4vLi- zU4y~TD|}JSqqFr-^S%I1H~I_)(LXtW)}G9+$uSZtK0bB>dpy5rC3=ex6Yp11YcI0J zi4pW|Hc^giu%B(5BSqj#*ZI`?ul2gRaG&m~0=T39*cltW+<*JLvv~ zhb)0*a8yO!Ew3TH*~{artAq#0Gd)g_31mKXcrWM zny~=|+SH|sWfr5;7X}~uEmL_ zy6^Fb2eK^eRDMdj>;CXNtDVCY^=5Y5&IN47G|=iF^|@ZBx>P zcQQ}2LahI4W%a~SZe1M#eaE93vuAb;Shr^C4@w&RpBnJaiVvY*OtPPkvE^I94+(Y$ z$|Sq@2CE6b=jz!{UzyguHceLAzvA|V^M*!oVF-VmDms9lf~*^KW0qYYiC-1Zq%PY) z(#ycqZY9w$s3(@Nc87hy2wb{Xe?Wk&Z1TCL<+h+EI}U68gj zeYXDMiw8m9vL(d-GDhVjFmlaP>-h3g%vqX%PMjF}JY|UQ@MXCC`U!{8lhW!Q9Wp8y z-Z6L!6b`5Ev+sE@XMCW|@)mg)Vq3x!WWEdk>)!C_-MpKPq`h4hRqvdhQwoOcbYjh) zN}-hXN}d5^t~vY`U!-EY9r2pyHT06b9X0n+{gmZ8 zdp+$s`1P`yW~us_enH2t+o{~>^@LNTVrL-K2yJyQnop%eJZgSU|! z71kM^G#BzNV37u7eHiJ=lJF157ttRj_wlbrW^mFjZ8r-PvvxioJIqY3Q3WaYHY*pA zEM>8;CcYk8AJ82?CRcQHbr_pz7{cvNEbtTTZ8R1^6{S)Izl0Tg&Gd6ht0(COy51tU z*c)K)P2^J6R5+yUgZ%u1^dzza<3=mII`xe78{Of-A(O#YtBXnx`|TD3I=D4u(nz&S z%=dp>f%XHUf_;5^q34WvLGGy38mZ2k4o;_WtX(;6c<8Ty&ceW_>Z~w~)GNz{>FH9g zfZK`0jfGr>wjPo7TKsl?CTE57ar^MW?5P)3sH5_$%Jqba5E2&Ea|$Y~m2KWp&z2fz zPs7!%B@}PSv_A9TdR1Y4y+PZ^-W0GqQ0lp`^+oU`EG_NXS5g2Stjbg}?s!$r#^yw< z6*w!mt;zzr99Z*wV{mTC*^Z!m{zb-1So&vD~1> znP#(&Pt5(t76P<+A3BP9RxSO#jpvrS)H$6rTyi6p8?X`=18&|={OmxD0N#apR)DtzY(eC%5MkzuGb zQu6ulI(f>AY8ZanZAz-+SSpf{LCS{@7AzkujK`QKh<_waxxGk9fvA0ZaF*=eY&&20 z3pnv}n*sU}kdBuq5(X3M{)W$U^Y_U!8k;$wIxmY(X?kPa(5$5QSD)gS18Y1jhps@L3=;8ahdxgWX zi?IN`I2Z?wgZ~pT4wBqhPnsF@vXW4`{cT4EUK|;k$%a0Gs?{3 z*iEtYetAc*l3Kx|66|qB^Tl3Mk&aZwH<-lv159QA6AH{Zr;t!bnWqV^-IaC+sEAVk zREZxsQ*+#OV?+VdRDss~A&M<`R1ocG@|F88ST(p(Gb^OBnJgEO+U#)RL{a*%zE+Dl%#-)ca|BX#yOnqA&S&H&iD;5^&XGn}P7bmQ$R z^LoRI(O?KUxHt0kaS-Os+}WNXNMZfolu-s=()<4SPbTP5*XYy~kx%m9ZNGaAw}DYS z?amTH|A`z_5TwQ~WG>!WPkXXs29v)tO1x6!{6+JJ^?canG+#DH(|#x*^2N*X`*r*7C#!}Au~$!& zFxN-#V=`vK2&13@yWH8;JqN{mGFcL4^)88{*F|~WivQcLgTxbBtPpdoW;V1*P(1tl2n z;nAPgS6K`sEG#VEjHLAq1NIvxos%a6v;4P(JUfs2q9f>g)ka1})|Vs2Bu;t+H!&OX zsYvXZTs7p9;pBrjE)0VLS~wUmcj~Bv@Y~ZPRKP=(>QxCYn&_Z@;J+}bHxz+<8-w!i zH~L1*MjhjAR&>uU75=(@Q0Sa8aJ-LqbiS~o;9?8W^xM_<9vka+mzgI?fEr#UglBsn1RC^0&WilBvcO5m!~c)6ua1lAU%QnCi6K-# zVo*v%Qo05NL8V0nX)x##DS;Vjl$Mn4kVd+OlJ1lox*G;&hKW1AC*I$^_niBl```Bi z%$~g;_BWoj*0Y}9`6bf0-`#WtHK&&!SK=`-f(SQy@*OT8&cdsYP#V}t%d!~I`c>A$g=-NqhHP|TP??pfz% zj^zGW^H5#aXL3=fysh@_Ilf?}5&Mz(mfswsBt7|qnXDha#c0RsJ~8K^E0j~()|2#z zD)xl99vr$XZZ%SvJz>&Dm?9hfj}$V@q7OX>7#7UDN>ltsPx$qd{w$e$>7G@hLycJ9 zg-U*^@pO&X&DJrmtDUpFR{IJDTP~M`Hs;>e+ArFoP|td5Y;0Bn?Aewoojs) zGT&O+ zba%IErH-4?>>W&YQUksveX>Tk@8qkybdmu9$~-a7iJ+9BmM5M zSH6}Q{G>}I`_RcrbZ(UE&X<}|JJ7JMIvqR*r8*I){W}~=c0Q=>Wz)qAA&UxbVww2uBba`s^ zhz3v2>En4@dbZQ2x<#^qeW6&DJSwlN7R#~@AaR+n|hn{EQ1;SQMZ7O^`0A(CPjG&lB*bjr9Mc*}d~N9#H=8BU}R0V-x? zb*f>h>^GfZz|k6X$d~mjdqGXNSW>@)4 z4$NA=g&sQHO8Rp(1hF{#^Yw*>lYMij8D&%!o7ZG8!f+l?bue*MqCt6i9T;&GU2V3V zI8Ca{Kf0n()`+S!_Oa&%3plieWbk?xf>rN!@ zY+&@c(%N8IY&V&)MGZ&Cnx@dNhb1r0@V};dHG1k7S9$K1$lmy7Uw6U~p|m4=O#P`8 z6Ex-Y&g(u-6+vK8@>CZWg4IVKz2Zn_s> zKehq%cH3y%+G>Q-I3^!*@MW0s@#i69Uv+$2`jJv3RF?OYAoZCU#WIkX5r~)%o9B+bHNYU&gV?SSZ%QLzD>U>~JvTUD{ z!{IRGn0aSL1TwI(h+0W8is1Easw|v=QCUS>>(Gj<1_t{!pCQuB83UdhTo%)>x`TZ zcSWd0Axbzs+pTy%b?_42qM3Pv{uOA}cMs%%HSoqs+?Qp*62U3irij57GRtd>lTdfS zv_~F>#N#TVs9_%_(TiS4>r6&IMLHmF5bMaUv*G_Q+=ONAff02&f5&ynikXW@XMVKUqCe;~_(VC@ z9J8*jyf;s0g^yZ^sV_!WA!_O&*Ogj7DZwuFm9{PBzzEcR>HDepn{pD^ue2QE3D!3~ zEk7&OC})Q_?eQ_8>vMlf-#;5@{-JCEXUvC;Qg0_|t5rb1y}D5IZ+Yq9b2|Yc0($<# ztbYRrC15baMIeivFp=24I!JJfvfSLvxzI;2C-STmu*~cEl43$TP;GvCPEsrB5lip= zGxco+rpaQ6@*;aW`JT$(ny$aB?NALAGx9{!v zVA{i`j+zUQ$1~(c~eZLr!2ZX#!HTMG`7>{wLubV&k zK^B|CX%BgbE=w9mjJ+{{jV$+mpA|D~M(U&Ld1Ls_NFTAFW$P(kV%mP2=mN{rQdiJ} zUM8DiF*X?=TXI~2m(~3lPR!dm)?<4}^%L8!aS5t&)i-kS1V41$9Ev9sJLEO+ycVUM zx3Wv$m7>8liSW)fo-xI71{AC7l=qa%O)u|$3+(b8Jbh=W80YMzzV$+QzRsaee}-DP zYY=VNYO`Ai`zq*%SmlH(lh%0g8pXp=Zmy9EAagdbL(gjpot0#S9< zhO)2je(Ub$aXpl_dV;Bskg_~|TUA^?@cIxg1ZN&+pfh;q(5*^b(}Sy9DSqA%}-V1S_n{ z*tq(Y$fAPHsO%8=x6iX{hb?@f9Url`+UywZpGLLF&=cz0TUz_rX#zJwEYk8jMhEbQ z!lChm9IO(BJ}Y)(PI2B(!UL;MWuqfL5CU_{cgh74&^b5CH!lJPtpU8tWMzCnvj*NU zRQnK3`=ChVF%3v6Xez2jEzDT1edzKU4SaPE)^X0Tqb9!b2z3mwfhu5>(Q}(XbTr5e z7kQ4CF<*$j{)ZO;maFT2kxex><0&ry|cO35%E$s#;3{zKmJ4VI+1? zxw#E+JYLKpy#*K(f}sZ)Z-Af7NkWusea;xdfi?KbgsfW_MXZq?3K3C@|5*HZ53~`{ zO(s9-cXqOy_%jv>7_Cms}df4YItN&bTK*#TCD5WG@9$>SUb8S)(GP z#o51X(6x&tyf3_yEVqy~f_|a{bt-1@w zrAphXrxQ)4=`7Q~yqvkis7#pHcKl92A{8@s5jSi@je!_ zPGL-$ZPC5lQWm7DVsl@f3;XQEPvnc?FDq5uOYz{~z>z4cuq4vlCo7F35CxrhcZ?b=eU34 zw4>m$c;=(;Kg4OSccAc%2bQwD4Xftgy(>jCusVB`$RtUub{0J7GSb$ zaL1`m80Zv0)MLn10wG_E(v!=7Zkr5wGHu5O441!C0w&Ivg*f#EISF7usM?)YXpr95 zz5C)Nz_Hqb515zyiGGHcrnZxyb?7uE=20)YCEJ`;M=;8BIQi={f(P`420H{{ptzaxY^ybxJFTGmpQh zbUZK+hW$C%pqCq222DK5MNd2j@z~vKh56Xp3<>|r(Z$OWQMQAF&2M2stS?bOEP{7B z+PWR>by0mM&@a_@n)&@$c2Lft0FINFm+|FQU)HH7LiRtXz5U;Gp;>=SBO-FJFkIqM zrRt-4x6bZ}_n3zx$r?O%rkEf4N!mX9oD#vtf==nM3YQo5N8p+Hp@jz5!M3)~UYoO9 zB}#PR;3a3|yG=IzX1B?fcnE$y@mUK0hpzPhmMZ_dpVZJUQ#@MBl*Au&jFDfWzPHHB z=X-0{*&JC*nxv(1-T^`2TZ4y-O+y_)l&TBI0~R3y68a`c3KqvGpLF}_{nz;|r4Ezw zh&Q$MxUEE}Sbs}HQ6E)U3@!M7KpXzW4e1ErOSUyXvnt#P&Uj{HYb&Oy8OEQchMn$+ zSja?=kB*vC2i}b#o!At9aNWNhaA{2+q0+n(ksGVgMO`NNrN=VApd%YfBz@Nf*b`6r=p$4kFfl&$#K^OFn*DY)hE&0+ zsVNI*x2GXYsgLjKCMLRtJ;CaNH9sJmcW$(FO>svQsm4CzrdCMYqW2Lk&r<3yoV4J& zEuxt&<9GvGuSP9|_Hnzx(Be& z))#frr&v65-CLmLgU390uIDy8=_OaLgEGj)jiN(R;u+h0RFuz5w7ii=>jeQwczWEL z7OFaCHUzrkAbUIP2Xdx=!%_*)mHj6MF$DBUMZ~xNWB|TZEgybWeK+hTGA#pO;jq_l z{Bc(Rh|}gsioPpKSY!JLs6&0@_*!!w31D`SRFE7t11k?!BNbnZY!l+aZ!hxBm&~67 z3CIV4cwgVoLYQxK0rTNx1;QJ@JXK{QC{FN}cmm*cpz5n+jwL@oC2=r<@%krJVcoZw zL|N)UAnWbxU!a+&9An|tv3@cSrYAPoC!n-p&$SSOZ$feki6NfGgqJ?1BOrvBq+}85 z;H#_XVssswZ0)>U<7$wL`WwBz-d`I4K|Z^;Yt!0@&d-`_TVH=J4Ao{RwD@wGGFc#3 z)i8Gc&ccGHK{Fj4Z16ohU??N0vmu)NXaX3>&)m>}ybCadk%O*NXm}7tfsliR4_a}k z%HaMS$E18ns>g=`u_5N4kN={7{x@h@2r0p3jBtqREFk%L0@V}4;$fkVE3NG!nboJ) z4UW+9ROAZ<1sbY!v>>YLUG7j|Mrz7^C6p9*v7wSDQ#4x%y}Li{IUZSDk-2F(AGJlC zRn)8Jm0VLB^$p84kh6aDFXqR;xf2F1MWQSULY9#OAa?m`qbn(UXLp}<C_q7Dgu{=X!MQ2OgF z{YT?v^E>z$1mxu>{b!C)f1Ngk{)#1Eg{l5)=?uBy_e7;G?;OeYJleqE&+L*SrVtZD zP|C~gUxI%7a^Bex8a_S+?!$Y~f7AO;z9R1XM2gJleq5+s zsugRHXG)*+*=v_Kj3TK3Ok;~l<(bkMu~&f~@TS;j8H`LaOa9qAShIb@3-N1*Cf0sTBQHirZdWaXAA#|0H885py{r0=zGJQmWFjU;Kh8J( z6MX(+=fBKh$v}QP3y=7w9k-HT;BI7E|o^qP~n zJ@flrimtb7?oahUPNHs*ZuwSOrF@lSdd;51*ho3y?kfW)wsNGww~2S%OW?+LR7&C^ z6uXwp6&)V@=e>W=M8HI5L;C1pN#XD+-ahsr?FZ6K&cAQetc1kofmzJtnwP6@Oo`Sq zbM0^0eYiK`E5<|C&sIaY#xeAn5;*^8l=vh)PT!AJdPgs_^M=p88()A!2IVr zlTmGN!^`0VY;VdW2_m6zol{TVOT)l3m>t&T*Do_enz>m^7~ z2j)}BGyKy*?XR!lza9IbXqkGcQW!7S*Q+xzCu{2-sdrVR&+%?f+oQ#<2}%DyliZw? z;kT@TSh;*r-^UuUl=*Zf(MyHcSu?}iXr`hZhC&LsZ68A(->cUg+WKH;J% zeWcwvZh9$6IXFhCHbbZDp<5v+_E^>Ra6!&lU8WD;VcBSdNG3)l!!CnDke<8G#0|Y~LM(sz67x;E zP*wHV^6&ap0mUjVJ<@rI)|0O!CjrGAg93klC;lB-#7azjdYT{@9^f->?im;zHKGA$ zkyf(Kzvax6Xy@sPVtp(gEB({{Z;Kfj&@VWc6mL$lqw92pI(_B3QdF8FdKRN!my-BE zGdV;u0a_}&d+UFzGWwUxx(%3-$W5>AY3~<_fY)=kG>A8#SWA4jQ5KCO9p=F= zD#Dsad48i}rAa4mDFL7p<$pQ^F=>A8R?6|x*f3MB+TJcoQe=F~_F-YQe#ic6k|UDz zL(OUmX}i$PuwLV*Q7xaH()b90#8ZcDBB^xJY)@q)8Fa5Y`1=k$653o?YXYAb-#yui z4oy(fPZE_>SrkO$I}3@~HYh0Z95O&07}aL>1sNmlgK|$!RYk zS+c5JANT-UeS8n5m|vIxB*;Oig|)pm#kSYb(DzH?RZ@~e6p*WvDUqc&y_-Sh&lS3& z-njc7Oze@pXK%*)h!lWnJ?@t!0+8%++8n6UsEeWv-E6=V6mRLDw@fibKAe?uGm$0vnxucLKxnD!m zQ3a4k!U7K5{kp?zV;SLtKp#{)?Vz1d3CfKjJEh&mDoP%)KBKvFS6zn#leC)g^ z`*YzA$3iD#TiS(9&FHmKWjwBh@IBM-l3o4|BY8JkW`W`z^WGvW1XhDINqBO=f42SvW#Ix{n z@~FnnDQ@x%Y6=)rl|u6K*5`#EyP=@y(^6a>+IJim5TM>hoe`zP;zrS}-&H;oL)Smw z`U|wy2l^;W$$h#pq7R}6ZQ`Ce7qcYE)~oA}v$1xRA)AuonzHQ5JTQSZ02r!8uDlF( z5`OcH-ys5zXOJoOX#U=fDhG2J2psU1;FQYDiC2eBin!T6Io{JXBbdLodN0;;_$M?JF@_dX8k!jg)4B;k$aO-K4r2x%Sb>{oO4%fbLc6;l~>n~{&Wj(t~HU|5m z@rBjQ2U^;A^ z5T{vdE(1c5%CW-uyPwuK66-yH5pii$H*JKza_EToWe3S`zp-H$vAlx#R#xZ{V7Zp= z?-7%FmdY{D6SjpHK#J7cuBN!$+P~f%+;tg<{Q5+Q-VCgXAZyh z+sh%S$dBLm@P+Umu&|dMd)7l8)u$a-o6waF9_Z}AMy1eSD-i&i-y|9Qa_s4Yj$^=M zb61bfGXKSOx1jPVY9E+y`Y>aPEbeSMb8+1zFNiuYEK)sk_6hl6kRw&QVuy)5j{rEz zp?}VfHXl6~ii*+ea(1KGWdsP-Q1jGZNs#Nd;(QH+%yR5oGraKnc)vvyU@dz-qu+p& zQy*J_bemkL_dV<1aDr?1+xIe^eov;|#JGkCO=&+X1y(!Qx7j+dvTTRRtWH1ah$r0LDkz4dloo~3*j@t7 zIkkFBd$)6MEOu#HzyrL6o2>~k;1^nL_?Ld$j2*0dWY#ff6&0=tYbhT26EtI?-B8b- zkRk7|rIYrXPRqenbp_e?i6*^Aq7|?tC)WD-1~nUl@7>Vt^$QOTbb73qtd^=I93sSO z#PY}40Q#FXzYdhS^c5;>Ja+m-rb3A@9kol%bD-swj$JF)i#q}QVElQjAP>B-`zGS& zlCy0rTZqYu#kI*PdIrvGiRI@QQNcIiligO^IKv$rKJ7#usaj;hkI2_(UVo)NOOQ;< z+5^mObh5zl4k_L&?i;0a8T=4WPpn!2IS}8z?qu*lSP;d&Jcm8H(}JVi1GWuG;+W$? zqGE!Tn4t?dPMqJ&E+jdcbNx!65yaFz_gTkTwW0%n=jtnr(@>j1B9CLQt670vv`9E! z&jxCQD5gOl9c|S-et}U#6Lq{w!DTw6asi0(`MApc3cfEQ-3L+URy8V9=amw()kd4R z{%heU3}*~O*Qn6tCV5dpd2&r>q@eY3lU>C<;3(v1cjoFSaNTJmyM7Lrbznbd@?xv! zp1Tm9&iFLnu)@uoJBj4)j)F}Jg9B@{&p}c4qg!N2kktL}!09;!V;TL!;FHUU0`X!D z$ad+{U!}Yn$8r>V!Kt741fD$nY7Fo=sACQgE~F(dmlc`8#JWGJUj#`FcAnAOX-xZS zeg%9DTH|I({C(l(1eJlf2Jv|Wxbz4040&!+sX9t*3$f`8S!U*SmrQjGMwFD1}8^cxKLVYg62 zBk=}EbFSbO)EZV=r8>QdtM&E10NP_Srq7%%$=r9Zh(d9!+8A?eeS?viS@#Ct@%Za1 zg%|0hZx*C{A_oE0q*T_=<^%Lw_Q*bY`4#wbVDQJn=UbrO9PJ7x&l8G>T@>+I$ez9h zb~#w*=pq2SmA18gK(uz0?$_K1?x^PEb1T*WJ-F@B_iPd$kP9^}X^jjV$1NC&?W#a{ zdNlmAPAi))3Qf2+f75FBD#f}E;MHvvuHDKg+&uxNNy$4h%f$Kmge~FbFg?FyKYAYhLCtyWiA59b1Rm$OT3T)=rC*vGm5{1b`mD(@M1GA$&NF~r zKXG|TNltEJi6c<Oj;)5jfubqsqz0KNUYr22U$SI)=G_+Z>B|65`=J!VHGz?VsFg%;9pH&2g{;5Om-r z$+wm%*_^-TI@KwCe!>uCW`N;%R_gQ_7`|3=cz?E2KKZassKl4_@{hL=8G7iD?skUQN_y|hQLulU3Ui`C7f{d z)D>AAn*-O~%a@$XQCJi2Yow6D4E&yv8skxl;S8t$$R$$^Fk@kE7(1avyUAyw*r!Z*grbf1CGQA)sA*4B}})WX1xF$uHmUW$7;%iZb>p``GzAmpL=r z3=S_JHL938mn^{r<6AbE7k858CIycFL+qzMY9!8goL&%R9)?qU^ zGI-8~EfrWl3r9jPs-%ABIM`swR*Bg(qZPVG`eS)6U}n``lXI8Ys~=Ya z;ZAZqr2XR%Yayw&@|WGf0}_$-etnP*TO6?9UL!FkR$SqO_q_Xo9qfxQa;DoV*Jf%a zzP>(a3NRh{^y>4{qGB7_0i}MT`NENXuwTG{M@EXQ?cVDn6onno8dqOnhzWE=bOZM7 z5a+xlU>;6LE0zp7z*q_0DFbCz@_ueChLN7WD2HFh15e(7ieA7e0LdgFN^JA2U2rBpyTg$Z@)*CneKVKDVz1z>q#zOa9`ZqrhSm<8@(2k6M*MB>(MBf35G(s&`WFkQN<( z#lS+y{Q{lNR%k8SEdSOm=HI2H(QPUe%W#0brPL;Tvq9+*c z2+uW~cFS`gypQrWaeH4nu)coC z?wZWE-W%vgL|J^Fhq?ZR8O&cOm47aHe;=6NB{u&Zz(D2EYa@9>(r@|g?xA00IJ=MI zexK5z0lJJ4s4v4!&U<6g8HUx4mT%&;!XJmfZ&)gdu|1adw3T@u?{)VtKz0%zv9s9u zQO1*zxYY{Qzeea^jCJ%05n{XwLRV?BpZ1c6+u4zNMjvX)!kmDErLMv#0m&N;o?k@qo3tny7WYKetzaTm^nuL-|AjP#z<)6E+ zZT|+a1Su++ihF~thUE}Gs1&_h4G9tZ#oAt77>HOr$e#q_UuUW=F#xMw^Op!`8BIR#&ll5h7a5nqr+o-owUQzu)WYo~EHrdnSgVYsM+ZIK6Kj;v?k zz)$g71urrFxY6jtDEFz^*{oWjVkl7~*56xoygUI?iss?;;faN-#%l01V->WI2j2f& zLhaz03rvq5Ncj#tqpT7;!CVc<^Lw%aPgh5eg7rRK3G{|&dmPO=;7^lcw?%$7zGpTr zj;S~yak<4m^74Ut@9B|sd86-VExAZe)=Rx-JbN=4aqrTg?AHjBe%DHuy|UU6 zpwRqfk4t5{b>O@QN`5S(FZS%Lg8N*9&A#S2}Mo5N&x-|N9R zSysozHdf=ZSJ@X>yUSaiT7^joJM3%k`7F;Qe=S6+wVYGmoI+8Y7MZjw@Ts-#!tFG8 zKqaSY%?5}(S4W-K6ve+vH;NY6DtYp-&%Hd*bbN}YulD=Tjm{l^SBHV|NQKl)$H+~q z1{N{EqSYf^VZ_bHebpBP9vR@b>nz)b^Y=#ZQo9bCXIE3iov%3a0gmWtqIaQo8?nc~ zEXIU9F3n>d;z$eQ31Gr%S2V5fOuuVytKO!%FMoka8=wSv{UraRYdmp}EeCWg=%fI% z!NGxMraO@3viPC+j6U~HG&i3t9pB12{bZWc0cn{6+fPi!x%M1_?iHx_W$gLU;X=a) z;}sr)F^EmL1B^%MbbNG7KQmpjw{8atHY$&?=reY4SGS%s#|s_^IU|xpTa+8VWkd1O zs=Lc`d1!p%>T9HZJEvHdECFhTc8onC)6|&N;k}o&lAw6mHC{h$0qQ#HZB0mUr_NFyi9_5*2g-; zU6{BOu7LeajjBk>hEcev;c}6jnr2tFlzR{^TvA4Ey!3cXD`1@}q9Xci=D1HPygD${5IGta?S=q-3D@^(Wys2U|oGc;YAs z{imv0A0gOZo7obAxa}m!f7fxrW!mQM3fN7C4!Roq*G3>8Zbl07l}5ewnRwZ|3w}`q z3J)`n8kwr^Dl=Mm+T;ja3qB#+GsCL^d3+}_CoLWvl$o7lBKqeDPAp6$IM(#FUT4fa zzbr#*O;S4$VSpERj0y1)t;gQY(w^bqNS z^5DMFIb-_O)aMya1QWM zeL|=!OytL8aL*BAOlFkI^lK%4Ckc47dm}xmF6Wb75+wauA(0!dJzsDYx!kNe}2>8B;Et3N9)X6V; z4}l;nupzvHDRtJ7el7E%HfRygsuQeuU!{3`rAugvO?~K{fSkl(0`V)IFpXi;p-U_s zCwbzs1(u?xRIGkl`BRtFwjB(Suycz>5Z_GsYU#>qIuzfQX)WXB<)Tx>XJc%DvhwEA z6}wn{YU@^U!XVHt@2!afiES&bZz663(+=+^HU-M=sWteGjCUr6e^>)D@Cxg{fB~EY#B%A@GkZ1*KJMn011OnWN@n+hE__dhyzNe?#1W~}nodka0 zNmRgTnw7`Fz~+x*kc&%4(>0G@EcNl{oED5oKO^K#INt4_(7#x{Li*D$X#w}x$qfJ& z*2Eu}!M`lEcx?Xmq$J5Ukf<}O-Cjw;e1X_v;dI`O*=~LHnJCY7i8^Y)@#2b!MgL-( z!xZXHyjhr>+$Z=`fhvT1Pt+D+n9Q5}pR+^2Zb|0Z#{%~NnVE@J4`LgNvNK$EfC)oi z1`umnz=O*eM$x5 zgP1_~sfjZMtYv@upj)etO1;lEcO^%vFgGGe5_zm(rhCy?rTJ7!`o6D``1A*1v4-;8 zfmKuQk0WA_6SOBBa{aJ7O&-~h4>QqhkYRWfC_*&YcCj;47&Y|9#%`TCt_c0La!=Dr zY+j^fK_1bvgt3a&s?oQ1c3LPM(H?~i?L8?Z)p>GxJd0Ym-u+Ws9fyy&Fa)uYe5VGt z6Mb>ht{K6Fd+4V!==DI}E@-yK-Dan9{LOb}w!u>mJq_fU0s>_^||-Ph98g;zs2}tF%fq#S2e{I3NAAosF5Hxm+!cS zvkl9~qFn=yqkY|TZ4%S{=4N9zxZ)2TAxEU>o1UB0!SvNX+d{z%Hx9r|-vl;dC_ zMsk{0Z8)L`BZSg6!^ZHOW=4!0Q0tym#Xq%ylr6-E!@xLC)hWEeHXcU5xHyVYaHK3&%(*VM#M#|Oxe1QVCsv~_>oBHc#md$rqgWwPxHq36B3N<;TZ7&E*<^} z7wKCb$-`7p56|InU;+H9Iib5EvX(v^%}exf^tErhP0?^_aD?((8ClhW;9B1%lt6C; z3b)Nw6=dEn@~1{wSYL~d4~|TDan|o`OcmP=s+FC<)N^gn*y@l zXS-;UJu3%?mDQI!q%He#$h!OtCaAW2_G1%VrfJAHNe#HO+iD+|*36X^c_a+JI%rgS z3GJK%pkUeI5&fqFR9{y(FL-N^+|@L}Ajbp#p<;8NeeW-2-;gRecG}kD^|xj^c1DIt zeILmf2erkB?!yM^ddb2=L~!2EHmzy5Ps^vNl4ncl&gg9z=jz`&v2TGEPaCRU3+O(q zleaYs_E&n&Q82LJRF#W%{cvx>RrW%=UrWk)q*{ZY58h5{g4lybPLwW8Q9T-N6)ni z`a)yAYFGct5E^V>)xUA}oQdp!mWV7-OkDCiwpC%)+TPvSDIeX!pZ8hflwve{qwW z(RSjw$LG=RCmT3)@E@_EMo#MFnOeDb#P^3*P?3eqNnE5!6TU)$BFc=N{wc7WImv=h z>_M!xgMX-)_!h7 z$!~4nW5H*t-Aod{;~AGHV}tzby9b2u%f@vfxgM-GwM>wG z5iCe$Z9ZT0n{2l3$UHYsUh&a_>)T3`(#!*kGv)bfevV%A1zh2xnQV>3EPCYSngkZk zUqcGxgWHviL+f-UkTr;`_}?lMrvT9LA47j+?)fVS9@NB7-Ky+(0P>=ze8cv`g7SQn zIrFL9XSJouqMRC>>PhD&-CTou$1a(L?E&yOng(6z_w#vpR>EN99CZ%vwY>SXgZqe4 zWtQs?dmS5=5T)0Ir4(g;-p-GUDxU_6ba5~HQ#(fhI;>Obj+GmHFtX^5Zl{BDu`YlT zEL;9!YC^4~K#bZ8RW+E~1!zxp;W&iK>3;D2&U=0}SnDb{*^4t>Lh zm$)h+q~e4bJGaE&e*oVwxfDRMbR#ogBqPJ#zNkRa@%+K$a;|&7*7|LJLwsp=X z@Hkvnd?jZN{JU5yUxdK>Tb7)$8C2fMy`O?!YUNt6uu4oVH`{U+kT5kW{DE9vVg*Dg-nxoyC(QO8lq)mPnV^K#yZ|Ba8*6OJTDNtAiFG6L} z=EH3r{cBUAbST{%-9^6~E_-{b@fNHXs6TDEUv ze$03nc0OF!e&~FeXXHVY25fZWcAjSDHO!(rdvNX=n-cgfp>4UKsHo2v-WO$v(>M0< zYmZWQ76Kpdbb7R41j>xIRsUN$ns80a?>8rJsfl1PNXi{N6viyw`02bL#N+(d;DI*H z_cML5xjHQz8vW|bscs*KmR#!XwBeg$NmKc2Yp8!Jtb~73v?Zy?ekp8TZ!c1qVhW1u zVL%I7v3|WX@HVB2xKcZV|5@mSAd%yxLW%^yDbA@)pB!%?fwH`&MaS>WSLpK)FG)2#0MUm|Mr!sx##gEPUz?)_UxE$_ZQ z3BRp$m<}|M$#sZ$bC55M<^{WMxsSq$G7uT)hFYD?&5fR5AnIGm>03 zOml{WVB>t!-$3&aNhv%3jIwht-S6pG$tb736tawgWRnliXqT=B7`HrbEn17oC}S5x z6vaWCz;#|BtV%5vuKVCe8!hORf2CtIe^0j^&4ADb-L-Hukwm@YERD-(Y%n@|zIgJ8 zULlC4ub)q5L)7@j8HWg1`UP=@%C9g}ZKt7G#u~za;!Jb~ZUf8MNLW|FukiAc+l!7W zW5B3E>P|)rtAw^g-<-A??$ZHcSNs7rV$Jnq24=_fr@=*ZWGds&0>+gyn`mf*yJZN= zqyyvbn0OSM^BTuB#YT02>|mRYwdlsx45k--r4Lo$=|B3;QsOt7h=u>;1kh6k`6D+y zAm*(nrAHABxLqN12r_ZR^qpYq@y2F;2Bu@-GzAv1;My7GR0W0NS|GO6fzxsq^~iz| zOmPb%=_7!ARkyM00id*UR1$gtKAUfs zhEn9@cXX7+RE?Cl+R_xOh!f*s;`xoCApm@!V1;rTkv|=J^{{gjYxU4p?5W7O%sZP$ z@EJK;tA;xhJjghCux(5uGx@>6_xhlh0wjC@*;$)%lS@RX%jgFFz$txIGO^LVV(*G0 zDju4FB29kowvv@tjPDerTmC$00WJtzvYt;%wk)N3p=?OKP%tx0clzz~OMP%Z8ZmeD zCz&deK0&MvN;6KnGR_Zs}8C6zOKr`f)njrk) zA>?m5%EIq$`9nqytRoJ;@2LT_4vDgoANG)|l8cFp-}bRAF=mgcq*tv+RR8u=xap3G z0$bJ|{k9pFTYKR;&0G+#_6zn;4vmJ6kl8D?%sbN@{Gdky1byiADR^DHLZ2Rd2n6Ok6k{vIBY)YSn$R3K8fBN;9 zhd2557ZnX}qvDoGE(t%g<56#C=ic0JZ=&SX#O^u0d1ITqzz{mOWcc8JarU2aO}*W= zFsvZGgCadt0a1#DA|)UQ(!oO4AfQN>4iXZY6zLs73DS{{bR?m7r1#!y=p_j$PyXlL z_j&hwe)~MnIr~!xA*_{^bLK;ZgU}PYyfJ(B zP@>iCJ%%20A-dE@G;^CNtPKSt8~4#MX}(rbM(88Odf$r@@s$iI94TqwSfPX22|19s zUlIvIn9EoYl|-r8CT>Uf=HadxDN ztvlgvK#kw#j1=zdJIeIt&i%US1huprKD)ShO4&9Eoc>%3RNLH$9XwW2gt&7QW9!uzM<-3%EBJfD3 z&3X5~l9D&I^161f#|Wrl&93Mp0ZtUK%2CwXTsfWVv`Z6v66ON|9Xrg2B~C*fq+q6$ z^2i8D1q2Pef9OlYD19W-9zQobYs1w)qco6=&=KEr0t`3TpOw>W4sqV%QUDSTK{d{Y zenU-p(HP-3sPQdh1YXyVK=57iQ}65q=EqzsS@k1daJtx^gulmVBV%SAGsOSbB+6pS>3{jgeT*`d`WFLuEF_k4w^jD8JOF)l`pCR7Z zr8Ir%1muIHOg%1aIdtx=iUU{&;dsE$lguv;I;?ZecBUS;=gnl(?rZrd(ud56sdJ%& z{Ag*#K-DU&xS8D_zbaS$wSwH(V(lOz*>{)u?EbKduB3Mm#7>dzOiUuV zM8`#|aVrAwwq~5+jK(vhSlj9WQkf7+M5Q6yag*Kri%|u1GkASX&Kc z3oTd>pj5Z1&oI*5ov7m2sIW6&3#+Cpb#_Y62IOtTa*}LDvlqdFvSH!Y1aBy{F%190E}EOxqQvJ0?Hx2utX$OfnpvO5`o)l!21*qaVb zht{pzVl?5Ebk^VRhyXWz(k-#7z|skcU4|$56EG*>Xl?Zc%Oo^pf?-p9yWQ0@!o@lA zs(qDVEmAhAjPz~oVT1;aJ%9m6R}9?_H~O-io>G@xyealN7WFs~<^rZ&3-fur5CZ5+ zPJ9mD=-;f+k7?@GO2cOz21D$FKCUen%rj0Bg6LKmlmM$=yXr2Zega_K!}-_FCtcQ! zIj@#)cgd9Ci5D&UGxbTBbbfDEiGM3-%oTO+H>>;#gHS6GLC*bnIxJHiAT|DPEr8_B zIO{_doE4;yID;oq0tq@cH_x&B8>6tEd~Q96W`Pr#Db_=AQSWxmRCaG)QOsfsCb7|_ zmDIO)>a{$D*(O2>l|?Oj6^=Qs}+;5!UiX$zMY zi|-@rDiTKH)alBX49?xUP6rXF?5grdan2RS#@OwvN<>cdb+*)pR=Gc8hM0>KcnrGr zb9XYJuQ0)Co0`leHhBq>|6y*i5KM6 zTcfGNcWWAH_^>bC!cAES5nxpAlXUgV#OSKBH&0}orTcCFOn!ZL3xhGcv4fh86mw2$ ztt0pP!X7(!U5b%IUp@a+@%Ede2k!e{tp^g?StAk-VflyiHFJ*Om1h~};I|({`HKOc z$01+yi+`)?QGPD>PAFrdOW@o`#gAA`V^G3coFGYV zZseu}0lRSVvF{}d)Zk4ni%!w@~eQxd$X$s%}IC0IooK41mryumt@1p*cp*=Vd z5BV0-AWzQbRU-SjfdiVscJK$So62cX%milL%6xs9@zWpn^jB1lNSBO6B8Erv?owWEHh%KGP{e`*v8xp3H6bG%h$jyXEzmJf*FURg_ zx-nVA;bS30gH9&|_%(TZ&c`u_!=Zb5ed`EvFx9cd@_%_3v&R$j6&GrMg>%lNPR~v&OzYMc#0$hHxS#*5InYOTqaWtdO6)IP zhZ-+-uZ5xzdqvRoxdPC0)w%D10F*UTDV4MrXnu{ykCA*HmN;hm2p_!Gb-o{;@WqZ&_?t#S^V7y;hPTRVAqwhxswbZ|<-K>2oSy^p3i1Ix@?EmJM@QKFiD3IHmFEh}qgKjj z1ELr7szb)w?$XmuzzO~LbYL;Ss-8FlDtH(l~dAKh{FoWr7|=KAyytv@XI_V z$}+qMC*owfLSc#uxwTB&i&-Vk z8NkFD&5Bj}c@gT%aUIc+$Bdrw?Y`wJ+%t@l$_N;d2#>-U!?KqC(L)R)dg}4Kxk@8; z5)LKzVE%eh;7loE+;OFi9yG5tse7sSWCY!Ei-E_%7v6IVj*^BKsz=p- zQ1-nJIX8X#=u_9voOdDrwmj@-7v5Z=~BM{l*@0FIh9xFCi@K@^o_`c}(Lh3}v?XoythI?TDgFh15!L zErC+6#m+g2Orf!=GKl55S%&$ag7s=&y`_M_Yf%DVVajv5vtsf`%d2ZZ>F%62lBhsf z7XV@ewa5|79-Y4wBF#}A^r5dKLb+@zh2-K7(7hW+p-tvMMh$oEMEh&kNq_4}k&H)4 zTJm0CL+RS4T-3gJSdfs?uu-hsNVdOG0Iku+6C?AB-Ma9X*-?J=fg56&^6)lce%8&j zEFyS6&cK$;>5{S(R-bXaBkDvhC{ys;*-J80h45*WO6*4g1s`{AB+A+?A^MIPwjO|? z68M>9#Y;sB0P|}s6=dEFKUx7H~yVztbO|^h)kNY0;NKkmd4*afV^LLBJ)%Hi1 zL|Dwpy=ZJ^GE0z`9iG5`18;t!3L-S#$E*pWU zmbI041-iQHw*edrzLw83Em;1{J`FydEPMy6)XF(q6F$_Eo#Mmf^#FxFF>t`vgkEkq zDL~lp$E;=g^czI6zNaYEbnDP%s5I7}oacxk(X4$=ohPN|CR!Ef;M<~*={VH{=}HXy zyzp=W*YDH!m^Y)kW;^S`%Q~(WUM0R@xQDuxyVf|F0c~FMPPXHBUSkJ6-CJx{`1V}- z7u@>+3PY>h_CT6_CoGR?6Lf`QP6;}I^7etWufm)@m!7&epN&2cge+0f!z%)bdPs`( z<>?O1dj*Tf#xFNdBnt^0;uZ|mc2dm@lcc3kmDQJBIh8m0ZNeUd_m3d8Wbj5iY z?DMW|>3i4#(iXgzxGTyFS)y^vOWVi~HrZW(fIr?_;+Q?Oi30iry8I%}t>sJ}iCn%) zL1fOK3#Xs!obyKd{nN`Nf`2HHU|u4P*E1E~mkF*oh$v9k3ei7To?ZV9JdZOykt;ae za3^l;Po2kdz%L4Ub{^>ckD>W-%7M(s{n&NP;kVmw!7B!07?sy=+2m4ay7noIfQ~=J zS#xG38`jERU$C-S{UCxj@9M_>vkT#W!a@EQt}(q9$sh~4Ed?X!|8^xw_=2uTK_Op!ocqfcQGR73eLN%$3u_~ zZ|&$pKJ5k{e%y6^)|K(E<9xp{yRn|3b4RQ|wLxFQjXZnpy6|us2M*m2B3wvkggv9V z-Ls{V8n(Fwg`yq&h8*7d#-FYuhADkW|39e0|AOs_!^HDTH{~cFK(eaBhcG3OZKjNQ z4Z=n6#i?bWDoGriMu*@ec5kYqg6naymW+?@bAQ)YY@++1FvETBw#i#2kOcj%9P?CPHOT6xJvT?oc6$n{tUDA5)DV#;YV&K zcKxp}6)g|_b{cHM7Kb?hm&^NKKV7yI`bT17d_Lw!llp-;Yvg7l0N+8(ZuWaA{Tut| zXJdL&vNhLE8j2AgM|Yxd%_4xtrme**WH0a&5#!l1^Tx77s3Q**o0|ok;UMOSkcRzH zV~q1pz`u~qXrhL1go`%4xrOyT+PC^7OJK7EdhRh~ z-`XRd1_uXEI_)I1tD_t6(-p^^Oj~59ThZ7uoZFZ_Vd`_M2-})}!+g!I(&;u)lzK&* zHRBR-so&o`(AW)oL^wSKnbrM+%&DV~8UABX|9`7E@IR>dvWz!~(hBr_FnqUu8Wej5 zG#B^@ocFDx8yO$BQ94;+U;`iQ(YfGQ9I&K0dFu-x1r$aD;OmHG?kR&B4 z6X;*ydnv#8;pj*%j;Nk6jIqsptglqF$iYoVo5bTxjxXDDB}xJ}xPSQ8^{UUqgJ=S- z2Bf{q9FeZqpuqyp%rjw=ZWVo=e7RBOoA@_Z*JDXjBN;E!cT^Go;58-*|98usxIY|2 zik16GOw)QH?8!)7hXi}pqaVZ{j25bqCUTt$E=aX;Ap|Q>9k+8(kC(= z_rGaHjW#gpqlJXfcc;4D5XV@0ysmEaZfT{-z`(&SGxyye`LBJgjcvn@Bz|PS-jT^f zw00Xq3!8`=yKKaPG|57g2xLtggu27BTbhDkkS8@o^9ZiKuh30b{)+Z8J>xt@OSrhuf+qcsTx){zS;AMrS=4#F#9mmhd z7S}&E-X9#yH#}=BD461nmC7TCeFY_Ul%pMvDcJR%6K>aSc-LK@t4pP3zwvGOmW8e6 z)z}TE?g9Z3PT4H_Hzc?WAt#el7Z-;bT&fXb#OhVsoe7LS6`=IMH376yU+vqU67ML^ zr20eBccoMJBIQ;$7t%>M`8W$yd~=(lV}iB+lkhueJo<89r*+)j;Nq zjJK_%?k1^HQH^2acQ>b0U&c-Z!ql+aoqI)W4DjXFADy zv3)l(z%w$+*mQ`jez`4UPWlynx*2l}h{*j4`h11ys1S4k*st=Hd=Lx_D@1|WiD;q% zuwiG5$WVKf&oRhu`<ZJX^K#KzfLCfNK2cn@{^Uyr zVt>z+>@qYHX+U>%q5gIhkS{^zbt|!rhb#+|9xeG2sf)+nH{1E)YmK{+OCO* z54%SD(B5!uO0Pu)4jDWtJ#iJZ{V|+Mp<|hqmlue7XAwaZE%kY4k=Ge3E7qMHk^3+c zbIzW|4-%D99zO|lD^LWFl$oV_3h0Ck-9EVs%-!Pz+-Y02Y`$y_n~dtiT$NAJK{OU* z>G02mI0laU)Bn+X`F{^J|GXMlB(z*Bn>MSUJ2&36oFm8i;|0%?ox4xc!wQL^~ELzTXN+RbrC7BU!JN&-I&K3 zB4jsm%t%ws8UlfOzUf*c)4cje?lp70eG+G?#dEz{?VkLazVkJ?49(x}!!*7Zk>J#> z3JY44?Hl_73zy8$T~-HUiTPqLHzWVuaQojEGsJ95uTJ6|85~?GIPmcQsDSwYTU;${ z{}e;PA@u)6+wOmMWB!p`P479Rej!5EqruGhU$7Is#wqbfyL#?YqIxH z-YmQ0afyTR;Z_MEoP0*%8gg>}Ub*e+kHa8fJlkY^g47pK_zZYG>u+|=0s73ZD9AL5np)8|or@M2@MKZYI>y>t06qYk`_i^|inL8Z2lY}T6D{3fJ znw{xU4MT`i)E-W_r^`lIO}He_%uVCRhpKk?fnh0UN5G$gQ)V6}(d>IT^#gTcY~OIX zhz2lAW{jQ2zP7z9ipdjXoP>(Bs(+6MR$niTX%$*qvA)`Rb-pGsTDpbem_+2vy7SO>&bUJkoQ7#5A+R5Xpj;45zJw9K7PsU;#o?_fe)$KO` zDR<85q<&tyNdL)KSfyIvIEezTjVzgU6Y6cjs(5#@=4Q60l(k3*_Aue|CGhz}j!_gfz6;rRAtG~gNVt$xx9vhjjIrPmjx${~t=svFd z710O;y39D~^{@&)d;=*hx)=7jW=Rra1}C|!zzf{NR~!+5euvi!whR}phAzaBzv`dY z&S%W~$w+tB2kzvnK7Y#W%>4W*Uh}ydA2((1Adt#VMo?L@dA5s9va3tC%&l(zy=JYD z`KZ00zxN^fZ`07h@58^}wifD2j4tE=cCdvaTZnr;OfGRf$G=tD0o-E`M6&OV;a8$A zSiUV?9m|YDmJx=VQ>G8HQ$Py8L;+@SyUS@z0LCR|AIgVbs}e4#xwZ~}YYYh`2aYug9QTbRo-r>BS)7-q!y!ExN_YTxV($F$Ow1Ico<3%NXj~ErQ z>p@E5W0b{lZGT=4<=RUzG8aZ6UN}b}OdZAj`$EJsIL&5nk24#Uo)8yW*1$;;8o*~s z$wo4va&04v;rrN1N^NND_Gfb8`Bdi}cd#}ey|;w?&(6voTBgYU;zLe1;;&d^!wy~_ za=edc=BKxnM)nkiJ<^F(7m9kING&ASAAR!14g3cT{DU|<8SK+RlhQsi<3GPjd1=PI z#3%)Hh~c_M)Yga^2cDd^hGPR9Qb;t@ek;@+O(nI0bcn_(^1@b^FAmezIQiF4W+_6o zQ-%!ElRZcQv#d*uflyeIO5$NPwkl+`;_G7;&xE{b705D6;^7m`kMEl-S`F^9FG|S4 zUn2ok>k_XvJJ;2lAL%<~g`l$ET2aV~z`py}Te!vR<}!{Pa#v@oAPM0)?_!rK9N~*i zt{qTxQ=9^Ui7f4%p?KpddxXRiBbv@&M*tn#;}Y(SQQo^I~r;h%RfD;zfDIHTr=tA(?TdIfau@*3YlgO`2R)sL{9}{JhLs>nzLC#RF zCB_;p^k2oQ&g1)Ewwub~-ouwGKT)}60@*ovdW6q2RG$ePS`U#%;`p8Fr-+w?Ex_V_ za@te;S?t=0DkmcJ#-({Cn-^I1)c^`nDy)PDU1llabFhtsswXqK3{%&_4l}$qZ4yCS z64FrWWIHA2jY&}C8E%VbB)3l@FWb2-k7eWj?v`saq-yi9r&}&;4@Zhzqqy8ACTsG{ zWNmxmmm7~a4cozaH=xjH{V*lM@#zr!`x64~u|mJ@*IO?uvaQtFERw0S{r_y~>@4x` zA;es!x?v?3WROZUx}@sW3d8QD#W&zjLH2AF!-GGj>xnMmvh(sj&zc3#ybXL93n`bwyV!`ydyvoz4Q{1H^5)kGw#XFIf!u z^FiK1A&lh$Rs?IZk$7$%nYVVo<1nAMno&gJM8W?3N}Ww_!n3~{2i6RoF#FZ^b@Q6P z)mLAgtXFVT_ae&7ZqI0h?HjEFW0|k6!*Z` z`dtOAYhudPdxorpOoD->F(Rz*+PVQ~A5-MR;(fEl4%L}()dx<&xhl>;&)SJzas<8G zJ>0!T)?la{j$uzmdS-f?#xQ3;$b$+3e*9IGvhtfMh9l5_Ka}&h?YnLsk&&k=A8?#+ z-1C;nph8t?CY;_-6_*SA^YZT!u3mX*s*H;<;e*@>8FaaTTN%@Mdy=^D0S3LOxgxG% zW?>@6OZ0Ruk+y8|{G4$wXR3Gzdj;ISz z)4M5%A%m;F$j9A7=Pib+YXb%UO~kcL-!I5Z|A3V4)XgH%{L#_;Jl z;`Ip1gq#}UV&d!Sf0I~3SB=)FxdPY&cszx|bCIDNGO<7LWBn=E;jYw@@yK{Y8a9a& zBw_jh^oQ8X>+8$kYV@8`6(XrgokkN@4r%3)yvd5x`4=MgvKtS{U8g`bnr! z5Mmk|cy?YJKcpB6I2FD}86T!@Hpi=A=iN&d`jMyQcNp_VUmLLaqm*OS>Iby#aahps zwomCVUNwvqzG_qh(xDvJsMH$UpqU{;ZFjRD6q#6Wd#q8fDCfV+uy!MzncXSz*w7)T zM8X7Q$F|&!ed0iuv8=e{B6XgaoZlsX{8bakib(roy{6h0oI>w=g=>FK;8>GzhYX=O z*`eE?*{#17BtM-e?Z6}tkNoH^en>m9ME$40-rvL)Ug6S1rXCf>jP zPQ_NMeuU+nAFvyK{B;x8Rh)|Y9l^=N?Y5W6MU)?mzhCK_XB|j)UA2W#@&@gHipZB~iiFUy!j{bAwiPj1(7omw}3w4KFB2)puE9bhpM{4P(Lce(*fjaK} z`5y(w|HXO#t0E!3!Qci-6S?q*FHhFuJ{W^?Yw4+a|KM-zT=m(DxXCZtTOm#8 z<9C+}O`En~dTxenw$%G@cXf5mcXT)oR)x&v=jX3a{Q`G)b>-|xzdGgn^YL%;F&7{< zwH&^fu2uA0;J2cp;;;S5$;rk%?bIi5_5V0s3BZlvk6UjRChxo*_@Vu=?vhS7sboV* zrW4)Z6MdCp)-9vflmR?B1keu=xi5$pE|iQgx4Lk-vCUA)Yu3ckkLZoIDMq)pSrh1A z(M3Gp#+`=FWq{6|c9OQ-yLPcLVmpyb%!}`h@+ms3%(!BH45bu3tM_0wRp4;&z^8;e z#?^6v64+wWTsrmF=tPb_QfT9xk=x~Vhwmx7^&XaQ=0-|mJU_X&fy0$H#Gd5q>I%pWE+O33r0;M zT8#Z(mYTtzM6j)K!~OE;-C5pUJ0{L->^!!c>W?+y(bZbI=0)=Y_(HuD?@A#s2y>%D zU$7sjcDp?;^W)tbloYOt!@qF(;q)1o*Pe1Bzw=N@`tfs>r-JyJueV!8LFQ@@vu9ou z*wB|Et~*V+E>2d-A@jNsT0K!(|3(ryz=B$zA;J$`MY3Q-SP?TnnQ3Bi1XbY!N5DM z;V$89z#TyR8sqs_P-%cZCsl&1HnZ79nQ58$WU?W!63z_~nMjMm&7y_|HJx9@#E4-N zpNCX!YV-)998MzUyD?MGCl@0djem&)UZ1$+I#;h!DJP=76fZ5^%YzmdQPnYgAg>t> zMTLgDz0@$f`uhuEkbdea0JTXY@LA1UA(iE+n5+{4Yfm$uHQIUVdyK|R09@G-HILHF z88iVq{O4oS%I9JI`i+$sySRp$6d7#0{QF@{*!6FI3FN0~jC|>qu$Rg$0QRX_VPyH6 zb?rTvs&D>+eeNf-spOCxtQ4))vGsAnnKdX~$RX?a)9EQnAg4zqJnkwD`{4rcQ%!8U zYgu)hVnxh7+!HQj@ge7pV@`og`gEb{q5OC>V^?^ z{yl zkF?Ot=+V`ea3(ttQANNCqNu=H7BFyP7opdXC}tf}3l}oRgnl|e`$w8wy>lLyz#)tv zHpYqmCbSQ~ zFxah6_38soe&x2N`^)S_^4!=Ld-|9nNULS$#NYJ2b+Hf-dUa%v~ZWG)p3Npbzh2WY_WXD zEPw59Ul>`R9feHs#*jq7Dn$jzTt?EtFyZfSL+QF0vxzL8YnA2LwlbbrHq|%z7Ls zB(#mu{Z-pX(TY!srxhPOulKK_o4o0Mowp|hN#-%1*JZ2f)!(!ya;$B`+cpR0^z0H< z$u&ikMHnD^2iMEh*p4prW>-1&kK}N?+<@IJy&@o-?`h@o_x6m}WWk1V3Qd>a3}*r; zJ5vVzR{K}qzBE|=bnMwJUCjC2QAwfRZrtT*h+7sCioAf#WKo{Ry8k%SdvkvUU#BuV z1$mPlz_-LWf}d2MbrIU#8Yf*lcb`&khQuK@kZ5xwKKzWM>E(KOqvrFXy}djr-7{7h z=~UpS7$v0;Lt|zdS%J&L#AA(iSgr5*=XhvdG{3Ph_w>41E`WiFQyt+0?m##IPP&~Q zjAAt}dF%j{XL8D;;TPVEE4sgeB)^LJ-B(fJ8$dY18Xos^j$>A?5%oYQUJK2tuMk9L zEQ$Me3-1g4dS^6%AM<7Ux~+)bZ1hDdR$VkRwcPv1Vp$BrarlBhg2XvZ5mY`kFP}9j zfg`b2U<;$1H}={_v3R>QboR)onVzd&5qTVxWF-Y44)28rL)1)CGLD=qq9W03oauQC zV_lR962F7c$U8|sSa5M(!tECl zLQj_Xu^@sU06vOaAQWq$|pDuEvbaC$5VSn6AeCgt|NKgTFz5?+1tF(;Bx^;VPi)Zn6*^dDa^6tc<3gPdpw zcY#{19!jo6{sqKQ%?ZFY{Py$HVq+_sy#AHT*OxsQRXbI#IF}uE<69wfYI0jn1-04) zMpjA8-w>Wf&n;o=zkiENDLl0T=$_&EUS);=j!|wx$~(RUTphMWf_?2){s*z`(kjpbF3iOBJb?Lf9`dcggU~G$;TVn3#oJHw2r#wVhV^NuBpun6r zL-ePaflN2g3yT^;u+1AuMz8T7p$ytrT4Hp$FMm#%5K7Jt?YhSgO*gd3=vqPT_il2_)#U&k)q>3ATy_88z=w;i z+bEt45V^{a0s;S~Nks6FIFZdA5hEQL)HKjsjpknKZhDW?dcybg0Dc!&a0mKR_KR~* z{vDWz1W0HP6m78lxk!KVNQ+`#6gP>lLbS*{f6*#jV)vpOxbBC`XY#~8l?z9ugU5h1 zM5&2QKv5e+8?y*(_|qQ?Dt|k->g;19((_@pzD9UU3B7Qzu79~Bmf}m6XBXy+wW5A{ zdX4CDp`orZPs*Sq$Z1paE6BhF1molwB~zW_D!VZhr7bejQ9>zdZ7fs;ihCpi%fD8` zOZzA4;kUFN-;FG8d9T7e!KnCuRrxLbG}l@0IP!Qz+#-*z?u=xGCmcln0B#!1u6z>u zl!d*wSVL#R+A=7I3#G)mMrsPMDmnh$p@^D?|9Evf%`vW$D%(jii}#U&8Ru)prx(?n zF-N-WIX7u|A&%Mh)OS#wo82fT<2hb_2kD(xtT&cSFeQ-rMK4Au z)M+5rBOaI}SWVX@sKd&T4m=6l|HwKJPEpH2K7Y?D@umFouSBs9RqLLBDph`s0`&Pe zNoL+Y{aG{aN$mv|bph0e(`R$b7aOUnR;AHZ$76yU)&h!Z)#kIXNk|0Cnncov+0rx& z-=EN-+E9HD^$vlnu&wxsOy#PPaFB z;e7m)Y&e%579hRwO@!6=c<$&rL8U%EGaL(4&H2*)0VNbyrTJ@+sRdCKuOw&zarTnY z5-wdh`VgF`$~)Nh(g^1>LT&p)0-hAB>Y>{jsBB^&k{nmuMQ_Oa$|nGt6vC0bU?2^T zmv910B$o^FI2saWuirTtWXnB=qS3J?%fmN9P)w*o0KI1QMVMa+L9@?r_cqr0RQ2n` zUGmYI)p&{X#5%VJQ1KpMzB0L2fWfEZ>=^#-;&`!r-vjH)gnQtV|^?Flw8 zw9pg(8%RmDfxT~_iD$L4e((2x84;LQiD>2clBJp#yNql{^x#sr8f6XM-{NkT3niI& zDZjlCj^nZarbdZWHM$fq%|w46O)D99KPl%iTD_L7$-39U^Pzhy2;0J??p~+Y!~qH!lI?H0pu)9|w29=ud(T zo|Ti-3PP0stySTv#7CnQr|peG4Bj4ck0wu7{tZfCH~RcEPM=qPUX8c zl!|~(;Cy23y3EP{X$(sl3pfXux7$tjK1B~sMc1kT@3LhXWyFa zsQF72-B_{%N(W$tpjie`bli_;@^G55N;D0mvM~o41Ttcy%Wzw0CRvd5GgZu}hx+Hhf~ zBI!@P?@rh{RATAOE||I*l6~!4!G8~Bh@=g~kPLpm?X@v~y0GT_+PJyNB=aF0rz!QV z`r50OE|T?n3foH0Ice`Xr@i^w+aNaq0fDldoObT!i|5{by}}KcSJ8{$ekW%ipXndo z2QvpVx)}>OvCf||q+MM7N-cKi<@XuA=PSDhsP)Yd^=PB1@o^E?zf}B>WD9{3tWlOR z|6TB+=~iG$XhW=@|5n-cOY_^}=R*xVh5|)?)4}W> zWEFqL0$t|d;P^vGg=25|j=8igT($%s#B1>UxV6;?!;T}HhLjEnSEz0aTib%m_9w&t zjD`6M{FW}{ebg$@^>5(f|KN-z>*xXDMEGl*JLf|qGE8-2Pb0sW|d0is{yEoL>+p9_No@98**hlo! z``-h2g$g7;N|7S|0k4u>}{ar42g@gthv{VeSVxuh8u?#s&+-xcnc z{r_&adptMH)R<(|mYQsb<-KbrzN&mP2=8mWA5Qi&W4-r2{;;STg2QE=mz9ZMjx1rq zi;H@V7iV)~JUC^P_Av!bA);~F2Djm%Eq=Y5uwV3+XE8|u~r zJwnIo-N`)(yr`+ZGf|`Nrd&v9cU!W8`0MUcEjZt=)S`EnEg@^g@qZUyMLiE#snnDa z%%}&eKH@)k2Lpe^TA>1#O!T^8McfabJmKjo@b+obrIvoT#Mu3Np=!N7EaqlK+67C~ ztw@j&K{8`)1{w%B&tZb3JF#P<$RqIN7|kUcNxP>f0umD=Hw6LwdyWX4Ai887>W?kk(b_S<%NmA4+fuVrYksieV87m)Rrb*)NbQ ziE{T?gk-*uT(@GC;)?uc8ki62A1^l=aCSe+KOH>&ynSfHUJd_<*4}163rfAFkG5MA z2yEA;PJa!2C59E9*qdX0e=m%GjuRsAde5&n5q^t(vTfN|99mgrcvjhirNmmV0g2{h z)zSe_NEA&S;z?1<=WhYWbWGFI6Z(amqs!`?<41e8c%~u{<_<ne zyJ$aP>FI5Vf8~1E3xy?#bDOh~Kr4NDI!Z{j;kvAvtbnQ+I{b^HUTCLZBeL+geMay1 z(?2RJhIUG$mzp?gI9PSP`_78)9v~toPcbp`Mg7jTl|L*lrN}$@N{NjEoI}!MrFM3^ zkD@J{dq6VyP7O>NkM@aQT?05EEP?k_n~f-{6}u>jfRC3ZdRt>I-G0k*Lfjb&_AM~R zqq|{e^|l=^l+(e#PJ++s_9?%=4qp;CU7{E3Q>`XIz5$5+ydRXAhlE?#xww)qgzwqy z#kyY4hsp}$zx>VxJNGC)DC-4okihJj>>T_Bd`HVG)W>E6!gNQ6ebf%(^ao)IRuI!Y zYfP*&>!%>@?!mHL8EyL!xzFPoWY3D_)YplMto0U z7i{azB+o3@_Y3_wVm+`PTwQY(k<&{L5#-ER8Y$~B7c1D*n`Lw@Zh$5X<(%(GC2K zCxe#aTaEfNXj|0hI4@`^OU_3LLY&p(!TG#rJ?=S>=0DYs6(%ufcTuV{%=ds{fAh5a z^>aIJ-u-bYxAlF8Uh#~vZfW=RD5Wh2m6nnO9F?&3;I=_#!>fDbLVYTlhV*hM-mqKQ zR~zU`Pw$%rydiGGikFLPUdUa|gm34_eT%zxJZtICdWF>#6`K!01RU^<_hngJor9g7 zmoUsDfe=bkaV#q-Tj;D@`_-*CkfP)p#Oi*M`T*TV7N<*NC!H1#pFQidV&YuNBJtXA zMk2YnAGCfe%J8TU47~1r&QN|!=qJAV^z3liD`-3-6t>jDw(afdxxyJNLV;u^yQiyJ z2#3G5v8`D%r;d(_X}mgU8lsDhx{(vS)F^+*Dpd6|3rMZ3-Jh$)?Qr%KG*kMC!{`Wdy27R$W`Wc;fO$yBq=*wctkl)MXiOC0; zw=ndQw+zNcU`0ui%0d3Y^?s6DWsNcgU15i81XSnE@bGf(%oPec4RJ|>vV%Zb=%o{N zIWdXg`$}Q*Fwthnw86}xFpxjj3Gysk$M1bFF#EOxK~S(51uOZD?v5W%2Uh=gCPL21$iWW-JD9UzY zfl?$>=0~mvA3Mkw-{|ilQwM9kVG{?{x-!z`hu{x3TAGqD?b4(TiKWTM!rJt0gcFM2 zm!`8ei!UWsl2^4`e_T}!#6CJH>|vne?gR2t2r{8;_GzpSPj8l|s==#yJHVeJ#}Qpw z_1(MO-H8A*Y{@ZSLh0q|@&{ADAD;tM=MLkQO!i2ZxyO)Z>@APITH-qa_{w&n^+f=+ z!!^T8lpP80+u0Q{-<+1u+BR5zohV>cS;PR$QcN0nd?HGHlVd~%cW)HRBrz!y2XVws zp6Jd;452s#+CGN3^>{MS7a=*(>YCc{{=e~>~m^Y7C?qI-r$Oc{%6Zxpi21%x+?Js&UhjaJ7lT za0pe^gSYc|4_@zujpJcyv(o{9n)GUfQBnKEoAa{b(!ZX4_X(5aTeI(7RtF1en}{vc zI>Sjj0z%|^UIe_3tzUWXJ^f#WhPZ9m;Vc^n@DMkZC$UHnMuJ$DI1J%FkW?i|n~Niu zf5EML>Z#5s^a@9j)NuW-S^_~bK_wNI2t;EcSDN&{}6YMKN8Hqs~`WY zbx(WDtqGL9H3g0wUeNB~B;Lz!EUSamN5uq34;_nW%r5!wxdUthT*3{UeY`Ympc;L# zQC)p(r=(4XU*9v8#_~ItKa2EZBc>;Ps&9(6PB;hjQhdi^n7V7 zBA2s06!Q+e9-$L$b(K>M+iFbidYo+O==_Ya)QMOK%~3-~MK7SCrCllN(9U4!n6vis(l?#=#~e0nrMh&A-7$JuPopCCs4 z=v%5Hg;|1+WZ8_a*)i`u2^sll#lMvt?6p75L_5k)trQ$=^-jZ%ByqHjh*7Pxy2&z> ztf^HoY<}}P<4DNn3gOoeH!$eyg(5?9VeG8|qa+PKgWU{VT0aD|62<{ zZS<({ORK-mt9|RQlJ8dpc5=8vXhSF)rW<~nzpiNeY@qk5`mxy4<@9ded8!-~OJX^r z{^o~&`o#aVq$Qn}Q^v!sR&v=w*k+Sg7MgxHyx1kT$6wP#T>sGtdI2x_6gh#|#cJbH ze=C#MZC~%SBCCB4Pvh)j?Geo3cD`f!iL#IhnXfxA<$%6oE!< z6Z2m2E6LpK{|PUlz9)RlzxpDSt+#nS&D)fsVkD&V_dJFVcaN;-9*-41IS%UYpyM3d z+sxwZL%az&ZRRVYo!sb>#6a=81rRH0HNMO-=MrwYmaP=`@Rn5FC&bo`1SkQau1l8) zIR(vGZhU~e!yS8XD_hz1&s#H=&&<*t=8fc@&&@s*C%BK*L5hrTMp~U0AHV(6 z^cFJ8c>MK+95vfWh}e2BR>G@A{WSb>{50JJb!DNjz-yM56~h9oTfx{=dC336*;_}o z^=<3llol^ep|}(Y#c6R$&{Ckdd$CfS;uJ|K4#nMzS8y#F+}+&+#Ua6o{BpkM$~otb zbH{z(zZfAqdna4gn)8{T`K%{t+IIOHadLO7N@p6+*%12Nfn`poCwD*Okpgh*o1X`8 z-msSIBzW7$q&M_jeMy2z?4Q@csZvtH?SzAHP1fKuRgEnE*`8{T0SOf6$QRC2x?y7mxg%#zS4PXN>2qd<1Z*I6gKda1)Dc|I+ zK+&U^X&t~uS>uL5&D0l0qh#Ej1~3|rW<(I&^Z{Wziwpoe}O{Y zS&;r#=UzGo8+3hPp#l&uH+J$+IfxjrS!y?{(S78zI&CnZl*VXFm%2F-Sm(9LB2tTQ=5oU2jMFg&=mt{_7n)d z2WncLU!@+gyuYH?LbmPQczS#LH9p~zpIsUFUw+|+O)y5|1Cg_tl5HT>BZywZckJ2W zOBYnnXYcxd;7qDGo_#LP_k%Qm|3moxJG4R&*+J^Y%vt@S=fyWz@lP(?(X{+t%0Lf~ z88-DGbho$E1`+UR!jRiJwY2YL^LdH+Z>v}{iT?XtV`rH2eYu%X|2W-$pM(F299=m+ z;>U>-b925Fx?63`gil-g=H$O>aqVmS?^FIC!_|NM;l{-*j}bblAvX>%8(uzGv9RnU z*~;h*Z~S_X~A z6tVHV(SALEel9HHVUGKip)(3`t=;sLp4QzoG54RY<-e$09b1ah4H0xA_ct{EC1m}} zCTL=b7jyaE?Id9jn)-!Zf$@W}%h>AWMFe_CMeX%&^yWV0DtIk*wTv1@bOQs|xbR*f zE?!7sN6EOf9%*?WaB?&O5i{n$1vLNo9{eb^Exy_`zm0D}FOJ$=zTD7+Zfu;o7ZMU` z5-|l+)x z3qCdO?!KR2SlBo?>>kaps8CC^4dyfH8yuw3r1_nq(*mMSYz85JPCqD+f)V`GW{@$;HALXQls0_Qh{theat!2| zf{)YWdoClBDVABNF{2rSKHTG}A5wwxzskvN*nGxtdLfc8A`7=fuN5LEJ-A_RjMyqo zYriXgc$X^^)6!~Q^r?or=!imNuW|!wSaz4qhu*k9L)A{4{ayJ_3l z(Vqixb0T-+bTN!JJ}3bygCWoM4rY3JmLBeq+P94jm%+fB$1PSzlKICA+Gw>37?y>w6MJeJLuPOg?+>H$+TP3E^}imkf&;Jaw` zNXWMUIyAixv*yyTaLrLkQ|srtN<*ic*M*0H2RC8g%gaYi{U;C6MEE(Kk-B=^W9X*g zBYXzc0#u=N?lAJbE02|Lj`~y^^ruw(%TXk}F^_NVP_*{roogG7jHy*Ae&V0dBGc zin9^5xQb8|gOnbP5}JG=)_>{u%&G<%b)0Z?0u2`vnb*h1%sgU;#0@%=^|gmdGhrtYd;UkEcaFoooaH!Cdx%sf0jZ6Gzv zXkI+hkmPxqz|`rV2_D>(EU9w`hs%->2vc(KYeiTI7#}7V#3_=X{UjZCopr9TO6p00 zBc!AiE5Bl_sfJd$a>_Z{6#3lLOlADK3S7d86#x&Gh3M-hkK^OHE; zN#;0FcvV5SQHQ=TW}#JKr6We!#lQd9zdsWio{#K*v*7t^nInuuWEm-^4VB^0CZL=brxBBq)lBUwn7vj_~10ML5p$#9TJZ|MQvC5XUTG(h>Kfoc^aMmFZznLiHK> z59-O0|2wt)?F;%eXkc~L75(3T(Z6gN)EkDrnRyy$1Oor%o&Wpu7KG2Dkyj)nDw+9F?sBWnKjv#Zaw-_ZEC|7ON}+=sK% zttY;ja{8IXsC=h3ML#$g_vX%Mkvxz^6DA}0kd<>3Md0G33Yk?eJ2Iq80BHxrJZJ1! zTVO&e%g!90eZS}>{o41PF?0Z|d7%I6nYD|~R=>4|QZvAIr{Nh3*j0+%NsUWJ0G?9b z{WB;pS;NYC2sj5MVNJ`oLfe9U47hihTLzY?D&NsWZ_ES9PC)~<-dYb4>LHd;`bgnp z-BQn7ZDzOXKA{|C&%peX7x$%K@3{1lHOhL&7q!rF==v&rR&j@F(!s7wv)^Ui8KPK* zxFYOdb}54o=sOfjA#YPTfN&9vm#T%8nXqW-+}dnbl-nL-^;MoO&?e0sKWP#n-+yIj zpmR%X&GeG;xbI{#O;iu`2+)Wcvj?hPe!92tryogQzn4wEDb&4-MWoHQR5Tb}`+JYQ zYII*wDDh+4)iSEn^5J4r%WRpapWcdHDDC7)5M!Hp#lMNX3|rf0$|5~tosx_(0bpb1F3t7WE z70IF*k=U3cB8$il)jjl)Lp)>As^$p-J#P{f=A9r(0SIOSHiodd0Ero2NTazxY zY4*WaAC1H#a2G zV5Z1-BolB&mK5tcJ#xO!5~?s07W~$dNAuC#bRNhttZrUC;^O6)f-dx!wG7`g*3_(( z``Irzr7EaJEC3E2e`Kxkb3N|fLL5D#K`@)-GlGZ*Hcw*WzTUVD)u=3_zA=H_#aMkVRZV=QTP0C98;-fjJC6pW!i`Ws_#o|NLAifCASmheD183U^o zkUk^Y(1Ej9XID)i6~pwA$OBnOVPGJ`55}!;(%R4S={&kJ+2^?l4oIr={YMV4!PRt7 z#-|w`BCmu2Q1V?16Cb|{zpisaO)11{Aq457f54w6&3^qtH{s73M0Xov^v*vVzlG!8 zE}eCyKQ}+SbPWOeY-7CYvvPb$ntSkaGsjZ2A?P)#s?P9~aUpw6Af4Q1S!2IfwWlCq zHKxkvck!3?CsWAVu!x4$SAg&^+lV|fmbJ)uk=7zHIR9o(muMjyN z`2o%8#qb2bCDIq7#%RoWDE0(gc5$8t+XnPnCm|69R>tU9^Bu zSw~G|gg&G`1@P2VckIPVl~;19XOBi zZ;Koa@$K_3oiptvGl`$QJcdlTSoaaHpaTbahBw z+{0|TTh;$Y!lnWlUkAF|d76?*Y$q%tdi^OQiKTYu`shjkMF{C{zM2WnoW11n4@AQ? zDdu-MBH1$s_jww3bun3tv~$<$tW#Cl5C_2y_)l9=Db#Q#c-}rnANn5tL9tWGE^i0? zLJ&-l(lnuJOiM~MH(+E%`eUT|a}SN2aUs)u|0&fv(C3|sKT7%+?G0a;CDogbwr5{J zwP&CUBw?&e1U3Zv1llVipNx{X^FAv4@REjFu=cKBCIh&_dmo1;aI=qe6>C6G#`13a zFNqIf#L&2M^#P%|z^7?$=x*OUSH>|7lIg1wf8Sz*Y6LOO6>b+N>ZMkH_z&Dn$L$!m ziQazUd*8XCSn)=!C#(|t}*(``S+L!9UXMAE7ycb84AyV-LF5> zCWJaeu3qWj-|vr9}^q z$=A@Xu$6%xOnM?%BJpM3(pWn zJ(nSCmkiY1A~so&?~Rg=I4g7(!YT-BRx$_DvD;Iqi80au5A;;>G^%fIb(B$qyM*DQ zbZ#LL!b7`M#{l^m!ehmhk5_}7(m$X{6jHa8f(gud@+v;uUo+w5Y%$<#bdm3#*~vNi z94JpGzr*fOh|g|CTye)8p$VvzK49;>IS zaN<`OLX2?ilOc zvPntC_u-3u{zGY#n&Y-CthZiWqt{LBxTGK@2jTYi;mKP+xLViZnY_~GsF~)4B~dDL zs-3LgOMSb*d-F6O7H6NK%lH*`@!~AHprgMw=!O1L z3lyx)tN|TG2_eY$Xnu&?QWYIt=~lqgXn_M>L)ANlSA?WwznG$V#oHu69$; z6CX{6w}8z^WNt%L{Vz2`?-D+)6fzu0Gr?R`*O<<07ht_=au`l)?>6gcmkZ}Ds~vhY zOOo)&d)-)WyJGC^L`E=JFN6nG`VMb2oU1o6`=CkjRFYBC- zT_zO!dC}G(JWD*A61SA{JxzK;9Ngb2&b78j`X4$9`M(0)jB|AA7))K>;|w9OWa?YB z2X&71&7~5UcL4GOud~k9xCQA-Zfa3hL0Vd!NBo}6P2b_J;sE} zd*LS2R}1TspLDnDzD&rT>#6xBx{X}>t!<7v*8_~o4d0_#@m^l~z}Ifm6<00)5}s>V zJTf?QCmv6z;}iT}e#I>-fM_T$^Ajw3_<2(j#g0QMb(4(rnDhacRA;&8CfIJ*2+i zvum3{8ds>s0HQ!5M+Cvti+1VWv1rE<_~aav5kc zPag1|$H}xP4RslRTfbK-i~qPv5vXz z>+_O_vi5~`CK#>ru?AiV{Y@s{fJ9*6FNCJCQZ=9EsDlvf`zTE!OS7Aq27$(Lt)>u` zs8qnY|CX^tp{~5)ssE=1Q*U%Xz20N28~tdTZv^t3^q)=*k57o(1tbV}LnJw|kI5Wr zK&Zl8yI-z5F$H39If7ARPRO9UJli=14V&zG(DyZduE&+^KS#y8ZrIoGI|J z`zI4V^U4myHG>0JP5k?y#Smj-S?Qz1i`w>;Z@b{h6FCg5&-Ku^lR#9RcV?t|fOqL3 zpO4ogh5X7jseLJECYuzU`n4Ut?0||^r6joyfG>QgwhO?2F*w}=LLyq(ScoFl090H) zOWf$J7~iG1XVWkp`GzB+6)|4d8c8k|NlnB1HF3CxWwHuY%UI8$IAzm8M%ni!Gg{ahMhnyIJaqeG+O8 zc@31%+2y;{j}FlAu1IjeU#HuriMi^$SODdy(`-Vpcs*s`uX9{l|CvK>H&&oe1|Ied3RNBNEWrdS8G5_k9K1Kweyj`?zdFNC+9QwZP z$>=KCi+`#L`4lsK{t+N-owt%XFE4uA!G66~ySzt%YTPmW{L;xMa0GEb4vS(wef6uG z(chh9Y*VC%97n|YsoNgC0BnasnI3f2cCx|lEPhf670vJ>x$mCpWY^R`!cM4nj#QyrX61y$$;!c+GG znCHCLlbeQ*1vD`3x&*=fmAZhaX#wAMZ!PoNB6L-AG^tW$&vd z{g4U1(ZxiaN1>MY)wDA;}S__#G(u{!FQ<^9gplHORZya=HpOy zS8C~cg^&P+N9--Xl>vl|oOl{9YVOVNanMcd=y}gJts@RbHjN@`+aS_JzQry(!cu|{ za-Jbh>D6OL#Q$t>M7Jk;qP|@;0d$22B4-4vFoo+y9JeLZT%*D54{A=jH@_FRba2^o=!>8Tv;>7V$Dy zb@ajXEy^T!c%&e7ho>)EFV}!>)CKM1A?DdwsLE|1h_ko2QrFAWH$);Z-XBF0HDD00 zAQqv*Wb#}_Z0{1PVs_ivbI{s+JCodi=vN*q8?QoLr(J{J8FvxxGGOd+TZ#sOoh);hUrQEVM5346 zRG)@VHPK7`@g#oS%m@_SLCQPVKp%HhL*WKZ__6{FBb9f!t$a2X_BksHJYj3@b6<6T zT5g9-LEb&&;s7+}@To_$g^(>ZLSDPOp-BkFWbAmy6%ERX?-Xm6AKQKVKU?>L_Q+IJ z&eH0*PBnYt+Qe>_Oys2rYQEu~d9aN895t4WF*exP#L|_Z`w`;6R|jlnQexKkU3^e= z*MzZJi9Y(qjmm`X>AK736n0YQeQF?nuiHqc6LXh8m*M^?jsyVHF5(`URjctsr#_rS zMx$(FMnHOm5H{}zLpo-E+=j( z#tv;?U>xmD)AZcqAyAVuvX5M8K9r)GM4yzCqfn~5LW3_{0T)cqUSZ7@`m7x>Xg+EO z4Jm7Nbt_hLvku9JQKgmo+)_{`I2X^u z@_j2m5fa_UcuvXUOjxy8aZ4QGMiw||p#>mxp0p2Pl>E^1g7ocH{l!OHcXODnfEe$u zP8ta23)&c?l@N{_ZQtyn^%n{90C?BCln7(!Owj8a(h?n{K}X{-Az?dn*A5@58k>Y= zG(fyeKIwU8yO7ke)MfPEt85R8iH-GvaV=0cs|nr=!XOOp_E6#3QtESBDJ|q{$woU_ z9sO>J4IwSXO-Wa_xGI-GK3aJ94+$`-AWOKKGBo#EJkqqVY|}TqRa38duw^II<~tTG zv2?oJjeY9!E9G<3!ZRr*MD(sY;zO&SS>hLtby;i+0x-W{X#Ov#h@r#cL;9@ecE4!t z*a3dvjY11)_zpFHWUlVUjFShtt8%@wYNBaWafZh1b8$KTNa_$NJ47@a6R* zg{{5=s`d=j2e_X#>)RRN;M?0NWPcGMmeP$w5ebw}zFrICj)(`PnQ>k9QJnXZf`vQz zT~m>^Psda*&Eiw!6weEs$$U{r^D%`A>C8U4CEg2WqQ3mJPaJRySIY#zIp5{*@7YO7 ztDIu~9DlHJ=@mF+zVAJ}BS3TtMar&reubr`>Q>Q7$1J}S*GpQC>|MUU6{dLe*=Hn( zHd&15MuVy@iDYwRp(Cv|tS1vsorsQ0*=F#?!x^W$_bveXm8h7)lzM(siXhRq(n=Au zedC^c{-yz1M1nW81uo4hxq$mfI?3WEJowYkQyV>6wYG}3sqXKYEfG7V#7}5H9Kvq0@+h(L86X(%70ay0+u1haUa84fm_5&5D4l02~cytJmeOy8FOU8d<8 zevjra8u;(eQ0>x@CaL=|$n>G?kjJ!@+({~7_axl%mX(sK!_ja32oFo>w*ry8FZKzB zCXHjZ(fCy3d0mWNH{e15N3&;sJm;yE5NImQ5=JpKf9C?0y5dZ}2|h|1lSr1|N;~D1 zV}`?JXc;3&jDgzDS9NvJB&VIn&s|%bNl4m(W9kYPVB&b(8c?yTmc9fhbP#F!J0w`JT`1x)2h?PM$6ci)H`9}(=V7Qby7v|pM9Li-BDVuE zzR}0%^EG*%@T!>v(i2y0l!dCQ{8CS@8u;eLTwq7N?&DOu8#QI5XX1l(l1*_=_tGl9 z!ti81LEy8`lp@LI`LvL}tr9&XrJeD$3q#7QbeU^m-`pSZls`{-MnrCn4=WAb5vQjf zEh2dFfzAvlN$n~BYI^iobLw*sK5{zBNFLF8|$sNslznH&8TY$X?H=fes$ogs#zmT0+3@O915T~b%a+F5g!hw{pDVTQM2mr(U@`pMU(@Oa*i8)JCV2zAo)Ot$xL5>b zoM(ij_^vn=Ww6GdvPj1=_(nT3xRVUJ=jwAgWdt6iy`VC=rksXf;;J>ETx}$8Nj6f)c)-j!hrI~U+z)6?a%{r=t@^MzZR+vNpl<$g=@4Y$Wc8c!PG|1 zVx@fEsGRB^06$^_X4z?B)SO*kFoE{0)eBrg2_zt+y})r7z?F!{qzI_HCDPco zn7Zolvzb$4>%jcWQ^{3mjvo$!oY&}%&K1y|cKXQ@pN=lDRi$rU-Xfo$c&Ekur9u5I z)^=b06xabqdtfs?w)PI80V#_9gPiiEN4}$g-OiR+SBNFsPfMy|2R$j`tn(Z9g?H>A zXnPZ}Y3G?OPp-cJVn4V`XJSV^+b7)j5bt*D@Y{RQ9qYm=f4{^`dq86ogBpoDNqYDV zE@|id{DKbvu(!g1tj!toZF{8SBwzDNmMn6ekE*@`f{oYAP8%-2-j_0cH!e%}e|In^ z;%`TLxqq=sjzgf!n6{UhC}`&?cXw!Wv=N_(c0oxn9vBc8sy8IcsvwWnT@f5BxIIfP z(pAo8J@E(QR63^f&iijuk_W!T(=FjqJDlp8=d*(KAM z50Q?_9jZu&MG9lrkg6b_sFGA2>5So+|KSZV#L z`yK~^*LL)g^F?0rSFLd7f=ZAH)Ml>LmE`O&gn)kwv;@hH-&>@o3yZ z5!v<0_Z+?7&%efPox!FWf8zI$$z;*8+S$2h^_WwtPlG9uEZXYpUUuQkn1ump-=t~! z!hM$s1Qln{78-tL0oF;)NalbYbK~`i_Z|Aiz!!n#36}!vB(q8n$l3DafxQKPl+Wcf zcOkEh1Mcmdex?xa90rX(JGhB8S-Bkf{+w}uigM(}K13_~^~|zLTMbzDnFe4BV#So_ z8RgHUzwF0u3Km2$1!oV#oih@+u6RVN##vRyd~DNncjb2+?Z$LjS<&9YDwY7iah5WP#tNe_Jt=F_bLsKBDAd_RQ$zELPBO~OaU!d*qb(|5Q@ zk784&^2_%08RXHmJJ4D?c7<&DBXEIXNZlo-5J6eCa5I?9njJS#FFtsjE{y}i-Q~*1zO}q0GWITP0w@(Kq zzKAHt6RgT5BcjIYZ%E!F?C`NSGReuNw;($OR{57Y62^bVzsS-3YKS zT&gh8^iHWQ$wGPF23zkh*Y9u&voH8|amly)3tmoJC;MwwM9)r^-7#ljyx3fkqf0rZ z)B>pa^b}AO#fZR0U;QvIM+hPdAC<(Q&`31Hn*)A~C5jhA6J{@eWxBEA#XC8|IUYMn zzAnngk`ew9Ck`12sawvHe_$xagtOivFLQwHYuRy)R@u+|(zq`J7zFRH=PySzKLK{0 zu+7}|om&>@M*=6ne||5HYrH!S4rZh1T4z&WlWY7x}CY3W#wJBZ$uYMD^ui3pY?93Zq`!TweQ|b zKn>pvc6u{Q(fJ1)UEX@>J>|HSFx0L_R>~WTYUN7$U1!{KV0cGvO@U4F5b!s8bQHmw z8$C+~U3`?gRg@u9(_#gZfg{MAKty1Y0r6IcguLM`iLJ5n;D=BE#Bq^Yne!C;gub9O zW#O@2DL8}GB$yjfSYaQ`=yLZq58BPCROY90SnsyuyN z=Y1Ky5LP~SU_}2)3X)5HL}iXe`0QYK;Lxrt3p}V%XC^FYCVi1dVUb`=%T+-4+klm6m*$e z@{BO?_x1fmRhaUM645!SRGqNjJ8pJ389}KfC9@^yk zHUM^W*-+H9RZ<8--=DgEG*>Zhx7$6OSTD*>Oi>dW%v^zw*Bi;%dc@3R!b5k;1if(6hEM3q zx4%o9f2#{ol08UnMBeX8f$>Hq&Zro&L@rz7B@N8bdV&T6=KXMxVCsPvg+VufeYVN? zdv8ys`BUM5KVDPi_}d@qWy^pL7fj|LZ0ffDGbKb4F3> zqWvR=;5G+wTbSd#mTVDn1NPJYL#Y zf}6ef#-lOg8VRE%p78zgL3eM-#qM758;g^xja2{idgut5 zTSV7#NVaU!*muDBJ2Zo~)0tFyubkbMW|?6~G0`Jy>lPFt$`_&V9006L>h`|1DLxW# z>j1LMJx}n~%`dI`e05zQkCB1AYkr{WG7M{t4{)I=vb;MK$zC|PN)rgL-W@AdT#2(m z_SqDzxA^=p=o$KD#y^*Da5G$a;EFoiX1Ff97`JPd?u#R^Cc=FM+xmUy0gav-i}kP^ zGKi>76lN?$3yq_S)exnAPWY>GCcQuUKfv8>HpNo<(z`BXG(Qas4=;TZqCwN;bes^LR>X9%owv3T2(6`Ebr=JVo4QRp zL~nF``8V*PpA@EJ;(5A}7gbb-&{Z#d#BT-RUea-WlSBKsL5egtxten?&+QFpd4>8>9p&*)90=YA4BlS^0e znn=rjW!~j9PmgFzgB;C_KVQ&5jc47_sgv}6PZlle58AD{%6J$^S=ie{xeT>$7g+DyxtT*b{cfMS5tXD8byR{a!=0@#;>rFnsoX(W`qn$woY5Z+X~Vwn2hDG>UJ$ z_2uq;O$yXw5fA63pMq$vjHPNYgf}(RU3? z#;m=92A9(^KyAW!q)DxF6Ji*N0*t+f^de}(FQK3wYRWFFJFb_OIk%b%389f zJ-ilqrE{k)pu5D*b!vY&Lgpp_I`ZO%^&+d_Y$!AC%DrAPA*(33X7v;l(C0yUytkd^ z@#(AGGALk{xAH>>%L8RCf6Yfbkvuv-I~r8yGQ*FT|M11U>$Ir_yeNjL`Ba^r$bGiG zo*G&l5c13@(LjZPgznZ@*Ddc4U7}>2vrJ+G-X=Gb8?oHe9my~`fC6+I!AEDE?&2%w zg2HG1OY6lHt>dC~O5D>Bz890HsBLvyE)a(uR3T`EKEYcCFFYXeDG#d)9wUrX-SR>B z?-(qj=aTaVFP{vkOrAfdi*JuZ=G5;$ufEWEZ2Iw2U~b%HyZW#{n<|%rnw@-5hTg@5NHNfq`I?dENaxIg@D>RIXNKWb8-hBFLDsB$zm7w+sH z=v-xN^8Bszbj0vT6t|;Qe2(v1<-q3jv+>arDtxg+#<6QaeyLPV8P8eI2ifqG>5Ybx zTsNha<9n#|J4KLMZqE;LtbB3rjiFDK@k5)_r^B_DgD;%vyxtF@85gog)n1mr; zbEmX)LRfEFG(OF_bYsxYtz7ntF4Kh>HKk!QCT#r#}%n>Z{5zR8<=hmCjV#Xi<}+N zLA`C;UXtyb*OBJV_xS;;8n?9{rg*4&i-5`1RBH)`<0jMOAf#HNbYS&@$M<(_>b7l- z9^q3EwQ8UDI=+woFjljtmBgFqt9VV_mVolqL2U}jWB7KnHSpizLKQ{p?M8P(6d}z; zV3j{U)o-q2r(w-lBl;+$V(k<8MAyMIspI1UjW4pRKio35o;SS}P`pU$fSSHp8}Mp} zbRM|N-Yfg5T)Xt20Idx9@w9Igc$xa*du0&?5d$mq4t68;R+kUQ2gSXZLKU=9=Pe^$ zAAC6BF6+u@znSt95u`C+(0@K$()YR%-JX-8%$qrevwqFn5BfJfGfXiUSt%=)j`1;@ zG>eF?pM=rL zvF}e7)$GOMa%sn`n(Qw&QSQa%>u>|4^a=jrhf3t;8)qH6gJo_^m$3){UFQH?PMKZB+Mcqq8gjLD?NX2&-J%l4|b6c3-u zfqhi+Kw4kqC_YptmoC(h#0Dp^x$%SQ=(6e9)z>7?w?<;_Z;N2c_|a@%NhhUzjkr4; z4>Qj2ap|(#)XI|J2+!u?px!T}>hD=S{#Jfl4_rG$^?aFiX?Gr^Qz2Da=yK6B-ncDV zr#fT-JmfcnFB1kJe-w6AKkB`bk1S3W4fQ`4arf_|PnOpp64%?ImC~TGe5GM8wNCNN zGSZDXiU_5cTcVW9@DS`hBy%oR6MM7l;3<~goh3=2fJ)mvj+3{D5R?2JfV?x)w9ZI> zfz9#zyoUmE`{yuiEGk%*G)hj=I9-E`<2H-qkN$AyZF?82jW&FBy1-FhEbw@ip0}E^ zQ#+pdfN?O=(i%x}6T{KyJ4`*edFJ7>ndh+)2aN~r7rs+4K<-XG&?~R9p9WY!@x{m{ zwV^q8wOx$4#fM2!^uG*UQZC1?+VQT7>JCGedJ9&I3r2MK&~ZGGN0z~=Z($uRMa-I? zUif|1FK^%5UfDsme%&iPo293%^flhW5(X60iFZo8o~-_QcM^)Pxh4XY?c8Sqk(^yh z;ZPr_BNGG>mv`ON-xxat_ZTsjmuruIMs%&|Ch(l_L77kLv-xNRFMJhL*9>{WMg5@m zJ1W)s`L!Rmov{>U}Oy&r9m|VMS=afp1rTenpLZ{8mvlEb>P$EVKIYu!v*wH;S8;5UnRcu;t3)x zHyypFbq{e6?N2>#mj%_dDhIP4_VOlwJYAO*4B*80FndRsq? zZg9^(HHSUB-qBXqZ+Toh1$=*;a8fYe_CD2E2cl=mjGvVSz zjVW9e(Z-<|jgc-?=8BgMEXtO&Vc zlGydkO#ZxWg~6_f-*3WE7;|V(30GD+39U5fEQVV9Ak>2D?sWN4FnVUVgu6e>BBY}L zEwrLc4*0jsnntgli+wY%Em-^b;WERU_gY!QF}>#FP>Jvi^ElEm@5^UZsJ8WV@Sdp@ zY|N&@SXlAqmDo4H-Xfzj2cv#Zd99@W)!!PcC@~*6TZ;@5S+~H^8}uM{yrBW~S;goy z!GB`!3>+U;Y>q5+Ik_<9M)c4_A7PJIxPJ4kSlI!>CMZRCPe0BmNySBBVcyv#lgjGw zSvY_4SYV{t8b4mOhIviL3N)Ux`O3-*|H`uI&UmOG>>HQN@tlc>oEoR_N zR!t%G^>LA1CbByZ1#s?vHS!Ikn1S8{t(7`9tVH+CkVq~H!B~=E%{;$(xA|wzD^<3E zZy41A4U=aneeA;;h!Yr&+2sM&-yS{8@p-r1islzuRr?BIy+$MV5WI{YHV?xoHl-0wk3P^=1K!TA$J|p?%Yt7^Sq>N4N4+_<4hr2D24f56C1@tA851+ zaa}&xw_gz4SAgiD(EdPN3G{l;+iQZw663Mle!WO~og)E@dIXtK7hB+Cr=A^>$&&@c zErT#=kIyoHMs8_t>=lsRDEVNZ*LXkD*Q@{6%z97FMW{_bgMIo80PpO?2+ zS2X+c?{UnY#I@&2>OH?2{XWPcX6yKJ~M&GipsS%2mvz zb?=W9d>laY^rk+g44h7DJxOTEc|t)=&~g4yu%Y$zh#G4HxT5N3zaLO7G$rD1bcLze zo}52+8aia2{;F}@3x;6bM0B*Gn(Hd-kH&yp=FsPH> z>ksqEXqx$fUZoKvGc$ALAUSa|`_V|}KeQPJy?XqBz1DH5DuJAZ{oIiVs-qea(Z3}f zJ@Oza5tSnhxVQanNu3LpsPZHlpN9DrR-nbFx?-%GWy@(cXKrg34V+OL*gS zv33-&=`HRe2?7oZ0<@p8iRjJrS-wAa#Y>j8&j#+3TZI=g|Bte_42x@9)`bJX-AMuj z0>PzmcL@+QxJ!`W?hcIvC%6O)!QGw4ogl&88h4kb`FicM*V=2JeZPCoeI9-cW_Qmy zW{r|jZ`G(eh6T?e9kx062$(Q{%l!voKD*0a^0buTRcexso{x`4&P_@LMz9}$(W+E+ z!=fk2c1iP=X&9FRuCEcr87%tbq3gl~=ImqH1N?8&#!HdNt`HHFMp{Tm4$r!|+X#l7D z`(*#CD(JBfWP?JRxQwOnh>%g^Y7}LZtRwXv+Dff8joY~O4|_)c|sDM z^MN5nS|q5(sXJ^mJVxTrg~mW{*!ep$_6is5j?-SlEivcp4MTzzP@eCQsT`TXYJ!!(MhSv50ZK}fM7*tdKw}W?_+;2}nT_NXOU4{A88g?IM zdF@(%^N2=eqjoVq^GO!O?!6tof2qX!`TJ)k>5W?VgXRPzz5qV)2Tbm+N_;b*_zxR8 z6iYLNr4Rdq75)}>dQ+cI9QV(ep(AU$lEx@4XQ>d?w~(<{PCL0Ajr=?joAg%)^<&VS z(@@O&mm;THXTWswG!Bc&+wJZG` z+kP2PTT1r~t!+Oo;1S1*k9$i2Cyv@qyf20DlMaP4LJOKaXP_+hN$e9`{wqPif@z?Kodz^yzQr ziC;4hM(4bQ2U`I5Hk&ry(|rv=t)fscI@48l(ZGF66)3N-C5O0zBUbDfcY8O9o=!e4 zn^)|8SQ_x!?q)wt?CS|pOCZyx+lyV*;!tGi~;u*+heTcP9P?f?ip^RewlR_qkEaj#QZ2BkH+^x z*X0QB+uR4ePOaC+Uu_GszFRl0$H@qfm*A~@v9jF#At8~>-(Jl-C92D$5$P>9m1c%M zOzbzgY@}}qGIlj*dj)Mmwjhkcn-4p_~XbDs8ct zq+#78vjyx_wEg&v_HdkkN@fBEGP@Wd?j4wj&v8}MLXr>P+#C4>BbtK*ul7jDiEPRLBy&W1P1REuN1%pzPxF1n4& zn)Ob9XCLt9`G0D`IL@$b;I3^qF*ZQl(7$99GqK+eI~)Q@RcMCJQmraDFwa-M8@0K~?q?l7T1TSzAoTEm#5qBrG%_0j8Ca=4YUA(X8 zCv7<;wn(B}VL34ahh{s%;hg$&7>O3AD(EwX`=n|j>IF9<#5QKjiCmHMEGqtDI0&Ii!JZ$UAv#c`sjPJHqNA=RHbd4kU) z$c4RV&uqSV93*hNufjX;E4|`bjGTKn(75KQwCd+>7xpvBf->x_OAe{mS)F7aU(dM5 zG3GrOlV@mB`YjFUVINzeDFX^=tO}Y)E6k+Ku7Jq1JTBJvpH4-x!~qKwlDslM`GIHV zz|F)4$-=NxU<#ne5Kis`NiE_tLb^68HH;^D|3=?~QT?x=JcTMzUQN&|7y7P1?1!)oQ`r~3*a1yH;+{Qb?uRW;b>HT&HLN{1ddZyGyj{w5Od0FKudIwxxUMh z%@i2Np0FAfoiNliZK%VW^T3qa&_WnK>Eu z&b=JE6MV{|p6kY3Bqu7AqM(8H-!so+NnwXQ$;~ascJwlEsFQlGm+>z2wB6+3pqi{w z9~l9eK>TGE6?6g?zf_+NLl8}De(+Wj*TYvQ#FgwxCOWDZjZfGnLjAZeZfUdv9E7sV zEFVY}Y96wwJXN^`NiuDNAJRyE0w#-8H5XAr4I-;E+iydMXNpt}UgZS>{mTOVz7+te z*}w#YZisG4gMUT2JIePcPSVrB!qCu#hC=QJL9BPifZ zZN`#lJf%8vKZ$!+Z|YYIj4$SLc15NvoO(mZhYj%0AQGuJUz`2lvz`Y<_U(6|!miaRMt*$Y+K1Fr;wv38{^+ zt6!{JoOGhb-w4n*6Yo%sj)L8hwT64S*-9H{q-})o{Xedd;4Q63sh9dF!yA;KDZ<5; zoiJO_?!N7)a7C{pYf;B)Ktx+SAvmR(@26E7FhW zqusn0*6F#P+NC1sY;?`t^eNQFx#0OM&3JV8`{q}x>N`|3ts0j!`r#~z+c-uR&^%)@ z0TF?Wt!*Z$`{;&>y5+Mtz5W*ola^M)ELPp1f7ZPiBlh&0 zNcbI3J2ZEBv$1A7HujKqR`X}7sVnMcYhsw5Bmd$`{_;9l^(`0QQS*Sa8m072&$l zBi_ay;&Jg63+TNXk9oZVShRP4z?4fXHfMHr-wbn?(DGbZF$>dq_dQQTQbp_r{f?qf zy(8a?8HxU)X;Z3|)=PhDB`0rn=Eun9bLPk6Ex??ebAE*dE1;B2d)UF-(# zdTTDPJ$ZWVhL64Rs`jvvFq$s<)^B^qjs$0iZdHY+5uB>D5@ ze{_@=wZc~}50;-1VJmoYh2zyPZ(lmr?5hYZTw?pEpeW(eA^%o6l9r4*EOtaa;dkz_ z!=?iMY$}m(1J&xf{u>qz-y9~Q*!yi3W=;+&I6R8K{mE#<6O-!@tU@_g#f6J?{o3no zZVlsN8#^$h|1ewG#PBb#fwh2={9Q@2RfhV|FP{SBI5SUBln`^Veh9mbTBP|6a;7~( zkuNraLTZe+3a~z=4aNQ0jQ+2|6#=|5`=SxHbW8R`gq@tt)!C0|6yDw zE>Vm~wk3BbjrfZA7Q$NzL}g&}vkG>pw}vLkvBYC!Dg5EJgGelG3~8a|QYEeJrQ`Bopv2x&LEKfeR1vvHC*U z^*Z?v!aEV&*Pu~mol+Bv&|Az_x*W}~a5sE0LV+v%Hlv0G-9|wPB=Bw!GyZ zn4P}3aH6IakbbHygKBGQ!%I=2{X5wMPBxa`TRllWJEK5wLO;_^{PZ@`oDay& zE~$w#(A6Cw0Y9m`1_{lpD%>1p&?BEDF$>JFtC)wjyA*jdFbXa#4jAIsMS^@Ge!PIC zF@lyKBWtT`)pz+`kByDcsO&|A&)4H6i{`~M-q!6~P^*Sy`F34k}7C6k^hEC0+X_9b28ynbHBCzYpEBV$g7_v zE|QOG2z1H?R_y{MdjEJ=cLL;sgmi?@H%iQI(F~}3r^;T>CDOD7e@W}V2BNgMIYG+t zM%bw>*`&VP#x!oVzbZDb$)q!W79%MuD#j>Iv=*@1R_}fI8$-j?h7$ZMjlv6f|B^Ws3sn4Mx=GI0y{EY*@l8(3J}S->|gTmzZ_7^pcEO~{Wq@s z53ThtI{fvKs1mg(y0}oinKt0x_0oR|+&`}DA;H%Qm+gh>rBVO+Dxx@WIyh)QBt-sK zH~71s(Y{(rU2UkY;~7hy_( zlZ)ox8Sa1n-5-ip1*WkQRmQry{|^iMf1kVPz#m*UaA9iozk1SNv;D89va6PGGX1CJ z`Hx4sPzDMk?z8`NFCf?{7}}Zopxv1F>3}4|WM{sSRX_9^lex5Pb(TVaA>(tuEVrnE zMtT%kJhf$d=R;<6O@0}hxr)T2#X{YiLpSbTjFA_V?H9kzlx)XI&DuXKalGx9@cJ^? zxrs3}Ji)sp;h6r}CDZgm?9qa#W-fqf;nU>2r7v^Z!%yqxn~B3ORW(}8&0-Cf_jG@~ za4Rxw-HzWL_p1DlD_#fe)QqKzKle733pKM30h1hpp^c0`+X~93#{GI~!4S)k_!Lan zOpW3S>tyNG@;F56106E5FKfINS|6}S**nN9%M<)T+IE=XZ7jS^%1-Q5mnGH~$%cZ> zswIa@R(X29F4aduymC2BaDm;!HJGkWkB2vc;<;Ws&&nnD*Ui4&w%48C(LDXlY@2G7 z+a5N>LKd-W-U~!H=5as4%sTiUQGMfVbx3J^kGWmFnu)na8{=?+(P|rXs+sN#@Ts|{ z@H19S_j&w@x38LNOwhYNn}cQp@YQ4HxB?{ieh#<`pB)&vJbH<~UB%YC;nYR8Y;fQ7 z(Lm=_tBnD_;9mrC!Ty8SvE6slUj!EHm=~AyuD2XVV#mwQ;d=Us1@h6vF##V?I5`pg zKgFjF>4snvEB%))+oTAP9m0FU0~pfQ+XM{_Gi1uR`kIB^rFvY`@Z|j#ZHqXd`QkIG zX7;W|$h%9=p(1&Voz|v?egE*MgYrF^^Y2V>Pf@-s?ch-!u`AEDJ^R33izkRof_z-y z?o}R?PD_Ykm%+&4pkP(X^W=eQ|03X~E7;0daVcCKpgZ0EgF6+5B9svmOLO`vKlU<^ zZ#FjirH;BM;a-={4Ebu3P`#xo0d8jOIMD63q zx}LN7zDROFY0{iSz5<*{`)J}>i1_HAtlKXtec9FrOVsdr`8!jSV}rT_4zc@6=A@{k z&*edp3(xSw*nX}${+iFxGyb1v#wTrXf4zn~Mh6Ib>xoq@YliJANk){5oaqgAUlz{L zZ(@M4eV~%Tc8@QgC`APBpqlEtC)w3^KURQQB6Odq7&dUOMwpiUNukw?0F8Unq0r24 ze)+4<`cje)hz}5ldVAh?1F~fo0zdMjoCTj~lTPjTJX8G~u0^i|V*Q zf}vY2BJVcjMKK0*urhnU!TliGzr&W!pfIE(oe-HG2)C zOyq0B5!_2?c_j4LqkGhy#VrzK*TUbZ^J#|KqV*=`nZMP)d3Y7~gl!3XPP+3^Ogix$ z{u^8@v0Cm1E#x<|0FE+JQx?zbtHhB0qM)%`Mfz`s!u1@R+MJ3j0HHFv@B9Q@6odF% zCvw<;cwIx5Bz4^t=Q4aX`XN;;alN@~zfECJr>Sip1h$~VH(<%v=P@tjcqY-r*FH(% zX>|p9+``qN66ALHeh!C#^HsKXpO8h`D!uUzAFjHoy(RU5tM+j$W#>%@t`V;O%isWY%o5JmXQHJh+#0Ap{Sj;DPusdZzy5os!Ic>6yGu!hefJF?7mbc|Qw z2waiWq4%4wyG;q-tK^vZJK0eOsr+TuR1#lkKB?9jYn5rht0$>nbVmZ@q(Xd+w6(M- zVBKqetjoxL7nJ~}7p~Mu(e59ai*j&qn05vP^2?@t^Vp0M`-jmvYo>kyju>%)cQpb$ zUgn7tE3xK=$<>NNwYbIb3=kOjA)gGyDTt-YSs;uUu)y zDP?ZypB~1O{HkY9NuR8+q%(}*?R7nY_YuE#VrA>niX23N`(=8kY{-8Nz&j#?U?HQW7Ej*Yt^A`T6=Hec$|h^ zQf7EU*_LKB%fD%XUpI1(+`I%U+9Q(VQ?%B{c0f!(p0M_~|C65P)K;Z*nB?*r-GtOO z=+PrO@0n_s0XlWy_%0X&=h%qQv+bi1&j&un8H2~X#%W| zsLnmX4Ws8he0fccv`x&crAs#|$FXyl_jE=w9B$8C$|jv5LbEK5Ja;r#;VVjB*nTJ|~%ALX8*`)-WTn=kXAvGuH1NYgo!QEE3)@Kewst_zzr%xux+_4lD?J zu&h5g3X$7*KCE20;-06TH~-pI%4Zm8uW$R1jeT>|^?CLFH`@0(T7$y|P0l^8gYo)n zQu5Wr1LX4xY=;S`i7PIFbViQ!pXT(oZHM+iKOSK}`~6}Fz*H=V+o-9JL-a&E_GTELhw++E$f4l8eHExxT?A4z(> z5@{{#`c` z{hjf$R=Jsy8)Oe4$G+Rd0>FGFvi{KerQz`*l8{_OXH{RDig&SB(6IiwIji#PEtJ9C zr)s63u%;drG)LS6-uq%CPvA>=+n zE4G9E`=lDNN2JBQ^>$}4MmyGIHr6z!fwmg6?uah3dgScP5G5GJTGFF1^z(!y_?f!? z1|j6p{LUZA2#+_&F;!pOE(uP#ur&#-v7D%-*bUi z!#Qy29nEP+NKem*a#GfAULs}aR*t8hut@|4m7_>?c+h0vZ+-j6?$5^$#pnk{WGXAj zHUT5kVMJx+9ZcEe=S^=yFw`lkAE^{uge((CiL_XYk)_}>jDl)Xk}=I&VbZPT<3^v; ziGAI(ou}}|#X@B+js+G(*#7~kxUzM`bNYS7)_hO`k{vO)ZmNOh-OC^t>jin4TrB0U z2Y6J^cdilAXgpFpb*ZLU z)ZxI}8B=1VCm=y^oQ(3*=X~r#)*a}&48knX$rX-k;G8?7;yl7d;RVbw%;$Oys^ffo z#iQ_h;C-W#af6R^$^q@|*OQG?^7k*724aL` zYPLF(%oBlnXg(z^Cf!Z)TD_YjhxfpcQ=}&#WvRl%?PQ~ai>&fv9|QT6OJUTZM)umn zu2+9grR0d_kGTN3s;}hl#lYARDQJGx4@wNnYYtDX71{h;WuMe$=v-sY$t%|I$ev+g zmpbM|cRkyv2B|g2dbVXp`+--J)OOj*Ey_WnWcr)KON7FULKZ&2s)}kQ7ygxV5?A~2 zClL+E_cHT5$d;8q9a0)}*8^()C6uUI|5jvKgkx%j=q_rX&jn{d2+0=6-t-`{_`c|A z!ktYR>&Wn=VvbDV?YA#wHxlbN2IRP}b^O*Bu{t`=A@e^syGC33g1I>aUeKDV+SlOL+fIw{MRBIfNmd?~^Ev2VUO zZs%d1lK4Pi?p_=}^RnehyNOeUY=CC$hP_TqwYH^--s`vsdXqX(~1mt%>ngkMIKg3(Lb5Yw8zB)3(+|EZQ} zBW%#jlfwN5Oz{)F^pmpW*!V2-KwXD))ClHd*BaoQRrF5ski$&U&4bi^P8a-v4`qM- zWyG#g2{5$!q{c)thZiEcTd~=g zIc34jm4fF?7@nZ8D>sYJUT|)|smhu*si?I+f6vu$*Mkos8uwCjNrm|v-HK4=rtX;J zgxG0@BwA=kg1j)*V=47-BB|s1QigtV;sb{|{ z5kw5kZ*g5*g9PzrA-2+Y94|qPJrw_Rr{mrrcEUQ#shUCGLYL^%u9a8^C0X$vmiTd0fi*d9D*9DM&b{z zA+wP=jqo6Pv_#tQaNk*e`)d-j54k`UhreVs&o2xV1pMg^e~-$E_4VuMnn|&Wnkt5Zkp( z#RZH1RBoY~N}AU*B5Frwt7mFc}}Nm~HCmfXssw zVNt)hK1x-YUZ&f{xcV-XYT5xVcj0=#qxp6pexbb~_)zE-VJhWv>qQMjVQz@}+ilH{mA zFZ~0Ti>C>wd~j3e89F$|bXrV==Q9_th}uh`cL#x?>Fjd5DPjAP2X){0oOYo1zuLYv zthuysPze3C>Hp_|0ue>Blqrh*J98eg`Oph>n*b@I!NQC~aHG;G#?#poHaH{0kcmrI z^WC12`g|ApuaWD_!xW`sn_B8uWte02oLCpOSM8iRPD$Qn5ir+|(g69EAq(nLC-$6@W%m;8h2C(2!PEKM+%QjVbHyFaB= zMjyV8BC*A`C*JjCU`q@Cy~V~rjn$0RLW4=`)!}c={%8`a1X_io&?#2Af8mQVF`_`L zv$BaHTe=H9_IBk5;xHOu_H)t4hJE5Nmad;X9lTN0sW~0jU==ld(4AAm zYNk(_>AupRQu8OSl_~iG!2b@6W_q@fKB1vp1U`n*czIPVc?FCCYf2BfXukbaT;im z=D9LJ?;sUbLF2#4)rKm6o!DORt1%-86%R8u@Mh(w*;?&`qp7*r%{)p8f7B5%7w!4T ziwkXo2r~|-7MZ_UiFNJde9C1Wo`{*p`$c_PvPs0WL$L4WTy>I|l1WoV#8u~BuuOO+ zhBXzLq;&OoXJ#dYauJh^jAqzSzEQR``Qs+cO)cHNcyW$(6#r%d}=GoQmJ z4#8T%FH*CB0uuWtUsIUDAlV}HbR=K{EW7w{9djYWH-JOUS;UB~fUTc)F)gj!5M5G} zJ`3{uw=O90YYaJqiRcEWXsxa3VmuDy;PBJ)EOFJI;2V+^M%g67q^XH{iVD{2VYj(o zDwaj|zHpa?*;y6d62zsR3PMP-uowemdl!^EJS^i}SqZvNmKSjF=es?s{XPl2+X6E( zGRiISq~q*;$>8!&e1>&YWtSS;kr1AiwM^~D#-k(H0La|T$~yZn^U9aw=DOne z95*1PGGg#X|v_+g@ zKiKjKX8o*|Oc{K}5xiU&_WT>zrNf+`ka`xqq&GNK+Wk;y2vmW5ygJ+kCFCWi}kgbOcVJTu8j3GmO6I>W)x2NW?zDt~f-l6mEj* z4_oXXXy#cqRRDa#Gjg-iVrFo!FoPYh0jX1f*_+bwniLT^+P%qsmM&{CU^1>hw^;k{ ziT)U9EN>I22>~sr2&nVih&Cm?STToxx3TDOEi#P}Nl|h4l|)VWE=@SgWZ5iGYr*w@qU!VM8D8{*R*~pu+m@Fv&*y;W*LUC3Z_k zJ-E&{!cfQv{E1`ri4vWrvFLrA za6heBlEFQh=_)sZYKW} z=Cp%-pYJTqS?%Mzc%y62lgKz5x44CtqN7m8Vu88iWOwdq(<<9~Sl03I%ahe?YS+sn zspsL*D%F5&Mq6F4@RoPBOb4wOqR(BIzh`1`uuo|#?qo=!^tO0@9yUhd>H8@c&s4vQ z;TD7B93tBSzjzdwK!WdJc~OQUxpiBb%L__LmMlVLgEr%?`x_xnhm2+$KlCa-zL6on zevGs`H(Pa_Ce{e@a|&fRv3ROf3&|lDY3S+gx-kQKe@T6S>|!<|&N(1?Z9d1n+%g4S zlLvcSdq#f}7vqZ~Uqsgp^<@84j^&wb4!zc)Q=$WS*0fVIUBG?u*X^?+2Vl4G)E-&>DAeF1)aVGT-4^%t59!pIw&nOJ1UST< z4T3mzb%lIrMp^146MCm)e$ZO2usJla#DH}UDk6$Ta~Z`b6^m`O`4o05DU)aKT`7mf z$T_Zfl~K4Wl{|(Jb8bj^ecyPqYaPSPJ+4BB=oull4iZ~?x>aWU@G4gMFT<&l0t?%; zD8}peyo*1Ji$A%YFw787&%%L3^ge{1xGz;^!?LEfpBK`( zenB|Y_$)<19dFiF$<8*zYMKpROaCzB?5o9lVz~R3l;E> z=!^#55o}oAooger<<@MeX1EV{N)BOw0(Q)?`2$~3PL61dzz*I18Yr7dr%i2mWW?-j zUF>4F9l zp%7Sh+JqffNdN*hONMCk&`d+anae*j90EO1j2t~g)b$*h&oqmJ230Q^5n%w`CYwcI zKheNx=+HztA!dt=S@sXfMJTGOzutF~i%TdU;V)FhsEDd2BXY73nnJd&{p_mi-ESF5 zEUMC``|m9dgDcj^!QPg}_0Die#%ye!S9fu;kLtQ_wzIU)733c;t248?sSS-5-zLPK zmX{@^Of!6{XSwsa-NrMSB6aM{RP*p=#33Dq{Aa_H&z(gxLb$%j7b z!sD-gDc$#h33lHA@=jugluX7mmcE{k*4SMu0aFfXP$e01()_@92tR71lxQJ*xI}d? zBRUb0$aE#6{??c2Lk#s*rx|SUNmBL(lRqptZZipu%u^_Ft+|_YuZ|8}A@{|PbZ7Z} z>R>+=iQ&%;_l%qbfJqjo9u-Sh@VT`0VN`rLGe)9r!ATOnic>X0C;S=Z(lvQau_WU}x5 z;}bp_x51rvpe?64~+@lS+Z73js3bF{DEa}HHS zWj@J)did}sxN<}H)ivc3Y>l}VJ0)|y=^WpY)mDkddimqLn8mcdK{oyl2l~79g@)Ri zNj~8q`2I8D*Bi$sKeT!Fot*(>Td)WId>*E}y+a=#|MZeQb6k^d(5J5ASFvQ2P3gh0 z?;K<7*6g~cK$1W=9RE4OEwbR+B^g?ddI>4f;afa4K|!9Ix%0qCxQFP&+2j0-3SyA8 z&sSs#Z3SR$l#GDfR_n#!%#Ad;=&OwFJzwy&?**rSt4J2M*hldSA6w6b<+z)LS0LUK z`zC*p+z7-9HqtD{LZu;R0}(p^b}Nz7B8OXJAJKI@J;N$Rm~ej97qOUIMNCsf{BqSk zW~T4}wNxVa+yq8Y4R8;l_+nw6&hab7x+Bp^OH?7I6_N(8dDy{f&e%5uioeoITF{%N z`#n8ef;)DiOG^~?OBagFIN0=V;iA;pE93D2_+Zyu-j%K-|9ZGl9MZP##r^+l{-d!sX9s6D)tmhNq zWMr?G%&r-KxiG*H?a$kmFsykjSxcq7ybY;I|ImE$bMx%gZ@SS&gx*##@s-exKe+~K z8Tbxy*1kgRP`QY#pPWayainI z-G4FPJcO8&WiS06*!JQOmT;G!3?7aJ$R7c;=mZjVjSvTDlyORmCJ-@vO6SoW*6n1`GOWF?7s<(~))#asAPpB~~) ztS4gMlS0{MMfMh=`K=);)+j8JC`9bXGb+w^dvA48hnmrtvrX>sQ@I4$=)V^-ey!ls z@VSqWz4Os8xJPmR2cKwQ;4)grxA z;`KJJV%3k!pczqX9>A9u#GV-v!x(_UUxnfBX@0(~m5T9M-bR6t{g7FRaRXUoB~GI4 z&a=1)=@lvp%`ICXcI_SYy`@V07tKvk4`P1|5@YH?>Qvri&D0G&qu%aP&9|Cw#7^i^ ztQ}vT8}Xr(o%dBMu-eA}B*-pzy?p6tqxTr7LQjhPC*WmT7#(#3e=JY@N`L%=(y%6!;7`d4Xv(e^EfjsRB(7>_k)q2f~#PVdJxQ0^nPV6K7b6jk6{MAhj zlF$|)((tazS!XvJk*7ZTpv<^B_g3L^2-E1grf%RWexiilePcB4{%4}fNu+PTa6v&3 zN_ZW=9J{80)bdi37Lll@|NBO-KmUmiVS_0OYoP8$j#O>V$>N?Sqyr3B=Y>2lnkn%4#N)aCHvO1i z58sHaFWwN4x7GcKh3n%u`qprGKl{^k9u@kig}~Ji%PfHygY1h|&s`RzEdMLEBH^a&$Hz2c_f!U5v3OsltEr8@ z@(y#HQR`yt1bDMIH)Y1|uoQ(^n@>gss*J8M@Oih_E&G2cy4LHwRT+_i9e2s4nqOPH zqAe~jPB4k(`-qj{_Z8LNz({Qf#oiHH7*bTGbzZEa_l8N+@0xw<`7AGXB%XT2^dT2{ zq>xc_2-c@Ky5`r6VXOGV%`w$}x?OmWSB$LaGb1x|g4syQ$oarqd=0D%2t2IVDg3_> zJyCcVDuJKb=gC_5c5N=|@gOB>w~=mropCb5aGub8s6x0vrVZ6WKGJVD@Yr^D3SR>zfl0WD;uDOrLB@y>BmSVNf ztm|9k^yuuvLY2|%uU0b+bXAxS8yXpcZB%*a0x(Wy+!oBE?7&AuEo9}6+(%QknL3H7 zMwb2fbVnGro=QtN*H~dbIf;f#CGMM2OSZAfXP%PfMPBe`xhAxsOb0B=hstt1GebXI z%Lz|(Q|-#u#fuBX*6Qsa3@vl;8d55bzcOP9ft%Cmq!uJEwR49>>9ETdHdpSlw98$C zetaw3<~L-v^K`a3F#59=z(wa0VSjw=?UF$M=k<_CVWb&a{<7Q0ua3>e=xqRBo9Br| z^bxARa@%h4ECi;GaxUc4Srun1bODjcOvgC{TXN=`caA}A^u=;7i0q*rm(1*b%dY}M zvcmEEGrGIQl`SpzsLg{~76{sD6uwi)r7+J`l1@cmU{j_uSE+eh%q}^1Cxy=B{@4_+ zRnVHBbPNJe!|q;4_YP=Kt>T*LG@yU%DRE4XyF9j#0=H2^jW>}fZecN zn(!rl?&@657SflY{4nCQN=4jV`^v<=DEuTn6%n3>)Ybu0?y}9!X{hXDFw-l~rMCB~ z+`WNLI31i)zR)`#OOGYwrVU0N`Bf8m_2)E)RFqq#JzDj5AO0JJzV`_s$ELbaN2pzX zEoD_pgSpm~k)=&S)M({QdBcKQQ_-1@=*!8i7#-wis9Z1!Hc&(LPq>G?9 zVY^W^!_(k?iSUtEb3cqb3z1qY@#1}&4-WBCxZ+eth@V5}AZc3dkN&H)N^+71I`Z=8 z#es6$7Uf3wI$0c`=>br%A9E<)PwMqW!_B)k_q^4xQm2X6Eq!bV&T#V;X@B48@GFR+ zs0-f*o0vV*Kk_#wA6PK)@$s?e_=92;llNU&1N8;mhb#13O@9fTrh&SE$V0as&Y24z zMn}+WEfXM+3Gsw6Y&#kBrKF@3%|Xz~T`Xj?P=tF}vf|94vaBRNsZ^Ll4DItzd-(Ie zrDE9|X=|&9~}54IRt}HDFQiJU`~hn%t_ZVawe|+U>c1L>bcgejoI*6`%3-`rLr%~ED3zE% zvrA(3^)!1?F6SqZIZz0ZG&rrgNZt4)DB&BQ^75xr9=cuBgv;%->gJs%L{R&M(4Atb z)az}w(^{P;UaE0ATT#!g0`!Meevf2xqvAb@`kXD|ZRexAI9D>zac>BkM}gI10VqwdzRIyg2%4y2oj6a+z|>`7NByHz*{meAYRB2-)o6 z6gkPi|f7Rx@M@_$3O=7mA|oWo+_+oz8noF^6) zymwygOwh}!yvOa?6ge=XG||u?T#IWNR&mKp9sfbCi%IEgclRR=a?J%Di8`Ukn9Eb1 zVQ@)aq}lM9&E;-iXG%@N?I3rAxbv0u3bUEQu)fPTiXN?Z7u|n1V}Fog!Wl)a)b$k| z^k@PbX&AO|Rc#7{5A_c;P4LqSI8Ns-Rf#qkhm6}%wDCQ%hsZV;aoCV4DUR%11QLCdN2;zCojTw-G&;K7}#{9?+G=G zp7sEM% zC?Ma+AyqC50y8UptjDzT&FAcnNZ1|tmjSWDJ&W~MEj49Qh^3wY8H&);({t-au3R+w z57vMgr-Q~BRM!GuBEJgB)vnzgL|9>A(J>$QriD5E)-|75kKIg;2J52V^ijlsG2yd%XSyKM z5(KIYDwBF0`znF49ev8|q(n!%HP6gRAB532m-^B*vJUPcY(Y`JfOt3Gaz5%TxUAgZ zPq^w&`z2!w->OEB5_DUcEz+!7qsC@2-tju(lug z37FH_$j?iF0+jDP^nG)tFfKfuEu%?umn4o)YCbJ->1bGc8$1VOavem2Bu!&R@C=J$W?kl12xQHJXp$hAHu! z$UJ@<$YRw^cpdiYIn#G%|Dp?m2#cK>x;NNyX{hQly018Ahqtc@CxGLC*zCKS`uBvd z`CYKBOZHoI5>s}$o6(@n&3px9HmIVO|3Dun?Tlit^y3S_hbyIx+cS%XR$fVoyi2ok z97X;}_nzmT|I8E$w19u*sy4$dmk(X|Y0&tyvS_9fLaO^)v&4`R-*D2?XdVb)(*Ger zUfi`^NhMRx5KrMha5l7mG7MNGv*bZc1n>*`(@N*aE3}Pkl!~3BEF$2KtZvu%cQ?t< z20rc~uoB@Q5fmO87O+vro>!N~B7no&&cHQtadw#oBo*g86{Y-K^rsIWiF^%fWptE< zec%r8?%v7Q1Qj*)>%srNVjYhSA<3AwSk8H%QdDlGm@#kjU%=Dk>6y_NRK3l)0UF|v zCzgvJ?#45;KL?6krSuwjB)BQxbJ{82cWM~+eUHNMF9$}xYf$and<}!?9-B5P1tCVp zqts`x>^9G)_ZrX&k1T-$@?LD%k)JXbw}(9*kIov9A7N zkGa@Qi%r_4q3qLl9a^_@J$n8p2aiCV@h*VIV{3(ibx`K|E6$GnlSf@zH6BXYWfF&H zcT`BwDf#OB^r~!})5|Fb(|~GQRZ*m`#8*B*SkOT_xiyL7AoQ@uH8$8#`N?F3{6!Df zO(1!Cff&9c7cN2HBvOTNus19psZH>Yq)Fl{4B*Ub8@Z&7V_bqHl!`T*dc4gy+3WW! zS&!Ivl>RB5*v5MBpq%qa#;o19?2B1MtD*DGw=vZx&(#&=b>6m}PsXJ>Sl8$eQ^U-d zJL9Ks4@pU9_lf%N4sFCBZY%1S=FkXq4tV`#2P?P+bj zbU<$r`SIkY(cMz|gobiJ?qR>Ews?QM@u_&?OJH?;MozvS!0*R^nCWmo@82vdh3!cjB0mH#jn&R&ce_(f0#Jl`{fk&l9uh_na8$)AYG-4E5`|4o zH3tu$XkAib&Dmjjz?~-QNzFs66;7QT6v=37iX@dYRm1MA*J{^3`iW6gxg>BV$BLO4 zK^GYPmTM{z)={ZhU8DSAw27FIaJUohCBnItdhHc4_n!KUPFTQ4?JZ3?{tjdA{Y?;(nR{g1gaw@$6n-+bYz0q2}6Q zVp{S4?!w++e`&7Sh4qoU`jywc6!|xMSJ!$D|GPP!9RK;HIXW{!LPQ2s#2IpMZoINf z=^4)-PKpa=V4s{w_~70lc9JAS5ll|~khCQwo%BbpW-o+R_f01Ll}DL+$!m{+t+8a& zpBXWgHLUk`*@lTW>VmKMD1MVtQHA>D`i#KRf?*UAr`G4z4RtwWhxhL&svJ6e$MpbjuALu}QZ4|N@+QC+$k{Dh`)>?7 zlpQ3X{~u*v9al$_be#|g?w;W81PBDbXmEFTNYLO8f#B{E+}+*XHMqOGyL^+!_SxNc zv-{<*o6F4a&UANGSDiX_nhsi($GYouL59w>VTB6+EV#;VBg=pz-Mseox4oSYv-nA` zi@9jrz%{%l28nO^!DkCC9K(`7%UH9eCBzLYoZ^->CxQT*#?wcpfN}f;s zm>G{$dQm0sQe8fUDqnX4n8IV(4Zug6zz^gpz7phg!No@dQ9SQFp*=QK+`Aj)Aky(Z z0s^Lsql=Fjjsnl-$Cvm8Pqhc07#=cDsSq~Sk6p?eA;po;_MFpFf*fPl+tCMg?)z~p zpD9w08e6I;rGz*>JzAx5283v%9`aPxf7-2gU%%@ev0HXG6S-UbqLmMWl|uBGy8U)- z`tvPNN_5w3SZ7OKT%Vlt-^UIy>Os+vw&&v4UBqA0LFvTUBecZ=)uHg+uaKobtFJj- z5pX_uCQCt~W@^85fAqU)F8`$Y3I%BDD+PfnH6%}(>K52Ci6p?Zm znqFo_b>$zQ$5al26IlAj3O;!=2fd#^f3%LWKZ*F3n?K%_a0 zeUif3NJ)5Wx`%!^jrUpV*;J}INbI+8X4D#58w?YJjFHJq&VjwIAkraj#f}!KG9k$D zZ7xCDlk!&^+HzvLhlr%F7WTLCJpCvp-?5_}edpP+-(5}4bEjN$xt%(wZ0s27nE;mWP-1xj z1cs(QpWxQ8z7Osj#N(ZBAXWR& z{r5KLPhwv&yyh51L@+6)!9~J6g=t`!q;V~*pr1s>DqDCbT&`;9tROUQt*k*J5hKum*q0S`H zLZNTx49t!P0!2ukKHb|bpJ6$qa)UkVjwwOs%MlxM9dL*=1+}-H(LpY|r#9DwCsi2% zHU|l0Bf}*T%<~PyXpcwyex#&-#)$+TozSgTqj4T>7+$(6JK~&5-M_QYgbjW&g!+p* z%KxAkYeEaSZQVI$wK~~jzoY<%z1n2e{I6Nvb9v=uJM7 znP5aIdGG4dp6X=G|&AWF(K(B8f1K1xhmks+%IK~L92y}dYk8ctM73jJXoe@|3rlBl9$%sdl>i)_3G%!&^3?;||N`y$|- z5uQ3tjyUZnAu6*B-JOV(q~ek1YPT=E&G5!)ISpu*@2>K4&0>JsrheIzYjsiDe7`Qa zfD+1%Dp;JM#S|=xPsJM>8A10dGy)qhPw6tMC*HCWB~2f^@l1O+pQsJrg#fGZJkSJR z5ab_A?uHYk)fY0JUAy%kuN=ygNA-H~@}r{z$^5zT3^Q}S3DRtZluzP^BI#6`iA7nB zX&S`gyfBSu)pvgfW_cQ*GFwlIH8zblSfN*7SB}uAYHi3}xBg7|+Q2pMbNQN`OfA2p zN}e9xo%VHWz?Xk9OQKO%BHy=rZzoz5M*)2y049wyr!cAiB=4Oofv#hlTSEnVNjVtC zoi8wv^G?GFvoe{#4hkRPAAAe$5pY(F8_pUxqv@vdY7snH(undm8HY==vzIp)pha2w z>p`kWF+^(lf{w+Sph`pMZwnj+>eWi68qO{`dJun^K)n~w+=3(QAbA>UckodJTs-uj zO9NQqJTBlE^p7M&D=+1){cncw|Kq~`leG8q0wlzjJ=ut-0tQ(B#l-*J=m|XJ$$^%4 zc?-grzu0g8o1FveX^!_R4Bz3`p4|WGDgXY&VSC_=O<-Hw+s-*D^LhaPZDL}=#e9ER z1$|_2FzVpoU|5tpk!}vbOqkF^A6j2uUszI7vit}3|IahZM(`-}Qjm&GcX=C|o5xgE zR?-buZ5zcVFWvg&8=IJTA5Nd&%Nk81^_%{)%ltn^>2Gdw=QDWinWr{s03~^#xXd6M0#Nu3q{{KEGT=4*tCtWpG6ikN4E;7ZmW-&8OS^WQJ zEozlUe9zDC68`dR*(l|Mh=y&K0W_cq3DmV+stt>Ru&Q&!zq4`|6Op2l7kkN( zNZZ;5C%PSZm+NiQ-F8^G)AiuG>JLVcqHGt<9{08j25z>#%Fa&YlK|e~b~2vv_#2|Z zL~oO9F*n28keC0oH~pJ&6aww%`dxfN|9Az!rpQVS1{8m?c(eVmck4}#rX%PN1Ejd2 za}?B+rVnBG`ldP9kIw-ms>&;Mm?=)Rs$< zNvcCLA^n$0wR!ckBl(q$p~ydgub=C0lo|ZZn>QQ9&iL=+HQf5VBjT~|(J6kg);vEN z@+JcRiu2^b>PY0OLC>on0A3a~1jH@$MrZ1;*KVFT!PS8SRcx}s->3IR9fkEK^_9U` zCUo}E?q_4(TwJT&So#>)W`|@ELUN8vG*0PKTD6+Keub3272a0{BWcdU?1f~v;Qf@B zm+;*X+ekQN5;0n(xC!Kaou2`d{r+7wQo!6i1E`>aw5@ja5PB75%^*=Ek_L*TT+2QT9O>3&4=r{U8mM3 zXOe+G5Sy<0`i<{le5$1@^Bbdd_I9#%LFUWN{EBYXs%KW#1{=M|5h=0T*9a-(ax4NL zIip@ir@4k3zmJRB4c8WMtIe!QA@-DpCSL2&Z&UMhSE(73C=+&3tq!r^(1fJ1OEo~%Et zm2_MGo|z^7oF9>`H)@+p!aAC2Z)1DA@8)!UV~02tih7?%<+Uhh@&y%TxLf{yO@8}jm0o&d?q?&tDAdL)XV&IpG! z(}hYENsjGy7LmuRSWtLm2q-()*-_9N$F_a9`?1Rik10Uri3bwb()0HAq{+U2DMRS4 zX=7bbY{RJKDXCBsbuS}%yGx5*tGMY7#$SR5qJL4Qnxvrf z)2|F|H0!4pPgZR__CKuOg&Ueivt0h^w1guwJ)IG(Rjpzv#uv{?p6>R{+p2Tb*ZVQq zeUQc3 zy57fe+)RFRFF$^<0GY>(M*-DzHz)4szT|>x0~BL*Akyyf9cBXQ=Bq7Y0dLIw@Rt0% zQoN+)H0HPZ8w>+8GxOQ}@*)-jlSXu0@lAi$>T+MAy4_|~_t_92znBdpgFg_G)F9sc z+`R2}dt|!|Mb0J@9bL{?F?gIcpwxQ@|2BASD9ZI3+Sh;Si7K9TwetcT=A-ls+h*sw z!FI6*Q1epQOo?T_n{Ye;5AAGhb8mNzv31O*e-Y-P()EI3E6?ePiNnj|3z zDGo@eEn3dal`S_HD)?a7%f#S|tgWZ&`Zr-LDJ$a3W~u^{aZlYmq7q8c{6pgFkSo)q)-`k99~H zF7PQ%SDo%ZtrEo-Ow$$0I>PWh-Dt?LxVv%wABs(Xg%ZFn@iX!=$Bp@$h7i!MrrcJy zE9LH=3mxUeDTs@6EbASco=y~BzTAwwda}-}5aFj(Z9Y%t-f*ae+}6|>Q*uMn&J~XT zqn}rE!8SkcMHex}D_b9)-PPsi#xCW=HVlR5+I5iC$Rpxg1ONRN$6!@@7_%YUu1zfj zBlmOKn!ZOSTb7=(1pHl@598R$a^=Wp)4@F_IrK z8Dp4nwp`;nxS;*B%i-KHmSANmf2&BN>w5x!9{P#N3If|nC3^G=HH$zl(;=T`O?7pB ziHwQ?!=b2cR;EC8pPrOm0VgExG zeKIEUWd{Vl;KNZbzE<5u`iY(VjOdIGTQnk zHWP6`g$ZB?d>BY5vRM$_M|%OQE2a4H>gPQu8!!>VHyX(rj4WxZ|OqAMJ$Y z(Uaoxk$b90YMA{|e%Ai16Hk#t(f222Q18Rz>IzWF>!=cEy^Z?}HZ+L`kKG>c`m3hZ zNn0L@;SUS*ss>zuZeDq1ZXC52>tLKliPXinW76r)X14(UCK2R9$Z8 zqGR_lv_E)1qO!3G&{igFQsy2wG~)Y9zQ-cnYCS=eP0E6$;9EHG7SXmfM%Ef^xrcK?IGP12WzAB^s8e2WF<#w4cv&!dWm-bT&s)=*^V6ER;hLPFqh@-2t{uSH)4YO2@FNc(`59kELS1|w zu$3#GKYKj$k!~@&GOO8Q(5$Sj8X*stXvna!!|#f5467Kv@yyKfrZMbN+Zm=)Yuwak z{aeWRmsj}ngD?bGnbC$^S`p7*!blhpv3;4h(C}Y_U2`Px?W&wvtrgYZWjIqwZi2U6~qg-e+g!#Zlh3?e!_UV*))QIeFnqRYRsa zmGk>|;^_My~u0`$X!Wqz3tV|_AJ!_DnMduA+ zcd4gJ6r{4RLlGqlp)L|wNYJ|&KOg4iFRt689wtHE?HLxBTMh4beIGqAg|HFym+tVt z#gu>%iy-gFL!@bBWtD5M63rHBAx%$AkSMe|5N~d6eJ^@d3NKv}5#f;0g^Qq-*#Pv2 zh}cEPK!?!zSGjt+VIBrh#m&%BQN0&ZN{!o`SJTd?-fk6E3lXm80Xc3TmBs(L(=ODroVi`Fw>Yr#Izjvvm zMEB-$C3lF?PN1i63I%D>KuU4E!_n;`Pw^SCTyv@x05`r}b&{NG&kj%{x;*bs6vpAy zf)q4ctm0oJ;C~H&76FG}1~FS!fB5!k^vHTCiMpj>m%h7wqhh3GM;)B=rG9wVSFRyw*QeG@k@R!(o3I z;lAh?3Unukn<8R!_U3(kaTyd;X!E#StRpKcOB1VU<3V+bHXrd}bFSLVx59Wkx&da*yRWH{); zpI?x_iKT%?MbR5uUTzi7>>MJV%*i`dyqp>Hif`UpU|S|D(8qdf5FN)%HY|l+2$xOc zOQlE#9bZ%dGZ^rlrY4~j*EtC2Ua6~>nA2C_1o~F6v3JL6r0{|76jZlot(PWCHV!w1 z8r*gRx7p`01IaRM?$Kj6Nx!%}>>9yIsXfiI%`#dZGXO0PL7ow+c2<-WlLcoZbGG}H zt_PyrwsYpxO2vw#49@q=EbsfL4xJtWINA07DjeVSm>u{L^yuib!3uieN(dNwny7D* zT$|t-BpY?Nq4V#Lm!D5DfJ>D1InOWT^v^n>Q7Ub_e1a47j~Z{wUAoAf-20;a*L(V2 z-XBkAU>umb{4TzDNc#1jBbi~z`eqYIB$Vh|ND>bcEQSzL*7avfxrp7!@AL+jG7LP- zk)h)suW)AVQ$(CvlBuL$)E(m2kbhU_TTMH0S$>7+y)Hg#)YS%Qo2ZcZrJX_YOs!jh znp*{%SiiuY(Q-)!A_e$yA5@Pu$ZpQCG-o*IhIz?%+}tjAg!woC8^r6$lm=$Dz3tHA zxlsl{{hFS$hRzM1QR_vKaGq|3Na3hTp zr(rb7F!En7XhpE3Y=TPd)gB#hWRu~f4X91D4cAeRd;3oarRMA9U*wdOETRyr&6ahB zP^Z3Wzw9;;gbLt|S26bJP9yLVUKp9u^k`{6|5gyzEY=3IS)vHb|Ky#qW8>MpCA9oCVwA3DdYi4Dz?;Q5Xl}1# z;8kF?%A4*i0{NW4B;_bTl+?D$wp?#o5?E!Wc$Es6&z^-)%q+9_cw_vJsW=-zQ)3XV zMQz$*8cwC-fTBs5D(yAE{v!q5?UrojfbNnL9p@;`+MAxXXl`#y+?Ts?`)y}XAY8xy z&fe4}e=)#8p5l_udEJ63{#B)7nMJe>=t+-aHks}lC~15X!YUHY40&;k|CBV?r(%?h zr-;P&F#j~0?-wTS(G_8|Os%wTw-gGj zfmqO!;zo5_N_Kc)Kvr3DyneLGr3#k9+E$`4j`?8Zjn>J&rvl^s2#M#mu;F@3iYXY? zc1ax1T3qS5P&PT+uTZc_xam{&B~3M~6AK~WfragI19judeOWK+!5v5y`$L=ElNP@|=0v8FFYxfFPEkDr6EIyy;l|M(ht}DLY z&r4MPr8=meVCp!U*MnLB{4{-=Q02MFi8A`F>5%GUxlIxD)(D3p=bb&xOP3$}X3STI zCM7J27V27IdTNxWAmpYYzMdGryl@^J~%3T&~eYCKy&9m|oja7Ro2y*zdUmFRef2_Q(v12Gr|L-xzgS|{6> z6ms{pu(yvWY(2H-vI=l@+e?sh0&h$DDFS^hGm% z;dw4yn_RSi7*ZY3Uu$LG^p4da^%du6rLZ2+LMmUdS(-JfEbG4>w5IO`nLmfl(!nSu z6I5(B=3rp(V^Fo+7nP_DMCY!r=VyX@Fe0EutcCyd3+6U))+6lv=8d-)83$nAKqFQP z5x^yvqxOUN!8>&9vPgGK4thv-*@grmD{py`rhR?`8RNyR*3{i8*t-1i&_i@6kK}Yy zma`$Duyo#8VQd3rwS8htn&*j|cP1^x7_J|E-0i#iYRjAl3^3hAj;6{Nte-p1)&@%Y zxs4YqG(lrGJL`fUJ@$^>>&mDD+BtuP?P}MMjedsVbE5);+s;mQ-Eu-e)6mvZyt(VB zMggZNac;eBXEEk)U$b2oj+4^UPrpH*@>5r{Qz0G=2WJm&^(V*CYhHWqNHGuRc(N`L zpoSvccYb~h^)r(XVY`E>JLtE-B29C~a}WShjL9TrKC<6RSPdUuD$h2oPPc@SKi>y6 zW(FWE+39H(A;>~R(rdZsblRn1*F!{;(^0zu%^jz}0i#LX-;2w8R-*7BV9(%&JcHi?Rf3&X(x|yK`>u*++Jkf9wj}JGW@8YOfv@ zyDt(Ua@}P%7Q&R4rf-*LZf8Y{CxRY%i;f@9?9cZ0Eu8v#voN&?rZrs!Z))s44?B}( zOglBiX8gS7P`BEh zAfe@>TSGpM7*E!5g|qi~Fk0@7y7~7?+rK3X7canysOh;<84LNYQCazGfJ3;v)Uzmi z=||1l4(4U*)<%=S*&}&)HJfEVHC*D`_XCjhchK|nX%D`$yq6VHzpT1EiB{9Wz*&XX zqhzxCsR01V8@^&N11R8lK-m>+JIOlccD`B9*L0~;rKsdG9ALaEqqDi)JRXBj-S-kB zpgsr=P#YiW-v*#}*I6t#p9Pm_p(6kq?4j-3tfz%7w;eaH798)*o>GvvOJ%)4Ev+zP z8um})$59h(G(CgP4U@)VHblH`n#!g+-bGBOm?b1{jPlLRF1rUt`tv6XAk^B4noR~K zjGqH;5CCOE`5+MQrjz5X;7rH*;nd( z`~Fkv>=sKs=hO0O4E*7@7Kbb@*Y|SK&z^hxR2@H$WVz{x`C>9v{2{>6`G7&$>3RZU4&?cPkU0|pbp^p0E+04+cS}KG0wgpYJck`(CQM7fkpX9_JG*%IfP)JShf>cH(YC&b8ONQ=TNVf+XYn6_`3lqo$29c;62&oLx<-ZxVE+5^8GTx4_#4*L$m)~DOvTO@Mpd3nk4tB{PX&P`Y{62Zl2gAH0Z z-B>sgMkn7fD3{{O6GllcuTRMSuhRRM8AP;u7eC&g5_<^bK$S~5h z*FM>ZiK%AU-q4=hxrI$AB!!cbZ9;C*&Q8+tBQ(6ic_38HK+KJo1Eos2SEb3g=pp$` zjE8SDhq;+i0wfDm-OBqOvDh`>O&*f4h!!1YFT!%m3Bl?zIiY5-&pbVoZdaf$a&swo zYr!}=>PGU;%Bq-X@Vve9tyB35X0YcFVPVJN4$i`3$1Wpthw-<*oJKreV!Kc(M+;Y) zsOFHWH#Z-SH0$QnrUjK`XP4~v^vu_IRLgYtd0K(*n$Vx6bGestS#882H0VrshiCNI z+`#9YPgmQ*?oJmpXecn5JwJWhYPQ|>g9+DFesXaP)-eB_ZNM1*qB&9v=dRF&`SR`U zZcd8EkwkiiwP;B7`c_jaR31q8BXB;&K)1bOX}J2vV&Wp+c{YIS70a@XKgDyGCz}p+j7xQn+cCN8;&c z=2S9KK2DaXsg+)K5xih`TdP&~3#=%@!^7KiFiYo)gAuXUxHJyABpiLqW?ZRlVzjz< zN2SzUC|{`DMyHlE|JL?S#nzRJ?FORlYLjrJ)(aHRY?OR)Fhv>f2fy@6+h8Ed3hnDI z*u(E?>S1Z%R$GIVP0n`Hnw}w);b-v`MwwsI_(F6S;BeJ3j^VEPL%D5Qo{sG5?fci{ z#BFZ?A&ZSwk5@Kq3qqK*DAdz=&a*Br2`~^g%CcZ$Ab#ayzk-iNzkuMwTVdveYJ&|) z@}@#0t4p`0r02L|B@FYETZ1C^2wUZ)C_y>B(N&K7a@PFqs`8q^0om$A`_;=I{;1^O zY8(w{?v#Rvd?z&WCByLbRCkPUgt1Rg*PwWI*X)bq@o{0v>aH8PGXgX`yzq@h;phtH z#jLyaFhmuMt(6TOa$7{cwEl0>nJ`SzAczz> ztg30_-rv}K_?$mEbAwmd@ro^tQ#eUpv-|)qxdH{J@p&e?M(o=)0XZU{)3q0UOAX4vC)5x-YYjM{$cS4APfZN7c!EGRZNr+;YrQM-E(Kl7`qOMzllIYwKn z8gi#RF2}WOvVth}F>f<;N;&pN$q%SdIP!#iuMr&u6^ot}hLgDpgibax5UJWUtQh8^ z@|g6W+DWa7&XB%3y=5``v00#0M0BWHGwAiB;%{1F|L(s3<(reBuT2A}BYWj&(7nTp z4F;R}DbeAZ-p&BG6x%={rb z>L>5O`6;5W4pmK7=OYZLt5_*S9mzZ)y)BPh%wop9Z+|Nq{CZXX^;fW<7hF&fGthm; z9d%V2Z+Dk&@nUrVjp^(tYBg0~SF662m(buy9&23z{jn**<4a#*FenJ1PJO=^DmtIm z<$%+7B)jOR9?Ujq`6g1UlCY>aX5iHP8f^Hdzaj~PQy{@)R)lwTM`(GY2lhqI8%%7| ztB2Jrxu&cUU{Y~H34mShPsKDcFx+kK-mEa^^4*pvV;Hgh3iSV%F^7TzgJZxz$|2l` z2TNA$kET3iJn8HdxYb@D2NHerSR1?D})zC~CFRTQQCNr#C>4)6<{lS7KtPB+xeQMm*$h+o2g#TC zLCw?AX*7~}!(eRDdc8piAl;*9R|G84hJji44qicru4KA zsxw+^9epOBm$$diTs1N_HX*C;OndvJ?Lw{&*L=D7Un;==GCTjre?1Dqc|w>?+^6%y z-WHdvPT$h1oo3Le-A0;MoCd>ZT4wmTnJqV!T^!I867m9D4<)_p@wN7!TjMx$h{s zJKv2>jF3WjT6NLGW}?rT;n%s7$8HolB-cnU;`xK=RsH!(Cwq*Ok8~4ZG1oRGcE{P5 zAEm|~(&ZAhM6G*nq!Kwdd+}`vQ7nyLB?qsqtpQG$|4xuJ!m?kep)Oqx&s`J@|N4}F z6b&6cZ_7qD&~TI+Tv~Fy=4}Nt{2@Mv+d?>EBNy+&x1uDSr5vdwyF}2QVE$>gJU$UI zxm&B-Day_KC7r5zG)N0LQi`5X)J313j_=li`FVWru61hI^Gg$zC0g}6C~rQ#gDy?G z%lO~U^N1H&nYMMWwK+b%XO8W5{J#np|72Uh1z#pnR;cPAb1>S2qc|%aMg_7l+HTIX zR&=`YzkTyfIyt$3jyHh%G{z`daGgi7+=~b%bPO z52A7CYKRW+ru|iv{jb3d56a8s^*7Z*m;du3X zv&4V>*}q+Y%>#@c+}A<6|L7`+~?>dzY!;M;$;9vS+HW*8ilKlrtUzs4cWPAg(w$Q$;$X2x%e`Po%k?H z*h!_}@rbsElbFcMoUiff&O_!0^^P*dwFj1;dq-onBFha#MIt}K%h9>8O~B*QpY>wZ{@klQ-Xp~^oI7J$B7F}C8IJeCP+@LBt+m;WaA7}%4NgNeEtk5@=@U$oS)VcKHEkN*!ti7HxNkDI;wiEq=qla!CO-E(F{I(} zN-Bl+cU%??yNhlU2vQ9GxkchbnJ(536)M!ri#T4zlXIci#6=g6;Vwj)&z;q545QN; zh{i^|vqdyuUcl6-Maqe!>m)T>Utf=&*=wwdLn&3SyFSZ8c*EiTS(sQCvURN6@yioRwyK@Nkp?T?mc8fovvHHh;0!h$C5KHo0WXE z`EuGZ;y?^-(Xn39l`fKMPGOOxd8@TRMG^*oT6!-5D}AS(=)OS2obh};D4^8Kgk_`UwggaV8bn? zM(x_=#<57(5ATeMQJ|BmllW|GDi_i*uz^5}$!MfMu?}{l(zs`s;HkEFtLje3t-)pD z*|IAXn0IfgQ>hz%adlj+9#6gdCq9R#Mg6<`sPhG#;9m61o!0472Cs+c4oyiZ*W0w>WYOABDA`PGJ&$ED5#M_#_}cET1R?RGKI?JmMeMt zwC>LZDa|Z*mF8s*H3s7t3>c?{jx!^97-iqzH;Gs*o_~R}lrB{LYKa0(C@>IoY)BbC zO4+a%P=G>^C&-u6MdPDWryUsT|NE8_(3(yvMoP%dTk%O6fckR>)k>w2PzqJX zyJh$9zOy4P3z|$n1FpzCQjcm-ZkEv?Q@0C7woX>?+!??CCCZJCxtne*TH$5aB1y$! z#lnfoWQ&Z^iB(w4mWUEQJktWqMx|@YAF`+4O){OT@*_T21gX5{c*4P-Q+u92wz@e% zKG-Y6lyCR?c_JeQ=>lbz0A0{zeFmE zoG08bPU!RH*MF!Qv&|OAp+}E8Sul1tn<3%X#7hoR15(_9)|al4{soP=2|tut?(t(T zTb@7T>>Y-+N%fl5R9cF3c-V5+W^2A-;nTS17__P?ZjoGaFvvZ$)y6opGFocyI_o#F z=u@eA4mO_7ryK#D*P>CY3e@bBlsQ`AI5akI^_Tgq6 zILUY?KtUd@giX$mO)e%cWyO!PK{DDJ*&Z7O883zahVPKVW_gyG(Mloih}fSo*E2P2 zbDxjskY2{L_~eh;=SBNb1?uZbCrh=RPtI^~tOoZTsCW*vOCaqp2ZrtUiEm;pCFwJA zh?DWGMvz{Vcj?wlnO?{tKS4C$SeKA{`zw@zc^TdpXL)$c8=B9C;RJzkab`iJR!{LU@yzEaln zPHPX#whWj14A*rgQ-+^*PqXw>9!A^+-bpH6f}?OfS3 zbC0-EoUQ~l(7~|$bWWbz0ARsjELMx!&AEzTV6M7EuRyaX07Y7GCtLBcyn9YR;GXLq zeqt&9J4>@n(}(A=ZLH(XP*4I%D7+IvSADV}--DrFr)V@yF~t3e*IiG_+l$Lr^ol+_ zy>o`D-CKRO+J}MnzY1}~RKUk12=pI51^JsPt>HE@_7}Pu$)_A_?~$JjUBs7v`GIn) zJxIZ&0_EK8#;SR&C70H?P>6B=EPUPW_q-IzanSjnmE;q%h8#hfAnHbs~Ee!maPGMe(m3(kCK z`cM(2uKP*X8@uHA)~AJf7tvFv*oRnZem+d?E3}*Ih#&iG`d+FnAvgH;2O2XVoRcWlJU|xnWG~<_%x-CA3WX2_B16i95)hP?k%K7I@|7(BspJA zC!1qXj!1o|sa+E>0vP|QtYC;d%WhnK7b|`N_lP(XI{gdtS3RfXs4b&It@Dz2h#kF7 zvXDgN)M`*NPhKZOp+45ncfFbS@*#EvSX?|(_^KVlc=JUCX>Q@=hO)!9cVS(Pe7r~Tyd4CUL zx$tlPOtK;c204Lx1w}la%FBhGOxTAyp3LPu)YT2t!*a7xOq@k@$N) z-JH`~V{P_FGh71*+3zc8HvUDk*xO~BjHh9Nn|J(QV98Fv-YfcBp6<=vYNDcYf&D_22-6~R_<;! z-%F}?Z!g7Ix_mp^89N=G&vL9F`xv2BV-`&?iv*drYAEprnlGr0ps-K8K&z&j5}}KoBWS*snWCjJJ$Yr+NP~+&2?4HMt^u>?i(par9 zFo-h~aJ3pUd+1klIZBA<_ozff4#)fyG&7C2fte4kn-|UFDbXNJXp{LyN4Y%d=EPQK z;X;@q@8fNIA@|e*zArXF2w{!$(Rr7l+2i_pT4y4N8wC|LORD6Eiqk|^)PGH>J@$=3 z3}GMS^Kug(l_<Y9?7XDJ8W=84lx4Xyr% zoMMBSym6zAE*;_vw{+6RQ*%;dU$dE75eue$sm%a%^?JH6P~SQxN+_-r4CS_L>%g}m z_vZ|g1)ar!UR+fv`^T&d$qn$DOIS8C^)&N7PTDr%UU&hU8i`j2&$At}py zE2RFhGdblf}=(!?+(7M?gIJExUQ}hxe47t`82qoE8D`PZ z$#O?j6=2^Qyg7n=8$)ZRZ*!C5*wYvu2#d_JeMXg zmS%FPoKCYbH`(D?swG?ES_tT#2P9Ghy7Ecmyef-KTF;sXW# z#!2Ug-dzS(&c~2DLY*{}18FTTF*@Eh-jGLP#GIb`od^yky3aGI&2H(gvuDwBOwx~l zcw7g|HMLScg+trbF^Hh0Sc4qMoiJ&n-5z!Y@?808>%O!l)9z`zo$losao(C5`S1Df z0eE`Iw2;2O*P68=3hvFyTse3A@sd#bo0r4L#jiLzJoRjf69YUR+x2X0ByEqt?Av%gq3= z9`N4IE=Px?`|sY85JV+3;5Hl#WtXx;+Fko8P%Fu&bwwPNu$V5;=yki&v=nMmGbt#S z-``!97g--IIMVii)T%9MdsG*#mRhWFeeO`#$TR}ZFhyrRcgfRJywZleKJ?+$HfR18 z&kTPLr2J7;`)+d2^obI-!$-ESZn2*A#1j)qCVE&crRHywIm~?FECjMdF_bhx_5(*; zBFSE+uy>RUO(m~D@R39RH_ZAwX!#WuKpoY;%;58=TW<8q(3Y1{zqA~Da)qoE?xuTg zzhzaJo;7p(^eGM{PF|V_Wm@n>MiDR({eZ^?(&a!uKWW0Ee3)vx*QY`b4qh3M3Fo4{ zjLuJBZBsuIFD0z*F0kX-58qBUHwlwSB`=KKE;$2;dPlmn{xC(|mp;uG(P3c}fw6RQ zU|9FOJgH;#mqS24&g+7fafeXl#ZVgajR$Hi(W^7l8eHl%y1WDI3_vBWdRLGJs<Ij6M5=Nvs+g$6$C%Ok6GVU(t?)?`x5*yc zXrq=biG(;uI}TDYv=0z`9P&5ix?ROkVL!1sJ2sa?PUM|WvxfUq++vE8j;uc4Z%>MB zS5~6bWEv_I$Vc?N<|44S-=zgWJj|dPpkmgSAB@MLnJu1FJZ`yMrMp_FZ%_!W<@OlN zEpSu5r%<3=fphJew>}dm;d6J7<+p{gusih*4>xqQ@4FZW`|kL4kX%OzuS_?@qX(_hk^C4!uwQcX@ZSa?-$`= zk(h)I2z<$rkc1m;Vu6uurxMCo82S?-!8*vhm1hJtfYOGQ2()-RAAd9?p|c0%93l*Y z3?D*5cX*~3my!Iu!`{sB$|E_ItfRl>$-8xbNJ77;gJc9DcS2Eu%qBQCIB604O5a2h zDe*obzj~iqa>rs(nRB1(w>eLQ1nsvT!1ZAO;AF{v|R4U#56S1m&8#6<5;HD zg7k3^37v4+sd(k^h16FLXs;E1sO{0dZ%E*>NLZVLpXtAPZWGXCCv(Pgioj#||-m$`%}!6y0(Ej0r!lwMD8(HI&+0I~Yu{T|A<%yyrJ_aiSOfoousugfGaX{+_$JLaoY_?)?81ch+%HylekQYC&p2r6hI{luiYu z8$kpFDUp&=5D<`N=~6l*R2oDYq#IefyIHz+=~`fkXFTV8>v_)k{$A&=-+%LB24!CYG0_Pm+w7f9-=^^uCl{Q3CYbeoSv8`ayr<|T2#!=+@({N|)HOMJbV z_=kz^UhNBgD3>3VoSU3ETr5PL{il;P9^d<;!B(cQ-=H^T-Zo`b=H?k zcJ7)yD^N0{*CKjF>O$|kc3XySB+uQV`rue^Gcap7pYBdGoUS`b)7bHz=U#c=&UD_F z*cr#p)ZrWP0x!Z#c42zFXo>ykF00D`*<9kx@^&d*2ovy zJQHf0Zh`=-=_MppF>hb51|jR5CWX&$$}+1E@eyc0usVJj zU#vM6n4WI0G~7m_$$AX~ejYq?>n0tN`W10nYaFNkszWfJY+=oNHWgPyNjS30)8GjA z1a^TTtZ;IY4mfMlXa^j4=@5Fc_c{UZLMj0;E^2OYL9ji$libs4g90efC!*dCYiVm! z+DV>`4xpK=vWvOSVkd2*rfQT;>5IFzy&IMBae;6#W(|2WC=j7u% zK2V?+T?hpt;xe7#yJ2)Pp+8LqEdZw_Ib;*Lra3+fV{gF*E<{P+P~x0d;TPpbiJB$*vXk0$lx!a9*X@n<;VhOIB;p0Rl{6Ikn~r z4r9kPmHU(+!o(!nDx7TY`Cv=dI2tHc1;!%wG zV)LG7(LQv*hyX_P?1|J$){usX^LAZs<&ywb@jO&(8|BzSutx6A)`YqxhuS{)`r9?` zBZT&1^{dv8j}3y{?QGjn5vZmwmpcE%wEjaL_gv8%+IFrOV{P^bTZeUhY{fwDn%b=+ z+*+WVf$|$w;Y|0{!H!pWGY|TQ=gzrDRc8INA$`0AHNInHGeUQBSZ_@2g+4?^sV@dg6&_TwB(nfD6xPX$l z))|%F93h)Mop7mcEc}-y6FyQ{(4qMU9k&m%NT(X#E%Y)Tz6^;*)Ka)chJR z$BjG}24p?cS{Ij+WJ00-vPuUE21*O!?_XD*;I@Np!6*J4f-1ytY503;A}jIZotiwq zzd|<7z06V)2Bv*LvBJ>#O-x$uO?>D6IT0@atES)(nhIlSmcjkE2IyC=FCtQI~ z9A_E1N%lN@@jztQUz;{viIzK}Ooo=f1*)gJlwbi%0t7j$&(8IodxqOkqo2uzv~)Q> z$jz#ioQ+Au-JcMpk?8(oy#BjE>;fPx(4E8*{6C^6QvyKV@#6}J{JBZa|Cyfu@yLAg zk^zr4G0$`AE98$q@b_o@eXl7Qkp4G|IOx&+mp}6FuJ8Aw|GZ(U@#{B-Z}h+Uy+7ff zcmK`y|EF_8Crv*0l`1PMzwa|uiMtzlMefk|Mp~4US(-$%DS#3-Y5Y4m^(P4D*J0oeTxB0M z2pPXvyF9s!+fZ+^^}*+^nMYKK+a(1C1SqB?>pQwhOQ(ArZpbPIN5p>~AB}W# zwBhXrovFN7bJ!nYn=E%PTGrkf1r)C6=fZ5qAz{G?{3R2pSJ)O1(c140KwEiIZgM|Y z^Y!!7moIy_$FFoUIC>GQ)%?MJGh27H&ubL`Hjk@MSXDNdMr6n8s)Ui@wK`KeARGW|@G>33DP`B}EU?BgfbOX=}U4VMh$z~oL z9Ncd%RjtXyYnJk@>2umb+_C6O{v?e@wBA2N_sG7Acq>EoZr3FaXeC^4TCqI$lm7mX zZXbz4l;o>Vai`38?{=lZfiUpwl1n$eYPm0|dnqSL947CyIm1F8MUJf3*GXr(6Epg> zdm{Ql+h2hh0wZi)l*B9+erMXB-z`%^Y@h{2Jdg|xmWufZnvj9(_bHDUebK6s|?#j9TxZq#{DxZOfJkP<6gcvCJqjqzu9i!K`?8)-s zSzRT_GRi~H`clt;?l|!LU`OlVP*D_sD%Z{FIA_9GGYq-bF3zK4cpB}RQtDp&<}6i4B+XW`V1I2 z?ikH{nXm0rgxm+HK$iSdb)e(a0)LCUFoGL!4WfMU_G>di$e%!+hgs*3Puy_$ng)c> zA9CI8qSv|Hdq{Xdoh79E;tF+#>$5)j@#3Y`L7Z2n=j_y^79=(fHPt1gb_`4EpTP?O zYMtkzOO@2jbxP9ZmOB*~V{hLc5r~eqhSFZWJI7@qo!W|a-qCmNxDg?`9=(d1cuBi( z?JpC&=`{e7kHb@;2>MN2|6?YZzy&x(4zKgmc+Ud8D?KAJ!I1Fnp{yrv&#;JaT&g9Y z5pMv(J;7|A@TZ}m`KAla*}l~jCbV&?%*x`li#dvBzgR6KJM+TK&d#plsWIP8gXHav zG3_{RXZ`181x+oSPqBy!^xeq@0F_S*C};K7>u0co%PQ5w^a2bnU`Zm{M&A)fy^3f+ zcN4FK;Vwc5OnxON-3NYJP_*#hr|96sZfH=|zC0{_ufC`!L+6j8l_r@8e5%L1?R(*@ zVBR}CcOlIzytp-ZCV~Kiq^R*oi;KR&H~p-x7l#+eI z^4N{kR<;9+PpdH=PcwQ=Y8uo2^#&7RLnmLweP#a3Pa~T&<>rH`i833nTluwS<^2R( z;uxFdi?>%@I`SsVi_j2}eM0IY&y@^^47n_g zQuXYN0G~mm96F!!Rkz+yRlN5&n7Xcmgl=G*m?Q9=EDssuhILHh3kHVy&;iA$t`GwV zjr5$@Wse%yev|XS_b7PQ>nI&D+2Dl6OY?7}c2ti|R(1GOnmS{$P0J{d@F~QMdLXf< zbfd!FJl3}19s@&;tS14R70D6dV8#OU2ds8%|0EUkysG|d4ZVK>#*v189 zA-b5?Ta8&~rm_^kehDa5_k4q{P2iP#n`Ih@@L%%#2l7c%(indPx3NBeV-vRdP+c1C zwG?~%Qc)^_yYc~y)w~>Nef}BKMhY}>#VWn3u({!a-84MytUJS=E~U?S*U zHkHQ&jsx}W#%n^iK9g=`ni3LzKz8oxyK%OM8xo$zs?!@D6nnoZ7Az!0S45I(sW5y| zV{m0%+Bmh}fsdPTp4^#XBwnoXINksJR4N!hLYkMef@bvzea7}^8J>_IJ+2dw*>z~~ z^#F3l&w=(-8ee}1jhF8w^A-xIA{^G~76LrA4aj$!({qy+DnUzUGCJ~g5zoj1(GX zV=UgS?V63}Ow-RFX56@^s^tIT9lK7k_ehbpc2^vmwMfZRrRT-EAMXB25>(sEJ!!Qn zj6#m)Dj~X!8D}^Ec-a701h5D*QEQvhP|2P{=}aqR$sC0==%a#@Z8Tn72AyN(v?g;X zv6|uV%*RnoL+fq$fJGG@;#TYQY-i0-D=%P7Vx{V{d*@ZSub*gMGFySG)b^~9Ti!v45Y!43Re!upuN{@2Kfmi zIr>jN-r}&l83Tx=8cys558N7s;BEcwC?K*LLa3Y_Zn6Vlve4R6nO|!J8o_wa(BmlV z3AqczZR-S!RjJ3IX}>IdgiN#4`p+PRD{?Pe;j2m?Gw+C-PS3U7sn+hBR}*(r5`L(+@A9!e<6%_ zHt+jNmF&fs;*BgbgU2%YZv(uL#N+BbGn!x3ad4i&4}YnKQZrgxP?Kj!98>tk;t zVyMV!pJAp9iMBjc^_~7bj*#)qu7``|Uaz?G&$x=$Hb52BF%3t>IutuKV7U96^ zb<#oZx*cHLN%?q>=4jDDRq^utR84uhjAm{_%^ry3M$=Y9562B@*lp`E4Gn@(fpVkd za6|PukoGFxpyZWLA<+pqp7R9Si4!syR{~_GReR8ah0b|Dt-67*jQ~-)emgF%M0fhw zT%xw2^5?G{;Qid%ox0hZ1a5Hdymxbw+|3f|HygcE>!9hZZm;JCUkXDlkjtv0SNd7`a)+0|WZdm5_e6ht zEkEEL&%k9LGv8_Khb6o@MjA7MC1M;yH0I*^N;m4gM>rg1UN0=P{sY|cO1!uaJ(IX; zplq@G*QN!gCfLUxsU)sFO0($@dOO7l8coMde*Rb$uJJTrgh^wx>l3r;_Djz#Wbq5Y z(a#{5TO4yaxf*USrugc*LT7_4JBwcUmOc1W>K1d7P4Z}7nwtS&I(`rlxlH^ zVeG0o(tbH^JGozZmgZI>`fl!OIq=2!y}YGZUPZ3g)MJ&-WI$-o-fFV3e@nQwih_X# z8#?3MD86XTmCui))eGII)s=YMPFne-wxYmsA1%=nXV$GvE4MsbslX}~=e3jF+jddr zP;lK^Lp$lfP^;(@o1tnvXlEzhvRn0gF(t?7D+n=>fzH=6*CX2chZ6;87{A>)M!j5# zrIeoY#XUl4S(z$4W4mfO3lzW27YuWD3yMnuZ3 zV9_E$X3)8uI(Ok@k1MtMIU}9>KlBc(Gg~x^Q#=jsl&*0NU|2(TS%3oJD6h-uZ^OG5 z?c7Jq^%Uer=i^#Mxw3EMR=!f~Ks{*tw6nJ_mb*VNvfLm{D_rPJw_N#1Q6THXO6I=Z zYK(+w44WAfq$R&Y0H?5=NKM|HDW5jmQ?ocjMNk~;kQkV3=0Ag<3Dbo1eHpy)-BhSXGXSME$?4Xa}`e#qK!Eh`p$)o&OLiAmCqoRAK9Uw#3KZVSROL{1zf zjSgSV)@Z7xnU&t<_N7r>UFmhSE?et$CnaNFfCb>G>m1w_+Taqe1dw0(?Ja~hL`y(a z_NNsY@hkDV@roQPvXlop9zmlum%Ysy6Fz>Rr*`QoyZdC6 z=d)Z~CJwgUOG|Ih5crHT6W;v=*3-_feQ3n>$X|g|=00)gFY&eI>%7ApGe@|(*p7VH zYF%P$f~)j<;yAi`T#e*u=!MgX|2@YBGbpJpRKLHCo84{{1xQ+1pJTo$Yy88>pMhWE`DqOXN z_Vake18e1=6jKteWT;8*-Mvd)yPrn!(vM|T>)Ufen5r+zW37;b!Lv?GqOG0^A+yU0 z+Iet749xlCxUz}VcUllh+uKIhcLaRPAK8^JZS!?3jLE$av`xo*0E~#}b_Rw7&XLW< zZuHMFj4T1LzG~n-t=cii3TbXtWU|3rR8~G;%zICTud7OzycwuBeszRgbr$LX zkgo*f=<+&hLj0M;*qSy`(n|EoG|Rlf&Wg67 z2EuDo2AtZ*#Io+)(E^^L-fGf|(4;fXG{IEwM`J@HVyc>6jE!HY-c^224!XsuCi#)Q zhze|}U&ncvAb6qoW~}T(fAXizwz1`JxA9cpz~||^iWhju2BDv%Wn{vb8{fJ+@1#>L z&AZ|=1ne){kvjNAQUpHiK!)LCUtt*BUh+hHrq)g9)L)}v;NqRAtvMVbS|GRxa6OxL z+L^TCE*r02aI23TdCrw;EM?W&rO9^PzmA@WvV>UmVPGnjwIuHDe&kO!L6F@*m{KrK z1aqJQo;248@BW_eAe5eyL3(qv z)aqW6ss3Yl%)HC>nPS2euQcZpouj=8XBM>Cv+4DcrIq0iimvjyCL+5H4K;=+3=cE& zM4e5B!|MHyXLYT^TVOS#XO4r5E1kH~Cn*$xaw_n=ZglCIE9cv0CI(7dV?-Yakw^@e z5#3f@sTP z4V-rk+7{9Nb~}nd^OE-hI$yWN=AlVKj%Ut88K`>hUYXaYd!UTipgQXpvi?2K?gVY1 zPX@FN;&qWV=T=L1seHiV_d@#>{Wmt8ui)I)XQ-y>5?6N>7|q(~F`^>SwgufRlF@z_ z?z=Mv`cyoL9A&wqbMJO=5MhevN%Bi|Xv%!nP%%)$`6Xpdse z7eS7_rQV+dl>QllkSQs)eeYA@(4An|IYTIsnyyQVApb}@2M3!kz>KK3rAX42j6)c+%m^)b^jW zx2_Xmr>$5%YyD-D98P5Tm8HH$Z;SCe&9qxay(%ii095?18i~V8iyJYrY!4-qvQylY zxgz66RpDeBFzUs0xsZ4lPVi?Due6Yd-`&UihI9yJ<~0ehSxlb2**?buMl>}jxuFr& zClXEh_MQs=+Iw|Eb?{K0HwAenpx7MiUz9z__t}>pE>h)zRXq`diZ8cnhjJd79yF?F zxIH*{SRg{+XGV3sJ3auS+Gg*!Z|~Fk$ffvav$Ek)q<0Kd7DT*Kkd_N!uP!p=p*cJ; z;#zMSUMJ9v8a$5Ke~%|~!c=E;ghZqQK3}Ynacd1Eo#^G|QmhTvQiJU+d>U6URi-)X z0g|Xc_no7*|9x=h?9jJQx<|Au&G7D7$b2)?J!u{5+RgHx^~A|FJ7XI*0yM8OfI6_w z!^F}aG#!6`N@MDz5#!n{7_>kg;;n)W4ZX#aC&g*XTluYa$9*X&#~MX><|a*$0Kz}y z69X9;TOH42%2fy!yhzZ$ubJ$>o4D{n3T&28dBBz`N;^;Y>Kb^5u#S<~ul&~UwMfiv_4ljplpE!;s+fRz` Date: Sat, 5 Feb 2022 11:21:57 +0800 Subject: [PATCH 011/131] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 063d3464..4d87c5c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.1.0", + "version": "0.1.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 0ec5d7e13e0657a43e9aa88f62783433bece9a15 Mon Sep 17 00:00:00 2001 From: derek Date: Sat, 5 Feb 2022 12:04:01 +0800 Subject: [PATCH 012/131] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9D=83=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f15ca0d6..29d30447 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,4 @@ DevTools截图: ## 许可 -[MIT](./LICENSE) +[Apache-2.0](./LICENSE) From 8d84667caff79a6782648b350eeff07399648592 Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 15 Feb 2022 09:36:26 +0800 Subject: [PATCH 013/131] =?UTF-8?q?fix(growth):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=88=90=E9=95=BFapi=E6=9C=AA=E4=BC=A0=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/growth.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/growth.js b/src/growth.js index 373e1229..a3ce01b6 100644 --- a/src/growth.js +++ b/src/growth.js @@ -33,7 +33,7 @@ class Growth extends Api { return this.post("/growth_api/v1/check_in"); } - async getLotteriesLuckyUsers({ page_no = 1, page_size = 5 }) { + async getLotteriesLuckyUsers({ page_no = 1, page_size = 5 } = {}) { return this.post("/growth_api/v1/lottery_history/global_big", { data: { page_no: page_no, From 8bfa7784325f6702adf919c28a50bc9c893213d9 Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 15 Feb 2022 09:37:35 +0800 Subject: [PATCH 014/131] =?UTF-8?q?fix(seagold):=20=E6=B5=B7=E5=BA=95?= =?UTF-8?q?=E6=8E=98=E9=87=91=E9=83=A8=E5=88=86api=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=BC=80=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/seagold.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/seagold.js b/src/seagold.js index 284c71a2..2445974d 100644 --- a/src/seagold.js +++ b/src/seagold.js @@ -39,15 +39,15 @@ class Seagold extends Api { return this.get("/sea-gold/home/info"); } - async gameStart() { + async gameStart({ roleId = 3 } = {}) { return this.post("/sea-gold/game/start", { data: { - roleId: 3 + roleId } }); } - async gameOver() { + async gameOver({ isButton = 1 } = {}) { // const result = { // activity: "", // deep: 3, @@ -61,7 +61,7 @@ class Seagold extends Api { // }; return this.post("/sea-gold/game/over", { data: { - isButton: 1 + isButton } }); } From e42665c8d5f1ece4d72715ba16ca27f6295cbea6 Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 15 Feb 2022 09:38:05 +0800 Subject: [PATCH 015/131] =?UTF-8?q?test:=20=E6=B5=8B=E8=AF=95growth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test/test.js b/test/test.js index a1db4a41..d443dd64 100644 --- a/test/test.js +++ b/test/test.js @@ -5,7 +5,21 @@ const mockCookie = `juejin-cookie`; async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); - console.log(juejin.getUser()); + console.log(juejin.getUser().user_name); + + const growth = juejin.growth(); + + const luckyusersResult = await growth.getLotteriesLuckyUsers(); + if (luckyusersResult.count > 0) { + const no1LuckyUser = luckyusersResult.lotteries[0]; + const dipLuckyResult = await growth.dipLucky(no1LuckyUser.history_id); + console.log(dipLuckyResult); + if (dipLuckyResult.has_dip) { + console.log(`今天你已经沾过喜气,明天再来吧!`); + } else { + console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`); + } + } } run(); From 728a06d8c73eb80c7029a6996a1b39e17ddc9dc9 Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 15 Feb 2022 09:38:53 +0800 Subject: [PATCH 016/131] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 29d30447..f1231145 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,26 @@ async function run() { const growth = juejin.growth(); - await growth.checkIn(); // 签到 - // await growth.getCurrentPoint(); // 获取当前矿石数 - // await growth.getLotteryConfig(); // 获取抽奖配置 - // await growth.drawLottery(); // 抽奖 - // await growth.getLotteriesLuckyUsers(); // 获取抽奖幸运用户 - // await growth.getMyLucky(); // 获取我的幸运值 - // await growth.dipLucky(); // 沾喜气 + // 签到 + await growth.checkIn(); + + // 获取当前矿石数 + // await growth.getCurrentPoint(); + + // 获取抽奖配置 + // await growth.getLotteryConfig(); + + // 抽奖 + // await growth.drawLottery(); + + // 获取抽奖幸运用户 + // await growth.getLotteriesLuckyUsers({ page_no = 1, page_size = 5 }); // => { lotteries: [{ lottery_history_id }, ...] } + + // 获取我的幸运值 + // await growth.getMyLucky(); + + // 沾喜气 + // await growth.dipLucky(lottery_history_id); // => { has_dip, dip_value, total_value, dip_action } await juejin.logout(); } From 187f0dec26a2b53ab6cb1ee63c8eb1fdbdfd29f9 Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 15 Feb 2022 09:39:38 +0800 Subject: [PATCH 017/131] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0package.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4d87c5c5..37212a70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.1.1", + "version": "0.1.2", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 455503e410cfee82ca6af94f82692923e2e4c374 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 2 Mar 2022 11:26:21 +0800 Subject: [PATCH 018/131] =?UTF-8?q?feat:=20=E6=88=90=E9=95=BFAPI=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=AD=BE=E5=88=B0=E5=A4=A9=E6=95=B0,=20=E4=BB=8A?= =?UTF-8?q?=E6=97=A5=E7=AD=BE=E5=88=B0=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ package.json | 2 +- src/growth.js | 45 +++++++++++++++++++++++++++++++++++++++++++-- test/test.js | 8 +++++++- 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f1231145..76dd2e0b 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,12 @@ async function run() { // 获取当前矿石数 // await growth.getCurrentPoint(); + // 获取统计签到天数 + // await growth.getCounts(); + + // 获取今日签到状态 + // await growth.getTodayStatus(); + // 获取抽奖配置 // await growth.getLotteryConfig(); diff --git a/package.json b/package.json index 37212a70..57fa3166 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.1.2", + "version": "0.1.3", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", diff --git a/src/growth.js b/src/growth.js index a3ce01b6..cbd35853 100644 --- a/src/growth.js +++ b/src/growth.js @@ -17,14 +17,55 @@ class Growth extends Api { } } - async getLotteryConfig() { - return this.get("/growth_api/v1/lottery_config/get"); + /** + * 获取统计签到天数 + * @returns {Promise<*>} + * { + * cont_count 连续签到天数 + * sum_count 累计签到天数 + * } + */ + async getCounts() { + return this.get("/growth_api/v1/get_counts"); } + /** + * 获取当前矿石数 + * @returns {Promise<*>} + * number 当前矿石数 + */ async getCurrentPoint() { return this.get("/growth_api/v1/get_cur_point"); } + /** + * 获取今日签到状态 + * @returns {Promise<*>} + * boolean 是否签到 + */ + async getTodayStatus() { + return this.get("/growth_api/v1/get_today_status"); + } + + /** + * 获取月签到日历 + * @returns {Promise<*>} + * [ + * { + * date: timestamp(格式1646150400) + * point: number增加矿石数 + * status: enum(1 今日, 4 未签到, 3 已签到) + * } + * ] + */ + async getByMonth() { + return this.get("/growth_api/v1/get_by_month"); + } + + async getLotteryConfig() { + return this.get("/growth_api/v1/lottery_config/get"); + } + async drawLottery() { return this.post("/growth_api/v1/lottery/draw"); } diff --git a/test/test.js b/test/test.js index d443dd64..05f547d1 100644 --- a/test/test.js +++ b/test/test.js @@ -1,6 +1,6 @@ const JuejinHelper = require('..'); -const mockCookie = `juejin-cookie`; +const mockCookie = `juejin-cookies`; async function run() { const juejin = new JuejinHelper(); @@ -9,6 +9,12 @@ async function run() { const growth = juejin.growth(); + const status = await growth.getTodayStatus(); + console.log(`签到状态: ${status}`); + + const counts = await growth.getCounts(); + console.log(`连续签到天数 ${counts.cont_count}, 累计签到天数${counts.sum_count}`); + const luckyusersResult = await growth.getLotteriesLuckyUsers(); if (luckyusersResult.count > 0) { const no1LuckyUser = luckyusersResult.lotteries[0]; From 437ccc352a5a49a9c9322d9fb395630778bff728 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 16 Mar 2022 17:23:40 +0800 Subject: [PATCH 019/131] =?UTF-8?q?feat(growth):=20=E6=88=90=E9=95=BFAPI?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0aid&uuid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/growth.js | 4 ++++ src/juejin-helper.js | 10 ++++++++++ src/utils/parse-cookietokens.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 src/utils/parse-cookietokens.js diff --git a/src/growth.js b/src/growth.js index cbd35853..f118ee84 100644 --- a/src/growth.js +++ b/src/growth.js @@ -7,6 +7,10 @@ class Growth extends Api { this.headers.referer = "https://juejin.cn/"; this.requestInterceptor = config => { config.headers.cookie = juejin.getCookie(); + if (juejin.user) { + const tokens = juejin.getCookieTokens(); + config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; + } return config; }; this.responseInterceptor = res => { diff --git a/src/juejin-helper.js b/src/juejin-helper.js index 29a55d00..77644b47 100644 --- a/src/juejin-helper.js +++ b/src/juejin-helper.js @@ -1,6 +1,7 @@ import Api from "./api"; import Growth from "./growth"; import SeaGold from "./seagold"; +import { parseCookieTokens } from "./utils/parse-cookietokens"; class JuejinHelper extends Api { constructor() { @@ -20,6 +21,7 @@ class JuejinHelper extends Api { async login(cookie) { this.headers.cookie = cookie; + this.cookieTokens = parseCookieTokens(cookie); this.user = await this.get("/user_api/v1/user/get"); } @@ -32,6 +34,10 @@ class JuejinHelper extends Api { return this.headers.cookie || ""; } + getCookieTokens() { + return this.cookieTokens; + } + getUser() { return this.user; } @@ -49,6 +55,10 @@ class JuejinHelper extends Api { seagold() { return new SeaGold(this); } + + numpuzz() { + return new NumPuzz(this); + } } export default JuejinHelper; diff --git a/src/utils/parse-cookietokens.js b/src/utils/parse-cookietokens.js new file mode 100644 index 00000000..35a3d47f --- /dev/null +++ b/src/utils/parse-cookietokens.js @@ -0,0 +1,29 @@ +function parseCookieTokens(cookiestring) { + const cookie = new Map(); + cookiestring.split("; ").map(string => string.split("=")).forEach(([key, value]) => { + cookie.set(key, value); + }); + + const cookieTokens = { + aid: "", + uuid: "", + user_unique_id: "", + web_id: "" + }; + + const tokensReg = /^__tea_cookie_tokens_(\d+)$/; + for (const [key, value] of cookie.entries()) { + if (tokensReg.test(key)) { + cookieTokens.aid = key.match(tokensReg)[1]; + const json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); + cookieTokens.uuid = json.user_unique_id; + cookieTokens.user_unique_id = json.user_unique_id; + cookieTokens.web_id = json.web_id; + break; + } + } + + return cookieTokens; +} + +export { parseCookieTokens }; From 8d1030d884b1f83c3bcbb7f4db92d6eff1500d22 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 16 Mar 2022 17:25:23 +0800 Subject: [PATCH 020/131] =?UTF-8?q?fix(seaGold):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=B5=B7=E5=BA=95=E6=8E=98=E9=87=91=E6=B8=B8=E6=88=8F=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/seagold.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/seagold.js b/src/seagold.js index 2445974d..2764bfed 100644 --- a/src/seagold.js +++ b/src/seagold.js @@ -30,7 +30,7 @@ class Seagold extends Api { this.setToken(await this.juejin.makeToken()); return this.post("/sea-gold/user/login", { data: { - name: this.juejin.user?.user_name + name: this.juejin.user.user_name } }); } From 7812b565b4b56c3289ee95813d84687bfd58b2d6 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 16 Mar 2022 17:27:02 +0800 Subject: [PATCH 021/131] =?UTF-8?q?feat(numpuzz):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=95=B0=E5=AD=97=E8=B0=9C=E9=A2=98=E6=B8=B8=E6=88=8FAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/numpuzz.js | 105 +++++++++++++++++++++++++++++++++++++++++++ test/test-numpuzz.js | 31 +++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 src/numpuzz.js create mode 100644 test/test-numpuzz.js diff --git a/src/numpuzz.js b/src/numpuzz.js new file mode 100644 index 00000000..04926964 --- /dev/null +++ b/src/numpuzz.js @@ -0,0 +1,105 @@ +import Api from "./api"; + +/** + * 数字拼图 + * 游戏地址: https://juejin.cn/game/shuzimiti/ + */ +class NumPuzz extends Api { + constructor(juejin) { + super(); + this.baseURL = "https://juejin-game.bytedance.com/game"; + this.headers.referer = "https://juejin.cn/"; + this.juejin = juejin; + this.requestInterceptor = config => { + if (juejin.user) { + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${juejin.user.user_id}&time=${Date.now()}`; + } + return config; + }; + + this.responseInterceptor = res => { + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }; + } + + setToken(token) { + this.headers.Authorization = `Bearer ${token}`; + } + + /** + * 游戏登录 + * @returns {Promise<*>} + */ + async gameLogin() { + this.setToken(await this.juejin.makeToken()); + return this.post("/num-puzz/user/login", { + data: { + name: this.juejin.user.user_name + } + }); + } + + /** + * 获取主页信息 + * @returns {Promise<*>} + * bug: 0 + * diamond: 200 + * originality: 0 + * showToast: false + */ + async gameInfo() { + return this.get("/num-puzz/home/info"); + } + + /** + * 开始游戏 + * @param level Number [1|2|3] 简单|中等|困难 + * @returns {Promise<*>} + * guide: 0 + * level: 游戏等级 + * map: 游戏地图 + * round: 关卡 + * target: 目标结果 + */ + async gameStart({ level = 1 } = {}) { + return this.post("/num-puzz/game/start", { + data: { + level + } + }); + } + + /** + * 跳过游戏 + * @description 结构同开始游戏 + * @param level + * @returns {Promise<*>} + */ + async gameSkip({ level = 1 } = {}) { + return this.post("/num-puzz/game/skip", { + data: { + level + } + }); + } + + /** + * 游戏完成 + * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] + * @param command + * @returns {Promise<*>} + */ + async gameComplete({ level = 1, command = [] } = {}) { + return this.post("/num-puzz/game/complete", { + data: { + level, + command + } + }); + } +} + +export default NumPuzz; diff --git a/test/test-numpuzz.js b/test/test-numpuzz.js new file mode 100644 index 00000000..bbe8f042 --- /dev/null +++ b/test/test-numpuzz.js @@ -0,0 +1,31 @@ +// const JuejinHelper = require('..'); +// +// // const mockCookie = `juejin-cookies`; +// +// const rules = [ +// [{ test: /^0\.1$/, name: "空地", type: "cell", value: 0 }] +// [{ test: /^0\.2$/, name: "障碍", type: "cell", value: 1 }], +// [{ test: /^0\.3$/, name: "加法", type: "symbol", value: "+" }], +// [{ test: /^0\.4$/, name: "减法", type: "symbol", value: "-" }], +// [{ test: /^0\.5$/, name: "乘法", type: "symbol", value: "*" }], +// [{ test: /^0\.6$/, name: "除法", type: "symbol", value: "/" }], +// [{ test: /^[1-9]\d*$/, name: "数字", type: "number", value: n => n }] +// ] +// +// async function run() { +// const juejin = new JuejinHelper(); +// await juejin.login(mockCookie); +// +// const numpuzz = juejin.numpuzz(); +// +// const loginInfo = await numpuzz.gameLogin(); +// console.log(loginInfo); +// +// const gameInfo = await numpuzz.gameStart({ level: 1 }); +// console.log(gameInfo); +// +// // const gameResult = await numpuzz.gameComplete({ level: 1, command: [[1, 1, "d"]] }); +// // console.log(gameResult); +// } +// +// run(); From 713b82ed292568ec51ce35312c3d1ab2ea15f630 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 16 Mar 2022 17:28:15 +0800 Subject: [PATCH 022/131] =?UTF-8?q?test:=20=E6=B7=BB=E5=8A=A0=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test-login.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/test-login.js diff --git a/test/test-login.js b/test/test-login.js new file mode 100644 index 00000000..a17b29c0 --- /dev/null +++ b/test/test-login.js @@ -0,0 +1,12 @@ +const JuejinHelper = require('..'); + +const mockCookie = `juejin-cookies`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + console.log("user_id", juejin.getUser().user_id); + console.log("tokens", juejin.getCookieTokens()); +} + +run(); From 2777ebab18424515e2c1b6cf634486e415816d65 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 16 Mar 2022 17:29:16 +0800 Subject: [PATCH 023/131] =?UTF-8?q?test:=20=E6=B7=BB=E5=8A=A0=E6=88=90?= =?UTF-8?q?=E9=95=BFAPI=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test-growth.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/test-growth.js diff --git a/test/test-growth.js b/test/test-growth.js new file mode 100644 index 00000000..998dbbae --- /dev/null +++ b/test/test-growth.js @@ -0,0 +1,30 @@ +const JuejinHelper = require('..'); + +const mockCookie = `juejin-cookies`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + console.log(juejin.getUser().user_name); + + const growth = juejin.growth(); + + const status = await growth.getTodayStatus(); + console.log(`签到状态: ${status}`); + + const counts = await growth.getCounts(); + console.log(`连续签到天数 ${counts.cont_count}, 累计签到天数${counts.sum_count}`); + + const luckyusersResult = await growth.getLotteriesLuckyUsers(); + if (luckyusersResult.count > 0) { + const no1LuckyUser = luckyusersResult.lotteries[0]; + const dipLuckyResult = await growth.dipLucky(no1LuckyUser.history_id); + if (dipLuckyResult.has_dip) { + console.log(`今天你已经沾过喜气,明天再来吧!`); + } else { + console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`); + } + } +} + +run(); From c460a38805f060e314607c20c7246b54de2ad502 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 16 Mar 2022 19:26:01 +0800 Subject: [PATCH 024/131] =?UTF-8?q?feat(sdk):=20=E6=96=B0=E5=A2=9Esdk=20AP?= =?UTF-8?q?I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api.js | 1 + src/cookie.js | 44 ++++++++++++++++++++++++++++++ src/juejin-helper.js | 13 +++++++-- src/sdk.js | 48 +++++++++++++++++++++++++++++++++ src/utils/parse-cookietokens.js | 7 +---- 5 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 src/cookie.js create mode 100644 src/sdk.js diff --git a/src/api.js b/src/api.js index a20ae7cc..5e4c6e5e 100644 --- a/src/api.js +++ b/src/api.js @@ -10,6 +10,7 @@ class Api { "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", "sec-ch-ua": `"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"`, "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "Windows", accept: "*/*", credentials: "include" }; diff --git a/src/cookie.js b/src/cookie.js new file mode 100644 index 00000000..a72c6ea6 --- /dev/null +++ b/src/cookie.js @@ -0,0 +1,44 @@ +class Cookie { + constructor(cookie) { + this.cookie = ""; + this.stack = new Map(); + if (cookie) { + this.setCookieValue(cookie); + } + } + + setCookieValue(cookie = "") { + this.stack.clear(); + this.cookie = cookie; + cookie.split("; ").map(string => string.split("=")).forEach(([key, value]) => { + this.stack.set(key, value); + }); + } + + get(key) { + return this.stack.get(key); + } + + has(key) { + return this.stack.has(key); + } + + set(key, value) { + return this.stack.set(key, value); + } + + entries() { + return this.stack.entries(); + } + + clear() { + this.cookie = ""; + this.stack.clear(); + } + + toString() { + return this.cookie; + } +} + +export default Cookie; diff --git a/src/juejin-helper.js b/src/juejin-helper.js index 77644b47..c5790b23 100644 --- a/src/juejin-helper.js +++ b/src/juejin-helper.js @@ -2,6 +2,8 @@ import Api from "./api"; import Growth from "./growth"; import SeaGold from "./seagold"; import { parseCookieTokens } from "./utils/parse-cookietokens"; +import Cookie from "./cookie"; +import Sdk from "./sdk"; class JuejinHelper extends Api { constructor() { @@ -16,16 +18,19 @@ class JuejinHelper extends Api { return res.data; } + this.cookie = new Cookie(); this.user = null; } async login(cookie) { - this.headers.cookie = cookie; - this.cookieTokens = parseCookieTokens(cookie); + this.cookie.setCookieValue(cookie); + this.headers.cookie = this.cookie.toString(); + this.cookieTokens = parseCookieTokens(this.cookie); this.user = await this.get("/user_api/v1/user/get"); } async logout() { + this.cookie.clear(); this.headers.cookie = ""; this.user = null; } @@ -48,6 +53,10 @@ class JuejinHelper extends Api { }); } + sdk() { + return new Sdk(this); + } + growth() { return new Growth(this); } diff --git a/src/sdk.js b/src/sdk.js new file mode 100644 index 00000000..5b85a07c --- /dev/null +++ b/src/sdk.js @@ -0,0 +1,48 @@ +import Api from "./api"; + +/** + * SDK + */ +class Sdk extends Api { + constructor(juejin) { + super(); + this.juejin = juejin; + this.baseURL = ""; + Object.assign(this.headers, { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site" + }); + this.requestInterceptor = config => { + return config; + }; + + this.responseInterceptor = res => { + if (res.errno !== 200) { + throw new Error(res.message); + } + return res.data; + }; + } + + async slardarSDKSetting() { + return this.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + headers: { + cookie: `MONITOR_WEB_ID=${this.juejin.cookie.get("MONITOR_WEB_ID")}` + } + }); + } + + async list(data) { + return this.post("https://mcs.snssdk.com/list", { + headers: { + host: "mcs.snssdk.com" + }, + data + }); + } +} + +export default Sdk; diff --git a/src/utils/parse-cookietokens.js b/src/utils/parse-cookietokens.js index 35a3d47f..44ee12b3 100644 --- a/src/utils/parse-cookietokens.js +++ b/src/utils/parse-cookietokens.js @@ -1,9 +1,4 @@ -function parseCookieTokens(cookiestring) { - const cookie = new Map(); - cookiestring.split("; ").map(string => string.split("=")).forEach(([key, value]) => { - cookie.set(key, value); - }); - +function parseCookieTokens(cookie) { const cookieTokens = { aid: "", uuid: "", From 33662afa550743e33a4b91e0c136b38733e0ee43 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 17 Mar 2022 10:29:29 +0800 Subject: [PATCH 025/131] =?UTF-8?q?test(test):=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test-login.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test-login.js b/test/test-login.js index a17b29c0..4f1cf150 100644 --- a/test/test-login.js +++ b/test/test-login.js @@ -6,7 +6,6 @@ async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); console.log("user_id", juejin.getUser().user_id); - console.log("tokens", juejin.getCookieTokens()); } run(); From 9dd9df91f580a3654e6c3ca6160fa57f4f390058 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 17 Mar 2022 10:30:02 +0800 Subject: [PATCH 026/131] =?UTF-8?q?test(test):=20=E6=B5=8B=E8=AF=95sdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test-sdk.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 test/test-sdk.js diff --git a/test/test-sdk.js b/test/test-sdk.js new file mode 100644 index 00000000..152f6bc0 --- /dev/null +++ b/test/test-sdk.js @@ -0,0 +1,16 @@ +const JuejinHelper = require('..'); + +const mockCookie = `juejin-cookies`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + console.log("user_id", juejin.getUser().user_id); + + const sdk = juejin.sdk(); + console.log("SDK设置", await sdk.slardarSDKSetting()); + console.log("成长API事件埋点", await sdk.mockTrackGrowthEvent()); + console.log("load事件埋点", await sdk.mockTrackOnloadEvent()); +} + +run(); From 321772f4b95dba76576ecdfc989b07c9d9dfeaa7 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 17 Mar 2022 10:31:26 +0800 Subject: [PATCH 027/131] =?UTF-8?q?chore(sdk):=20=E5=AE=8C=E5=96=84sdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api.js | 2 +- src/juejin-helper.js | 6 ++- src/sdk.js | 122 ++++++++++++++++++++++++++++++++++++++++++- src/utils/index.js | 16 ++++++ 4 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 src/utils/index.js diff --git a/src/api.js b/src/api.js index 5e4c6e5e..9f34cde4 100644 --- a/src/api.js +++ b/src/api.js @@ -5,7 +5,7 @@ class Api { this.baseURL = ""; this.headers = { "content-type": "application/json; charset=utf-8", - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", "accept-encoding": "gzip, deflate, br", "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", "sec-ch-ua": `"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"`, diff --git a/src/juejin-helper.js b/src/juejin-helper.js index c5790b23..6b961e9b 100644 --- a/src/juejin-helper.js +++ b/src/juejin-helper.js @@ -1,7 +1,7 @@ import Api from "./api"; import Growth from "./growth"; import SeaGold from "./seagold"; -import { parseCookieTokens } from "./utils/parse-cookietokens"; +import { parseCookieTokens, generateUUID } from "./utils/index"; import Cookie from "./cookie"; import Sdk from "./sdk"; @@ -53,6 +53,10 @@ class JuejinHelper extends Api { }); } + generateUUID() { + return generateUUID(); + } + sdk() { return new Sdk(this); } diff --git a/src/sdk.js b/src/sdk.js index 5b85a07c..f52a2493 100644 --- a/src/sdk.js +++ b/src/sdk.js @@ -1,4 +1,5 @@ import Api from "./api"; +import { generateUUID, randomRangeNumber } from "./utils/index"; /** * SDK @@ -9,6 +10,7 @@ class Sdk extends Api { this.juejin = juejin; this.baseURL = ""; Object.assign(this.headers, { + "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", referer: "https://juejin.cn/", origin: "https://juejin.cn", "Sec-Fetch-Dest": "empty", @@ -20,11 +22,18 @@ class Sdk extends Api { }; this.responseInterceptor = res => { + if ("e" in res) { + return res; + } if (res.errno !== 200) { throw new Error(res.message); } return res.data; }; + + this.sdk_type = "npm"; + this.sdk_lib = "js"; + this.sdk_version = "4.2.9"; } async slardarSDKSetting() { @@ -35,7 +44,49 @@ class Sdk extends Api { }); } - async list(data) { + async list(events = []) { + const cookieTokens = this.juejin.getCookieTokens(); + const userInfo = this.juejin.getUser(); + const userIsLogin = !!userInfo; + + const data = [{ + events, + header: { + app_id: Number(cookieTokens.aid), + browser: "Chrome", + browser_version: "99.0.4844.51", + custom: JSON.stringify(userIsLogin ? { + student_verify_status: userInfo.student_status ? "student" : "not_student", + user_level: userInfo.level + }: {}), + device_model: "Windows NT 10.0", + os_name: "windows", + os_version: "10", + resolution: "1920x1080", + screen_width: 1920, + screen_height: 1080, + width: 1920, + height: 1080, + language: "zh-CN", + platform: "Web", + referrer: "", + referrer_host: "", + sdk_lib: this.sdk_lib, + sdk_version: this.sdk_version, + timezone: 8, + tz_offset: -28800, + utm_campaign: "ad", + utm_medium: "user_center" + }, + local_time: Date.now() / 1000 >> 0, + user: { + user_id: this.juejin.getUser().user_id, + user_is_login: userIsLogin, + user_unique_id: cookieTokens.user_unique_id, + web_id: cookieTokens.web_id + } + }]; + return this.post("https://mcs.snssdk.com/list", { headers: { host: "mcs.snssdk.com" @@ -43,6 +94,75 @@ class Sdk extends Api { data }); } + + // 模拟成长API事件埋点 + async mockTrackGrowthEvent() { + const sessionid = generateUUID(); + const localtime = Date.now(); + const eventindex = localtime + randomRangeNumber(4000, 10000); + + return this.list([ + { + ab_sdk_version: "90000611,90001195", + event: "task_center_sign_in_visit", + is_bav: 0, + local_time_ms: localtime + 1, + params: JSON.stringify({ + event_index: eventindex + 1, + _staging_flag: 0, + }), + session_id: sessionid + }, + { + ab_sdk_version: "90000611,90001195", + event: "predefine_pageview", + is_bav: 0, + local_time_ms: localtime, + params: JSON.stringify({ + $is_first_time: "false", + event_index: eventindex, + referrer: "", + time: localtime, + title: "每日签到 - 掘金", + url: "https://juejin.cn/user/center/signin", + url_path: "/user/center/signin", + _staging_flag: 0 + }), + session_id: sessionid + } + ]); + } + + // 模拟OnLoad事件埋点 + async mockTrackOnloadEvent() { + const cookieTokens = this.juejin.getCookieTokens(); + const localtime = Date.now(); + + return this.list([ + { + event: "onload", + local_time_ms: localtime, + params: JSON.stringify({ + app_id: Number(cookieTokens.aid), + app_name: "", + sdk_version: this.sdk_version, + sdk_type: this.sdk_type, + sdk_config: { + app_id: Number(cookieTokens.aid), + channel: "cn", + log: false, + enable_ab_test: true, + ab_channel_domain: "https://abtestvm.bytedance.com", + cross_subdomain: true, + cookie_expire: 94608000000, + cookie_domain: "juejin.cn", + enable_stay_duration: true, + maxDuration: 1200000 + } + }) + } + ]); + } } export default Sdk; diff --git a/src/utils/index.js b/src/utils/index.js new file mode 100644 index 00000000..f1fb6e56 --- /dev/null +++ b/src/utils/index.js @@ -0,0 +1,16 @@ +import { v4 as uuid } from "uuid"; +import { parseCookieTokens } from "./parse-cookietokens"; + +export async function wait(time = 0) { + return new Promise(resolve => setTimeout(resolve, time)); +} + +export function randomRangeNumber(start = 500, end = 1000) { + return (Math.random() * (end - start) + start) >> 0; +} + +export function generateUUID() { + return uuid(); +} + +export { parseCookieTokens }; From 5433d23158ddc52b84a95352effc6790a1c752a2 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 17 Mar 2022 10:43:34 +0800 Subject: [PATCH 028/131] feat: deploy --- README.md | 18 ++++++++++++++++++ package.json | 12 ++++++++---- test/test.js | 31 ------------------------------- yarn.lock | 5 +++++ 4 files changed, 31 insertions(+), 35 deletions(-) delete mode 100644 test/test.js diff --git a/README.md b/README.md index 76dd2e0b..d3b773a9 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,24 @@ async function run() { run(); ``` +### SDK示例 + +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const sdk = juejin.sdk(); + + await sdk.slardarSDKSetting(); // SDK设置 + await sdk.list(/* events */); // 埋点数据 +} + +run(); +``` + ## 问题 ### 如何获取Cookie diff --git a/package.json b/package.json index 57fa3166..3603af8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.1.3", + "version": "0.1.4", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", @@ -13,16 +13,20 @@ "README.md", "package.json" ], - "keywords": ["juejin", "helper"], + "keywords": [ + "juejin", + "helper" + ], "scripts": { "build": "rollup -c", "dev": "rollup -c -w", - "test": "node test/test.js", + "test": "node test/test-growth.js", "pretest": "npm run build" }, "dependencies": { "jsonwebtoken": "^8.5.1", - "node-fetch": "^2.6.1" + "node-fetch": "^2.6.1", + "uuid": "^8.3.2" }, "devDependencies": { "@babel/core": "^7.16.12", diff --git a/test/test.js b/test/test.js deleted file mode 100644 index 05f547d1..00000000 --- a/test/test.js +++ /dev/null @@ -1,31 +0,0 @@ -const JuejinHelper = require('..'); - -const mockCookie = `juejin-cookies`; - -async function run() { - const juejin = new JuejinHelper(); - await juejin.login(mockCookie); - console.log(juejin.getUser().user_name); - - const growth = juejin.growth(); - - const status = await growth.getTodayStatus(); - console.log(`签到状态: ${status}`); - - const counts = await growth.getCounts(); - console.log(`连续签到天数 ${counts.cont_count}, 累计签到天数${counts.sum_count}`); - - const luckyusersResult = await growth.getLotteriesLuckyUsers(); - if (luckyusersResult.count > 0) { - const no1LuckyUser = luckyusersResult.lotteries[0]; - const dipLuckyResult = await growth.dipLucky(no1LuckyUser.history_id); - console.log(dipLuckyResult); - if (dipLuckyResult.has_dip) { - console.log(`今天你已经沾过喜气,明天再来吧!`); - } else { - console.log(`沾喜气 +${dipLuckyResult.dip_value} 幸运值`); - } - } -} - -run(); diff --git a/yarn.lock b/yarn.lock index 7e3fac4a..b7d6acde 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1547,6 +1547,11 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" From fd68aeb4e09482ab3ef22c64567650dd50b23a59 Mon Sep 17 00:00:00 2001 From: NNNNzs Date: Tue, 24 May 2022 23:45:31 +0800 Subject: [PATCH 029/131] =?UTF-8?q?=E5=A2=9E=E5=8A=A0bugfix=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 +++++++++++++ package.json | 2 +- src/bugfix.js | 69 ++++++++++++++++++++++++++++++++++++++++++++ src/juejin-helper.js | 4 +++ test/test-bugfix.js | 24 +++++++++++++++ 5 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/bugfix.js create mode 100644 test/test-bugfix.js diff --git a/README.md b/README.md index d3b773a9..260b1abc 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,26 @@ async function run() { run(); ``` +### bugfix 游戏示例 +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const bugfix = juejin.bugfix(); + + const bugList = await bugfix.getBugList(); + + console.log(`您当前有: ${bugList.length}个bug未消除`); + + await bugfix.bugfixBatch(bugList); + + console.log('您的bug已经全部解决'); + +``` + ### SDK示例 ```javascript diff --git a/package.json b/package.json index 3603af8b..99105d7a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "scripts": { "build": "rollup -c", "dev": "rollup -c -w", - "test": "node test/test-growth.js", + "test": "node test/test-bugfix.js", "pretest": "npm run build" }, "dependencies": { diff --git a/src/bugfix.js b/src/bugfix.js new file mode 100644 index 00000000..bf09c9e6 --- /dev/null +++ b/src/bugfix.js @@ -0,0 +1,69 @@ +import Api from "./api"; +import { wait, randomRangeNumber } from './utils/index' + +class Bugfix extends Api { + constructor(juejin) { + super(); + this.baseURL = "https://api.juejin.cn"; + this.headers.referer = "https://juejin.cn/"; + this.requestInterceptor = config => { + config.headers.cookie = juejin.getCookie(); + if (juejin.user) { + const tokens = juejin.getCookieTokens(); + config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; + } + return config; + }; + this.responseInterceptor = res => { + if (res.err_no) { + throw new Error(res.err_msg); + } + return res.data; + } + } + /** + * 获取Bug列表 + * @returns {Promise<*>} + * [ + * { + * bug_type: number 类型位置 + * bug_time: number 时间戳 + * bug_show_type: 1 显示类型 + * is_first: boolean 是否第一次 + * } + * ] + * + */ + async getBugList() { + return this.post('/user_api/v1/bugfix/not_collect', { + // 必须加个空对象,否则接口提示少了参数 + data: {} + }) + } + /** + * 消除bug的接口 + * @returns {Promise<*>} + * { + * + * } + */ + async handleBugfix({ bug_time, bug_type }) { + return this.post("/user_api/v1/bugfix/collect", { + data: { bug_time, bug_type } + }) + } + + async bugfixBatch(buglist = []) { + try { + await Promise.all(buglist.map(async bug => { + await this.handleBugfix(bug); + await wait(randomRangeNumber(500, 1000)); + })) + return true + } catch (error) { + return error; + } + } +} + +export default Bugfix; \ No newline at end of file diff --git a/src/juejin-helper.js b/src/juejin-helper.js index 6b961e9b..5aadb758 100644 --- a/src/juejin-helper.js +++ b/src/juejin-helper.js @@ -1,6 +1,7 @@ import Api from "./api"; import Growth from "./growth"; import SeaGold from "./seagold"; +import Bugfix from './bugfix'; import { parseCookieTokens, generateUUID } from "./utils/index"; import Cookie from "./cookie"; import Sdk from "./sdk"; @@ -72,6 +73,9 @@ class JuejinHelper extends Api { numpuzz() { return new NumPuzz(this); } + bugfix() { + return new Bugfix(this); + } } export default JuejinHelper; diff --git a/test/test-bugfix.js b/test/test-bugfix.js new file mode 100644 index 00000000..e8b0f8c5 --- /dev/null +++ b/test/test-bugfix.js @@ -0,0 +1,24 @@ +const JuejinHelper = require('..'); + +const mockCookie = `juejin-cookies`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + console.log(juejin.getUser().user_name); + + const bugfix = juejin.bugfix(); + + const bugList = await bugfix.getBugList(); + + console.log(`您当前有: ${bugList.length}个bug未消除`); + + await bugfix.bugfixBatch(bugList); + + console.log('您的bug已经全部解决'); + + console.log(bugList); + +} + +run(); From 6135b574acaf1d8898da4a17a5e18e672a81d33e Mon Sep 17 00:00:00 2001 From: NNNNzs Date: Tue, 24 May 2022 23:45:59 +0800 Subject: [PATCH 030/131] update version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 99105d7a..32f0fc0d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.1.4", + "version": "0.2.4", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From c6e2cc5c5bec9297cccc9570368531b23ce97652 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 25 May 2022 08:55:20 +0800 Subject: [PATCH 031/131] =?UTF-8?q?build:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 32f0fc0d..ee897ae2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.2.4", + "version": "0.2.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 5fb8f67fe6fd578b242c10b18a48dfbcf42312be Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 25 May 2022 08:55:46 +0800 Subject: [PATCH 032/131] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 260b1abc..c504ac49 100644 --- a/README.md +++ b/README.md @@ -102,8 +102,8 @@ async function run() { await bugfix.bugfixBatch(bugList); - console.log('您的bug已经全部解决'); - + console.log("您的bug已经全部解决"); +} ``` ### SDK示例 From e3755a2b166ea1be2ff1975d86fb2dd1d933b961 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 25 May 2022 08:57:26 +0800 Subject: [PATCH 033/131] =?UTF-8?q?build:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ee897ae2..df0a0639 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "0.2.0", + "version": "1.5.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 0e19eee783caefdd3696d266449c969677a67066 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 25 May 2022 10:31:59 +0800 Subject: [PATCH 034/131] =?UTF-8?q?chore(bugfix):=20=E4=B8=B0=E5=AF=8CBugF?= =?UTF-8?q?ix=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++------ package.json | 4 ++-- src/bugfix.js | 52 +++++++++++++++++++++++++++++++++++---------- test/test-bugfix.js | 15 ++++++------- 4 files changed, 55 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index c504ac49..26418bb9 100644 --- a/README.md +++ b/README.md @@ -96,13 +96,13 @@ async function run() { const bugfix = juejin.bugfix(); - const bugList = await bugfix.getBugList(); + const notCollectBugList = await bugfix.getNotCollectBugList(); + await bugfix.collectBugBatch(notCollectBugList); + console.log(`收集Bug ${notCollectBugList.length}`); - console.log(`您当前有: ${bugList.length}个bug未消除`); - - await bugfix.bugfixBatch(bugList); - - console.log("您的bug已经全部解决"); + const competition = await bugfix.getCompetition(); + const bugfixInfo = await bugfix.getUser(competition); + console.log(`未消除Bug数量 ${bugfixInfo.user_own_bug}`); } ``` diff --git a/package.json b/package.json index df0a0639..5cbf473e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "juejin-helper", - "version": "1.5.0", - "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、自动化工作流。", + "version": "1.5.1", + "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", "main": "dist/juejin-helper.cjs.js", diff --git a/src/bugfix.js b/src/bugfix.js index bf09c9e6..eba99104 100644 --- a/src/bugfix.js +++ b/src/bugfix.js @@ -21,8 +21,33 @@ class Bugfix extends Api { return res.data; } } + + /** + * 获取竞赛信息 + * @returns {Promise<*>} + */ + async getCompetition() { + return this.post("/user_api/v1/bugfix/competition", { + // 必须加个空对象,否则接口提示少了参数 + data: {} + }) + } + /** - * 获取Bug列表 + * 获取用户信息 + * @param competition_id + * @returns {Promise<*>} + */ + async getUser({ competition_id }) { + return this.post("/user_api/v1/bugfix/user", { + data: { + competition_id + } + }) + } + + /** + * 获取未收集的Bug * @returns {Promise<*>} * [ * { @@ -32,31 +57,36 @@ class Bugfix extends Api { * is_first: boolean 是否第一次 * } * ] - * + * */ - async getBugList() { + async getNotCollectBugList() { return this.post('/user_api/v1/bugfix/not_collect', { // 必须加个空对象,否则接口提示少了参数 data: {} }) } + /** - * 消除bug的接口 + * 收集Bug + * @param bug_time + * @param bug_type * @returns {Promise<*>} - * { - * - * } */ - async handleBugfix({ bug_time, bug_type }) { + async collectBug({ bug_time, bug_type }) { return this.post("/user_api/v1/bugfix/collect", { data: { bug_time, bug_type } }) } - async bugfixBatch(buglist = []) { + /** + * 批量收集Bug + * @param buglist + * @returns {Promise} + */ + async collectBugBatch(buglist = []) { try { await Promise.all(buglist.map(async bug => { - await this.handleBugfix(bug); + await this.collectBug(bug); await wait(randomRangeNumber(500, 1000)); })) return true @@ -66,4 +96,4 @@ class Bugfix extends Api { } } -export default Bugfix; \ No newline at end of file +export default Bugfix; diff --git a/test/test-bugfix.js b/test/test-bugfix.js index e8b0f8c5..f897aaa6 100644 --- a/test/test-bugfix.js +++ b/test/test-bugfix.js @@ -9,16 +9,13 @@ async function run() { const bugfix = juejin.bugfix(); - const bugList = await bugfix.getBugList(); - - console.log(`您当前有: ${bugList.length}个bug未消除`); - - await bugfix.bugfixBatch(bugList); - - console.log('您的bug已经全部解决'); - - console.log(bugList); + const notCollectBugList = await bugfix.getNotCollectBugList(); + await bugfix.collectBugBatch(notCollectBugList); + console.log(`收集Bug ${notCollectBugList.length}`); + const competition = await bugfix.getCompetition(); + const bugfixInfo = await bugfix.getUser(competition); + console.log(`未消除Bug数量 ${bugfixInfo.user_own_bug}`); } run(); From 44c61a8e52a1cacbcc4dd12acd8f93a7b9531eea Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 16:28:53 +0800 Subject: [PATCH 035/131] =?UTF-8?q?refactor:=20=E9=87=8D=E6=96=B0=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 引入typescript等 --- .eslintrc.json | 13 + .gitignore | 1 - .prettierrc.js | 20 + build/juejin-helper.c.js | 416 +++++ build/juejin-helper.esm.js | 410 +++++ package.json | 57 +- rollup.config.js | 68 +- src/index.ts | 77 + src/juejin-helper.js | 81 - src/sdk.js | 168 -- src/sdk.ts | 185 +++ src/services/api.ts | 31 + src/services/snssdk.ts | 40 + src/utils/cookie.ts | 48 + test/test-sdk.js | 2 +- tsconfig.json | 20 + types/juejin-helper.d.ts | 85 ++ yarn.lock | 2952 +++++++++++++++++++++--------------- 18 files changed, 3159 insertions(+), 1515 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .prettierrc.js create mode 100644 build/juejin-helper.c.js create mode 100644 build/juejin-helper.esm.js create mode 100644 src/index.ts delete mode 100644 src/juejin-helper.js delete mode 100644 src/sdk.js create mode 100644 src/sdk.ts create mode 100644 src/services/api.ts create mode 100644 src/services/snssdk.ts create mode 100644 src/utils/cookie.ts create mode 100644 tsconfig.json create mode 100644 types/juejin-helper.d.ts diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..16c4eef5 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "env": { + "node": true, + "es6": true + }, + "extends": ["prettier", "plugin:prettier/recommended"], + "plugins": ["prettier"] +} diff --git a/.gitignore b/.gitignore index d8c2951c..7df6d182 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ .DS_Store node_modules -dist # local env files .env.local diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..0c90a35e --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,20 @@ +/** + * 代码风格 + * 更多配置请戳 https://prettier.io/docs/en/options.html + */ +module.exports = { + printWidth: 120, // 代码长度 + useTabs: false, // 使用制表符缩进行而不是空格。 + tabWidth: 2, // 2个空格缩进 + endOfLine: "lf", // 2个空格缩进 + singleQuote: false, // 使用单引号 + semi: true, // 在每个语句的末尾添加分号。 + trailingComma: "none", // 多行末尾加逗号,单行末尾不加逗号 + /** + * 在单个箭头函数参数周围加上括号 + * "avoid" - 尽可能省略parens。例:x => x + * "always" - 始终包括parens。例:(x) => x + */ + arrowParens: "avoid", + bracketSpacing: true // 对象左右空格 例如:{ a: 1 } +}; diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js new file mode 100644 index 00000000..098bd3fa --- /dev/null +++ b/build/juejin-helper.c.js @@ -0,0 +1,416 @@ +'use strict'; + +var axios = require('axios'); +var uuid = require('uuid'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios); + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var instance$1 = axios__default["default"].create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/" + } +}); +instance$1.interceptors.request.use(function (config) { + return config; +}, function (error) { + return Promise.reject(error); +}); +instance$1.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; +}, function (error) { + return Promise.reject(error); +}); + +function parseCookieTokens(cookie) { + const cookieTokens = { + aid: "", + uuid: "", + user_unique_id: "", + web_id: "" + }; + + const tokensReg = /^__tea_cookie_tokens_(\d+)$/; + for (const [key, value] of cookie.entries()) { + if (tokensReg.test(key)) { + cookieTokens.aid = key.match(tokensReg)[1]; + const json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); + cookieTokens.uuid = json.user_unique_id; + cookieTokens.user_unique_id = json.user_unique_id; + cookieTokens.web_id = json.web_id; + break; + } + } + + return cookieTokens; +} + +function randomRangeNumber(start = 500, end = 1000) { + return (Math.random() * (end - start) + start) >> 0; +} + +function generateUUID() { + return uuid.v4(); +} + +var instance = axios__default["default"].create({ + baseURL: "", + headers: { + // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site" + } +}); +instance.interceptors.request.use(function (config) { + return config; +}, function (error) { + return Promise.reject(error); +}); +instance.interceptors.response.use(function (response) { + var res = response.data; + if ("e" in res) { + return res; + } + if (res.errno !== 200) { + throw new Error(res.message); + } + return res.data; +}, function (error) { + return Promise.reject(error); +}); + +/** + * SDK + */ +var Sdk = /** @class */ (function () { + function Sdk(juejin) { + this.sdk_type = "npm"; + this.sdk_lib = "js"; + this.sdk_version = "4.2.9"; + this.juejin = juejin; + } + Sdk.prototype.slardarSDKSetting = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + headers: { + cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) + } + })]; + }); + }); + }; + Sdk.prototype.list = function (events) { + var _a; + if (events === void 0) { events = []; } + return __awaiter(this, void 0, void 0, function () { + var cookieTokens, userInfo, userIsLogin, data; + return __generator(this, function (_b) { + cookieTokens = this.juejin.getCookieTokens(); + userInfo = this.juejin.getUser(); + userIsLogin = !!userInfo; + data = [ + { + events: events, + header: { + app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), + browser: "Chrome", + browser_version: "99.0.4844.51", + custom: JSON.stringify(userIsLogin + ? { + student_verify_status: userInfo.student_status ? "student" : "not_student", + user_level: userInfo.level + } + : {}), + device_model: "Windows NT 10.0", + os_name: "windows", + os_version: "10", + resolution: "1920x1080", + screen_width: 1920, + screen_height: 1080, + width: 1920, + height: 1080, + language: "zh-CN", + platform: "Web", + referrer: "", + referrer_host: "", + sdk_lib: this.sdk_lib, + sdk_version: this.sdk_version, + timezone: 8, + tz_offset: -28800, + utm_campaign: "ad", + utm_medium: "user_center" + }, + local_time: (Date.now() / 1000) >> 0, + user: { + user_id: ((_a = this.juejin.getUser()) === null || _a === void 0 ? void 0 : _a.user_id) || "", + user_is_login: userIsLogin, + user_unique_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.user_unique_id) || "", + web_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.web_id) || "" + } + } + ]; + return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { + headers: { + host: "mcs.snssdk.com" + }, + data: data + })]; + }); + }); + }; + // 模拟成长API事件埋点 + Sdk.prototype.mockTrackGrowthEvent = function () { + return __awaiter(this, void 0, void 0, function () { + var sessionid, localtime, eventindex; + return __generator(this, function (_a) { + sessionid = generateUUID(); + localtime = Date.now(); + eventindex = localtime + randomRangeNumber(4000, 10000); + return [2 /*return*/, this.list([ + { + ab_sdk_version: "90000611,90001195", + event: "task_center_sign_in_visit", + is_bav: 0, + local_time_ms: localtime + 1, + params: JSON.stringify({ + event_index: eventindex + 1, + _staging_flag: 0 + }), + session_id: sessionid + }, + { + ab_sdk_version: "90000611,90001195", + event: "predefine_pageview", + is_bav: 0, + local_time_ms: localtime, + params: JSON.stringify({ + $is_first_time: "false", + event_index: eventindex, + referrer: "", + time: localtime, + title: "每日签到 - 掘金", + url: "https://juejin.cn/user/center/signin", + url_path: "/user/center/signin", + _staging_flag: 0 + }), + session_id: sessionid + } + ])]; + }); + }); + }; + // 模拟OnLoad事件埋点 + Sdk.prototype.mockTrackOnloadEvent = function () { + return __awaiter(this, void 0, void 0, function () { + var cookieTokens, localtime; + return __generator(this, function (_a) { + cookieTokens = this.juejin.getCookieTokens(); + localtime = Date.now(); + return [2 /*return*/, this.list([ + { + event: "onload", + local_time_ms: localtime, + params: JSON.stringify({ + app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), + app_name: "", + sdk_version: this.sdk_version, + sdk_type: this.sdk_type, + sdk_config: { + app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), + channel: "cn", + log: false, + enable_ab_test: true, + ab_channel_domain: "https://abtestvm.bytedance.com", + cross_subdomain: true, + cookie_expire: 94608000000, + cookie_domain: "juejin.cn", + enable_stay_duration: true, + maxDuration: 1200000 + } + }) + } + ])]; + }); + }); + }; + return Sdk; +}()); + +var Cookie = /** @class */ (function () { + function Cookie(cookie) { + if (cookie === void 0) { cookie = ""; } + this.cookie = ""; + this.stack = new Map(); + if (cookie) { + this.setCookieValue(cookie); + } + } + Cookie.prototype.setCookieValue = function (cookie) { + var _this = this; + if (cookie === void 0) { cookie = ""; } + this.stack.clear(); + this.cookie = cookie; + cookie + .split("; ") + .map(function (string) { return string.split("="); }) + .forEach(function (_a) { + var key = _a[0], value = _a[1]; + _this.stack.set(key, value); + }); + }; + Cookie.prototype.get = function (key) { + return this.stack.get(key); + }; + Cookie.prototype.has = function (key) { + return this.stack.has(key); + }; + Cookie.prototype.set = function (key, value) { + return this.stack.set(key, value); + }; + Cookie.prototype.entries = function () { + return this.stack.entries(); + }; + Cookie.prototype.clear = function () { + this.cookie = ""; + this.stack.clear(); + }; + Cookie.prototype.toString = function () { + return this.cookie; + }; + return Cookie; +}()); + +var JuejinHelper = /** @class */ (function () { + function JuejinHelper() { + this.cookie = new Cookie(); + this.cookieTokens = null; + this.user = null; + } + JuejinHelper.prototype.login = function (cookie) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + this.cookie.setCookieValue(cookie); + this.cookieTokens = parseCookieTokens(this.cookie); + _a = this; + return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { + headers: { cookie: this.getCookie() } + })]; + case 1: + _a.user = _b.sent(); + return [2 /*return*/]; + } + }); + }); + }; + JuejinHelper.prototype.logout = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.cookie.clear(); + this.user = null; + return [2 /*return*/]; + }); + }); + }; + JuejinHelper.prototype.getCookie = function () { + return this.cookie.toString(); + }; + JuejinHelper.prototype.getCookieTokens = function () { + return this.cookieTokens; + }; + JuejinHelper.prototype.getUser = function () { + return this.user; + }; + JuejinHelper.prototype.makeToken = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance$1.get("/get/token", { + baseURL: "https://juejin.cn", + headers: { cookie: this.getCookie() } + })]; + }); + }); + }; + JuejinHelper.prototype.sdk = function () { + return new Sdk(this); + }; + JuejinHelper.prototype.growth = function () { + // return new Growth(this); + }; + JuejinHelper.prototype.seagold = function () { + // return new SeaGold(this); + }; + JuejinHelper.prototype.numpuzz = function () { + // return new NumPuzz(this); + }; + JuejinHelper.prototype.bugfix = function () { + // return new Bugfix(this); + }; + return JuejinHelper; +}()); + +module.exports = JuejinHelper; diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js new file mode 100644 index 00000000..df99802d --- /dev/null +++ b/build/juejin-helper.esm.js @@ -0,0 +1,410 @@ +import axios from 'axios'; +import { v4 } from 'uuid'; + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var instance$1 = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/" + } +}); +instance$1.interceptors.request.use(function (config) { + return config; +}, function (error) { + return Promise.reject(error); +}); +instance$1.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; +}, function (error) { + return Promise.reject(error); +}); + +function parseCookieTokens(cookie) { + const cookieTokens = { + aid: "", + uuid: "", + user_unique_id: "", + web_id: "" + }; + + const tokensReg = /^__tea_cookie_tokens_(\d+)$/; + for (const [key, value] of cookie.entries()) { + if (tokensReg.test(key)) { + cookieTokens.aid = key.match(tokensReg)[1]; + const json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); + cookieTokens.uuid = json.user_unique_id; + cookieTokens.user_unique_id = json.user_unique_id; + cookieTokens.web_id = json.web_id; + break; + } + } + + return cookieTokens; +} + +function randomRangeNumber(start = 500, end = 1000) { + return (Math.random() * (end - start) + start) >> 0; +} + +function generateUUID() { + return v4(); +} + +var instance = axios.create({ + baseURL: "", + headers: { + // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site" + } +}); +instance.interceptors.request.use(function (config) { + return config; +}, function (error) { + return Promise.reject(error); +}); +instance.interceptors.response.use(function (response) { + var res = response.data; + if ("e" in res) { + return res; + } + if (res.errno !== 200) { + throw new Error(res.message); + } + return res.data; +}, function (error) { + return Promise.reject(error); +}); + +/** + * SDK + */ +var Sdk = /** @class */ (function () { + function Sdk(juejin) { + this.sdk_type = "npm"; + this.sdk_lib = "js"; + this.sdk_version = "4.2.9"; + this.juejin = juejin; + } + Sdk.prototype.slardarSDKSetting = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + headers: { + cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) + } + })]; + }); + }); + }; + Sdk.prototype.list = function (events) { + var _a; + if (events === void 0) { events = []; } + return __awaiter(this, void 0, void 0, function () { + var cookieTokens, userInfo, userIsLogin, data; + return __generator(this, function (_b) { + cookieTokens = this.juejin.getCookieTokens(); + userInfo = this.juejin.getUser(); + userIsLogin = !!userInfo; + data = [ + { + events: events, + header: { + app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), + browser: "Chrome", + browser_version: "99.0.4844.51", + custom: JSON.stringify(userIsLogin + ? { + student_verify_status: userInfo.student_status ? "student" : "not_student", + user_level: userInfo.level + } + : {}), + device_model: "Windows NT 10.0", + os_name: "windows", + os_version: "10", + resolution: "1920x1080", + screen_width: 1920, + screen_height: 1080, + width: 1920, + height: 1080, + language: "zh-CN", + platform: "Web", + referrer: "", + referrer_host: "", + sdk_lib: this.sdk_lib, + sdk_version: this.sdk_version, + timezone: 8, + tz_offset: -28800, + utm_campaign: "ad", + utm_medium: "user_center" + }, + local_time: (Date.now() / 1000) >> 0, + user: { + user_id: ((_a = this.juejin.getUser()) === null || _a === void 0 ? void 0 : _a.user_id) || "", + user_is_login: userIsLogin, + user_unique_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.user_unique_id) || "", + web_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.web_id) || "" + } + } + ]; + return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { + headers: { + host: "mcs.snssdk.com" + }, + data: data + })]; + }); + }); + }; + // 模拟成长API事件埋点 + Sdk.prototype.mockTrackGrowthEvent = function () { + return __awaiter(this, void 0, void 0, function () { + var sessionid, localtime, eventindex; + return __generator(this, function (_a) { + sessionid = generateUUID(); + localtime = Date.now(); + eventindex = localtime + randomRangeNumber(4000, 10000); + return [2 /*return*/, this.list([ + { + ab_sdk_version: "90000611,90001195", + event: "task_center_sign_in_visit", + is_bav: 0, + local_time_ms: localtime + 1, + params: JSON.stringify({ + event_index: eventindex + 1, + _staging_flag: 0 + }), + session_id: sessionid + }, + { + ab_sdk_version: "90000611,90001195", + event: "predefine_pageview", + is_bav: 0, + local_time_ms: localtime, + params: JSON.stringify({ + $is_first_time: "false", + event_index: eventindex, + referrer: "", + time: localtime, + title: "每日签到 - 掘金", + url: "https://juejin.cn/user/center/signin", + url_path: "/user/center/signin", + _staging_flag: 0 + }), + session_id: sessionid + } + ])]; + }); + }); + }; + // 模拟OnLoad事件埋点 + Sdk.prototype.mockTrackOnloadEvent = function () { + return __awaiter(this, void 0, void 0, function () { + var cookieTokens, localtime; + return __generator(this, function (_a) { + cookieTokens = this.juejin.getCookieTokens(); + localtime = Date.now(); + return [2 /*return*/, this.list([ + { + event: "onload", + local_time_ms: localtime, + params: JSON.stringify({ + app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), + app_name: "", + sdk_version: this.sdk_version, + sdk_type: this.sdk_type, + sdk_config: { + app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), + channel: "cn", + log: false, + enable_ab_test: true, + ab_channel_domain: "https://abtestvm.bytedance.com", + cross_subdomain: true, + cookie_expire: 94608000000, + cookie_domain: "juejin.cn", + enable_stay_duration: true, + maxDuration: 1200000 + } + }) + } + ])]; + }); + }); + }; + return Sdk; +}()); + +var Cookie = /** @class */ (function () { + function Cookie(cookie) { + if (cookie === void 0) { cookie = ""; } + this.cookie = ""; + this.stack = new Map(); + if (cookie) { + this.setCookieValue(cookie); + } + } + Cookie.prototype.setCookieValue = function (cookie) { + var _this = this; + if (cookie === void 0) { cookie = ""; } + this.stack.clear(); + this.cookie = cookie; + cookie + .split("; ") + .map(function (string) { return string.split("="); }) + .forEach(function (_a) { + var key = _a[0], value = _a[1]; + _this.stack.set(key, value); + }); + }; + Cookie.prototype.get = function (key) { + return this.stack.get(key); + }; + Cookie.prototype.has = function (key) { + return this.stack.has(key); + }; + Cookie.prototype.set = function (key, value) { + return this.stack.set(key, value); + }; + Cookie.prototype.entries = function () { + return this.stack.entries(); + }; + Cookie.prototype.clear = function () { + this.cookie = ""; + this.stack.clear(); + }; + Cookie.prototype.toString = function () { + return this.cookie; + }; + return Cookie; +}()); + +var JuejinHelper = /** @class */ (function () { + function JuejinHelper() { + this.cookie = new Cookie(); + this.cookieTokens = null; + this.user = null; + } + JuejinHelper.prototype.login = function (cookie) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + this.cookie.setCookieValue(cookie); + this.cookieTokens = parseCookieTokens(this.cookie); + _a = this; + return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { + headers: { cookie: this.getCookie() } + })]; + case 1: + _a.user = _b.sent(); + return [2 /*return*/]; + } + }); + }); + }; + JuejinHelper.prototype.logout = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.cookie.clear(); + this.user = null; + return [2 /*return*/]; + }); + }); + }; + JuejinHelper.prototype.getCookie = function () { + return this.cookie.toString(); + }; + JuejinHelper.prototype.getCookieTokens = function () { + return this.cookieTokens; + }; + JuejinHelper.prototype.getUser = function () { + return this.user; + }; + JuejinHelper.prototype.makeToken = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance$1.get("/get/token", { + baseURL: "https://juejin.cn", + headers: { cookie: this.getCookie() } + })]; + }); + }); + }; + JuejinHelper.prototype.sdk = function () { + return new Sdk(this); + }; + JuejinHelper.prototype.growth = function () { + // return new Growth(this); + }; + JuejinHelper.prototype.seagold = function () { + // return new SeaGold(this); + }; + JuejinHelper.prototype.numpuzz = function () { + // return new NumPuzz(this); + }; + JuejinHelper.prototype.bugfix = function () { + // return new Bugfix(this); + }; + return JuejinHelper; +}()); + +export { JuejinHelper as default }; diff --git a/package.json b/package.json index 5cbf473e..c61e83cc 100644 --- a/package.json +++ b/package.json @@ -1,47 +1,32 @@ { "name": "juejin-helper", - "version": "1.5.1", - "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", - "author": "Derek Li", - "license": "Apache-2.0", - "main": "dist/juejin-helper.cjs.js", - "module": "dist/juejin-helper.esm.js", - "browser": "dist/juejin-helper.umd.js", - "files": [ - "dist", - "LICENSE", - "README.md", - "package.json" - ], - "keywords": [ - "juejin", - "helper" - ], + "version": "1.6.0", + "source": "src/index.ts", + "main": "build/juejin-helper.c.js", + "module": "build/juejin-helper.esm.js", + "types": "types/juejin-helper.d.ts", "scripts": { - "build": "rollup -c", - "dev": "rollup -c -w", - "test": "node test/test-bugfix.js", - "pretest": "npm run build" + "watch": "rollup -c -w", + "build": "rollup -c" }, "dependencies": { + "axios": "^0.27.2", "jsonwebtoken": "^8.5.1", - "node-fetch": "^2.6.1", "uuid": "^8.3.2" }, "devDependencies": { - "@babel/core": "^7.16.12", - "@babel/preset-env": "^7.16.11", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^11.0.1", - "@rollup/plugin-node-resolve": "^7.0.0", - "rollup": "^1.29.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/iDerekLi/juejin-helper.git" - }, - "homepage": "https://github.com/iDerekLi/juejin-helper#readme", - "bugs": { - "url": "https://github.com/iDerekLi/juejin-helper/issues" + "@rollup/plugin-commonjs": "^22.0.2", + "@rollup/plugin-node-resolve": "^13.3.0", + "@rollup/plugin-sucrase": "^4.0.4", + "@typescript-eslint/parser": "^5.32.0", + "eslint": "^8.14.0", + "eslint-config-next": "^12.1.5", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.0.0", + "prettier": "^2.6.2", + "rollup": "^2.77.2", + "rollup-plugin-dts": "^4.2.2", + "rollup-plugin-typescript2": "^0.32.1", + "typescript": ">=3.0.0" } } diff --git a/rollup.config.js b/rollup.config.js index 87c6bd25..c43c80a3 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,44 +1,30 @@ -import resolve from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; -// import { babel } from '@rollup/plugin-babel'; -import pkg from './package.json'; +import pkg from "./package.json"; +import { defineConfig } from "rollup"; +import commonjs from "@rollup/plugin-commonjs"; +import typescript from "rollup-plugin-typescript2"; +import dts from "rollup-plugin-dts"; export default [ - // browser-friendly UMD build - { - input: 'src/juejin-helper.js', - output: { - name: 'JuejinHelper', - file: pkg.browser, - format: 'umd' - }, - external: ['node-fetch', 'jsonwebtoken'], - plugins: [ - resolve(), // so Rollup can find `ms` - // babel({ - // exclude: 'node_modules/**' - // }), - commonjs() // so Rollup can convert `ms` to an ES module - ] - }, - - // CommonJS (for Node) and ES module (for bundlers) build. - // (We could have three entries in the configuration array - // instead of two, but it's quicker to generate multiple - // builds from a single configuration where possible, using - // an array for the `output` option, where we can specify - // `file` and `format` for each target) - { - input: 'src/juejin-helper.js', - external: ['node-fetch', 'jsonwebtoken'], - output: [ - { file: pkg.main, format: 'cjs' }, - { file: pkg.module, format: 'es' } - ], - plugins: [ - // babel({ - // exclude: "node_modules/**" - // }) - ] - } + { + input: pkg.source, + external: [...Object.keys(pkg.dependencies), ...Object.keys(pkg.devDependencies)], + output: [ + { file: pkg.main, format: "cjs" }, + { file: pkg.module, format: "esm" } + ], + plugins: [ + commonjs({ + defaultIsModuleExports: true + }), + typescript() + ], + watch: { + exclude: "node_modules/**" + } + }, + { + input: pkg.source, + output: [{ file: pkg.types, format: "esm" }], + plugins: [dts()] + } ]; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 00000000..4b96d3f2 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,77 @@ +import api from "./services/api"; +import { parseCookieTokens } from "./utils/index"; +import Sdk from "./sdk"; +import Cookie from "./utils/cookie"; + +type JuejinUserProps = { + user_id: string; + user_name: string; + [prop: string]: any; +} | null; + +type JuejinCookieTokens = { + aid: string; + uuid: string; + user_unique_id: string; + web_id: string; +} | null; + +class JuejinHelper { + cookie: Cookie = new Cookie(); + cookieTokens: JuejinCookieTokens = null; + user: JuejinUserProps = null; + + async login(cookie: string) { + this.cookie.setCookieValue(cookie); + this.cookieTokens = parseCookieTokens(this.cookie); + this.user = await api.get("/user_api/v1/user/get", { + headers: { cookie: this.getCookie() } + }); + } + + async logout() { + this.cookie.clear(); + this.user = null; + } + + getCookie() { + return this.cookie.toString(); + } + + getCookieTokens() { + return this.cookieTokens; + } + + getUser() { + return this.user; + } + + async makeToken(): Promise { + return api.get("/get/token", { + baseURL: "https://juejin.cn", + headers: { cookie: this.getCookie() } + }); + } + + sdk() { + return new Sdk(this); + } + + growth() { + // return new Growth(this); + } + + seagold() { + // return new SeaGold(this); + } + + numpuzz() { + // return new NumPuzz(this); + } + + bugfix() { + // return new Bugfix(this); + } +} + +export default JuejinHelper; diff --git a/src/juejin-helper.js b/src/juejin-helper.js deleted file mode 100644 index 5aadb758..00000000 --- a/src/juejin-helper.js +++ /dev/null @@ -1,81 +0,0 @@ -import Api from "./api"; -import Growth from "./growth"; -import SeaGold from "./seagold"; -import Bugfix from './bugfix'; -import { parseCookieTokens, generateUUID } from "./utils/index"; -import Cookie from "./cookie"; -import Sdk from "./sdk"; - -class JuejinHelper extends Api { - constructor() { - super(); - this.baseURL = "https://api.juejin.cn"; - this.headers.referer = "https://juejin.cn/"; - this.headers.cookie = ""; - this.responseInterceptor = res => { - if (res.err_no) { - throw new Error(res.err_msg); - } - return res.data; - } - - this.cookie = new Cookie(); - this.user = null; - } - - async login(cookie) { - this.cookie.setCookieValue(cookie); - this.headers.cookie = this.cookie.toString(); - this.cookieTokens = parseCookieTokens(this.cookie); - this.user = await this.get("/user_api/v1/user/get"); - } - - async logout() { - this.cookie.clear(); - this.headers.cookie = ""; - this.user = null; - } - - getCookie() { - return this.headers.cookie || ""; - } - - getCookieTokens() { - return this.cookieTokens; - } - - getUser() { - return this.user; - } - - async makeToken() { - return this.get("/get/token", { - baseURL: "https://juejin.cn" - }); - } - - generateUUID() { - return generateUUID(); - } - - sdk() { - return new Sdk(this); - } - - growth() { - return new Growth(this); - } - - seagold() { - return new SeaGold(this); - } - - numpuzz() { - return new NumPuzz(this); - } - bugfix() { - return new Bugfix(this); - } -} - -export default JuejinHelper; diff --git a/src/sdk.js b/src/sdk.js deleted file mode 100644 index f52a2493..00000000 --- a/src/sdk.js +++ /dev/null @@ -1,168 +0,0 @@ -import Api from "./api"; -import { generateUUID, randomRangeNumber } from "./utils/index"; - -/** - * SDK - */ -class Sdk extends Api { - constructor(juejin) { - super(); - this.juejin = juejin; - this.baseURL = ""; - Object.assign(this.headers, { - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "cross-site" - }); - this.requestInterceptor = config => { - return config; - }; - - this.responseInterceptor = res => { - if ("e" in res) { - return res; - } - if (res.errno !== 200) { - throw new Error(res.message); - } - return res.data; - }; - - this.sdk_type = "npm"; - this.sdk_lib = "js"; - this.sdk_version = "4.2.9"; - } - - async slardarSDKSetting() { - return this.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { - headers: { - cookie: `MONITOR_WEB_ID=${this.juejin.cookie.get("MONITOR_WEB_ID")}` - } - }); - } - - async list(events = []) { - const cookieTokens = this.juejin.getCookieTokens(); - const userInfo = this.juejin.getUser(); - const userIsLogin = !!userInfo; - - const data = [{ - events, - header: { - app_id: Number(cookieTokens.aid), - browser: "Chrome", - browser_version: "99.0.4844.51", - custom: JSON.stringify(userIsLogin ? { - student_verify_status: userInfo.student_status ? "student" : "not_student", - user_level: userInfo.level - }: {}), - device_model: "Windows NT 10.0", - os_name: "windows", - os_version: "10", - resolution: "1920x1080", - screen_width: 1920, - screen_height: 1080, - width: 1920, - height: 1080, - language: "zh-CN", - platform: "Web", - referrer: "", - referrer_host: "", - sdk_lib: this.sdk_lib, - sdk_version: this.sdk_version, - timezone: 8, - tz_offset: -28800, - utm_campaign: "ad", - utm_medium: "user_center" - }, - local_time: Date.now() / 1000 >> 0, - user: { - user_id: this.juejin.getUser().user_id, - user_is_login: userIsLogin, - user_unique_id: cookieTokens.user_unique_id, - web_id: cookieTokens.web_id - } - }]; - - return this.post("https://mcs.snssdk.com/list", { - headers: { - host: "mcs.snssdk.com" - }, - data - }); - } - - // 模拟成长API事件埋点 - async mockTrackGrowthEvent() { - const sessionid = generateUUID(); - const localtime = Date.now(); - const eventindex = localtime + randomRangeNumber(4000, 10000); - - return this.list([ - { - ab_sdk_version: "90000611,90001195", - event: "task_center_sign_in_visit", - is_bav: 0, - local_time_ms: localtime + 1, - params: JSON.stringify({ - event_index: eventindex + 1, - _staging_flag: 0, - }), - session_id: sessionid - }, - { - ab_sdk_version: "90000611,90001195", - event: "predefine_pageview", - is_bav: 0, - local_time_ms: localtime, - params: JSON.stringify({ - $is_first_time: "false", - event_index: eventindex, - referrer: "", - time: localtime, - title: "每日签到 - 掘金", - url: "https://juejin.cn/user/center/signin", - url_path: "/user/center/signin", - _staging_flag: 0 - }), - session_id: sessionid - } - ]); - } - - // 模拟OnLoad事件埋点 - async mockTrackOnloadEvent() { - const cookieTokens = this.juejin.getCookieTokens(); - const localtime = Date.now(); - - return this.list([ - { - event: "onload", - local_time_ms: localtime, - params: JSON.stringify({ - app_id: Number(cookieTokens.aid), - app_name: "", - sdk_version: this.sdk_version, - sdk_type: this.sdk_type, - sdk_config: { - app_id: Number(cookieTokens.aid), - channel: "cn", - log: false, - enable_ab_test: true, - ab_channel_domain: "https://abtestvm.bytedance.com", - cross_subdomain: true, - cookie_expire: 94608000000, - cookie_domain: "juejin.cn", - enable_stay_duration: true, - maxDuration: 1200000 - } - }) - } - ]); - } -} - -export default Sdk; diff --git a/src/sdk.ts b/src/sdk.ts new file mode 100644 index 00000000..1432bdd6 --- /dev/null +++ b/src/sdk.ts @@ -0,0 +1,185 @@ +import { generateUUID, randomRangeNumber } from "./utils/index"; +import JuejinHelper from "./index"; +import snssdk from "./services/snssdk"; + +interface SDKSetting { + cookieid: string; + reportDomain: string; + bid: string; + plugins: { + [prop: string]: any; + }; + last_modify_time: string; + heatmap: { + [prop: string]: any; + }; + setting: { + [prop: string]: any; + }; + whitelist: any[]; +} + +type jsonstring = string; + +interface SDKEvent { + event: string; + local_time_ms: number; + params: jsonstring; + ab_sdk_version?: string; + is_bav?: number; + session_id?: string; +} + +interface SDKListResult { + e: number; +} + +/** + * SDK + */ +class Sdk { + juejin: JuejinHelper; + sdk_type: string = "npm"; + sdk_lib: string = "js"; + sdk_version: string = "4.2.9"; + + constructor(juejin: JuejinHelper) { + this.juejin = juejin; + } + + async slardarSDKSetting(): Promise { + return snssdk.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + headers: { + cookie: `MONITOR_WEB_ID=${this.juejin.cookie.get("MONITOR_WEB_ID")}` + } + }); + } + + async list(events: SDKEvent[] = []): Promise { + const cookieTokens = this.juejin.getCookieTokens(); + const userInfo = this.juejin.getUser(); + const userIsLogin = !!userInfo; + + const data = [ + { + events, + header: { + app_id: Number(cookieTokens?.aid), + browser: "Chrome", + browser_version: "99.0.4844.51", + custom: JSON.stringify( + userIsLogin + ? { + student_verify_status: userInfo.student_status ? "student" : "not_student", + user_level: userInfo.level + } + : {} + ), + device_model: "Windows NT 10.0", + os_name: "windows", + os_version: "10", + resolution: "1920x1080", + screen_width: 1920, + screen_height: 1080, + width: 1920, + height: 1080, + language: "zh-CN", + platform: "Web", + referrer: "", + referrer_host: "", + sdk_lib: this.sdk_lib, + sdk_version: this.sdk_version, + timezone: 8, + tz_offset: -28800, + utm_campaign: "ad", + utm_medium: "user_center" + }, + local_time: (Date.now() / 1000) >> 0, + user: { + user_id: this.juejin.getUser()?.user_id || "", + user_is_login: userIsLogin, + user_unique_id: cookieTokens?.user_unique_id || "", + web_id: cookieTokens?.web_id || "" + } + } + ]; + + return snssdk.post("https://mcs.snssdk.com/list", { + headers: { + host: "mcs.snssdk.com" + }, + data + }); + } + + // 模拟成长API事件埋点 + async mockTrackGrowthEvent() { + const sessionid = generateUUID(); + const localtime = Date.now(); + const eventindex = localtime + randomRangeNumber(4000, 10000); + + return this.list([ + { + ab_sdk_version: "90000611,90001195", + event: "task_center_sign_in_visit", + is_bav: 0, + local_time_ms: localtime + 1, + params: JSON.stringify({ + event_index: eventindex + 1, + _staging_flag: 0 + }), + session_id: sessionid + }, + { + ab_sdk_version: "90000611,90001195", + event: "predefine_pageview", + is_bav: 0, + local_time_ms: localtime, + params: JSON.stringify({ + $is_first_time: "false", + event_index: eventindex, + referrer: "", + time: localtime, + title: "每日签到 - 掘金", + url: "https://juejin.cn/user/center/signin", + url_path: "/user/center/signin", + _staging_flag: 0 + }), + session_id: sessionid + } + ]); + } + + // 模拟OnLoad事件埋点 + async mockTrackOnloadEvent() { + const cookieTokens = this.juejin.getCookieTokens(); + const localtime = Date.now(); + + return this.list([ + { + event: "onload", + local_time_ms: localtime, + params: JSON.stringify({ + app_id: Number(cookieTokens?.aid), + app_name: "", + sdk_version: this.sdk_version, + sdk_type: this.sdk_type, + sdk_config: { + app_id: Number(cookieTokens?.aid), + channel: "cn", + log: false, + enable_ab_test: true, + ab_channel_domain: "https://abtestvm.bytedance.com", + cross_subdomain: true, + cookie_expire: 94608000000, + cookie_domain: "juejin.cn", + enable_stay_duration: true, + maxDuration: 1200000 + } + }) + } + ]); + } +} + +export default Sdk; diff --git a/src/services/api.ts b/src/services/api.ts new file mode 100644 index 00000000..28591e01 --- /dev/null +++ b/src/services/api.ts @@ -0,0 +1,31 @@ +import axios from "axios"; + +const instance = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/" + } +}); + +instance.interceptors.request.use( + function (config) { + return config; + }, + function (error) { + return Promise.reject(error); + } +); + +instance.interceptors.response.use( + function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, + function (error) { + return Promise.reject(error); + } +); + +export default instance; diff --git a/src/services/snssdk.ts b/src/services/snssdk.ts new file mode 100644 index 00000000..bbe703b4 --- /dev/null +++ b/src/services/snssdk.ts @@ -0,0 +1,40 @@ +import axios from "axios"; + +const instance = axios.create({ + baseURL: "", + headers: { + // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site" + } +}); + +instance.interceptors.request.use( + function (config) { + return config; + }, + function (error) { + return Promise.reject(error); + } +); + +instance.interceptors.response.use( + function (response) { + const res = response.data; + if ("e" in res) { + return res; + } + if (res.errno !== 200) { + throw new Error(res.message); + } + return res.data; + }, + function (error) { + return Promise.reject(error); + } +); + +export default instance; diff --git a/src/utils/cookie.ts b/src/utils/cookie.ts new file mode 100644 index 00000000..6d2bfb6d --- /dev/null +++ b/src/utils/cookie.ts @@ -0,0 +1,48 @@ +class Cookie { + cookie: string = ""; + stack: Map = new Map(); + + constructor(cookie: string = "") { + if (cookie) { + this.setCookieValue(cookie); + } + } + + setCookieValue(cookie: string = "") { + this.stack.clear(); + this.cookie = cookie; + cookie + .split("; ") + .map(string => string.split("=")) + .forEach(([key, value]) => { + this.stack.set(key, value); + }); + } + + get(key: string) { + return this.stack.get(key); + } + + has(key: string) { + return this.stack.has(key); + } + + set(key: string, value: unknown) { + return this.stack.set(key, value); + } + + entries() { + return this.stack.entries(); + } + + clear(): void { + this.cookie = ""; + this.stack.clear(); + } + + toString(): string { + return this.cookie; + } +} + +export default Cookie; diff --git a/test/test-sdk.js b/test/test-sdk.js index 152f6bc0..eec508e2 100644 --- a/test/test-sdk.js +++ b/test/test-sdk.js @@ -1,4 +1,4 @@ -const JuejinHelper = require('..'); +const JuejinHelper = require(".."); const mockCookie = `juejin-cookies`; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..bf334c53 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": false, + "experimentalDecorators": true + }, + "include": ["src/*.ts", "src/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts new file mode 100644 index 00000000..4810e282 --- /dev/null +++ b/types/juejin-helper.d.ts @@ -0,0 +1,85 @@ +interface SDKSetting { + cookieid: string; + reportDomain: string; + bid: string; + plugins: { + [prop: string]: any; + }; + last_modify_time: string; + heatmap: { + [prop: string]: any; + }; + setting: { + [prop: string]: any; + }; + whitelist: any[]; +} +declare type jsonstring = string; +interface SDKEvent { + event: string; + local_time_ms: number; + params: jsonstring; + ab_sdk_version?: string; + is_bav?: number; + session_id?: string; +} +interface SDKListResult { + e: number; +} +/** + * SDK + */ +declare class Sdk { + juejin: JuejinHelper; + sdk_type: string; + sdk_lib: string; + sdk_version: string; + constructor(juejin: JuejinHelper); + slardarSDKSetting(): Promise; + list(events?: SDKEvent[]): Promise; + mockTrackGrowthEvent(): Promise; + mockTrackOnloadEvent(): Promise; +} + +declare class Cookie { + cookie: string; + stack: Map; + constructor(cookie?: string); + setCookieValue(cookie?: string): void; + get(key: string): unknown; + has(key: string): boolean; + set(key: string, value: unknown): Map; + entries(): IterableIterator<[string, unknown]>; + clear(): void; + toString(): string; +} + +declare type JuejinUserProps = { + user_id: string; + user_name: string; + [prop: string]: any; +} | null; +declare type JuejinCookieTokens = { + aid: string; + uuid: string; + user_unique_id: string; + web_id: string; +} | null; +declare class JuejinHelper { + cookie: Cookie; + cookieTokens: JuejinCookieTokens; + user: JuejinUserProps; + login(cookie: string): Promise; + logout(): Promise; + getCookie(): string; + getCookieTokens(): JuejinCookieTokens; + getUser(): JuejinUserProps; + makeToken(): Promise; + sdk(): Sdk; + growth(): void; + seagold(): void; + numpuzz(): void; + bugfix(): void; +} + +export { JuejinHelper as default }; diff --git a/yarn.lock b/yarn.lock index b7d6acde..4331e489 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,924 +3,137 @@ "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" - integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/core@^7.16.12": - version "7.16.12" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" - integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.12" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.10" - "@babel/types" "^7.16.8" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== - dependencies: - "@babel/types" "^7.16.8" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": - version "7.16.10" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" - integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" - integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": - version "7.16.12" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" - integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" - integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" - integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== +"@babel/runtime-corejs3@^7.10.2": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz#7bacecd1cb2dd694eacd32a91fcf7021c20770ae" + integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-destructuring@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" - integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + core-js-pure "^3.20.2" + regenerator-runtime "^0.13.4" -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== +"@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" + integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + regenerator-runtime "^0.13.4" -"@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" +"@eslint/eslintrc@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" + integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.3.2" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.4" -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== - dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== +"@next/eslint-plugin-next@12.2.4": + version "12.2.4" + resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.4.tgz#b7496cf11050577cfa815612c541195c1b4871eb" + integrity sha512-ChDkUIkJeYWKRx+FdF+EhUgvKtK1wF+Xew4Os7ef3iAjMch5GGBiezw2zGXTa/C0E6potz4j11EpX89mngffug== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" + glob "7.1.7" -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - -"@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-regenerator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" - integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/preset-env@^7.16.11": - version "7.16.11" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" -"@babel/runtime@^7.8.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== +"@rollup/plugin-commonjs@^22.0.2": + version "22.0.2" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz#ee8ca8415cda30d383b4096aad5222435b4b69b6" + integrity sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg== dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": - version "7.16.10" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" - integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== +"@rollup/plugin-node-resolve@^13.3.0": + version "13.3.0" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" + integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.10" - "@babel/types" "^7.16.8" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.4.4": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" - integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@rollup/plugin-babel@^5.3.0": - version "5.3.0" - resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" - integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== - dependencies: - "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + deepmerge "^4.2.2" + is-builtin-module "^3.1.0" + is-module "^1.0.0" + resolve "^1.19.0" -"@rollup/plugin-commonjs@^11.0.1": - version "11.1.0" - resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" - integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== +"@rollup/plugin-sucrase@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@rollup/plugin-sucrase/-/plugin-sucrase-4.0.4.tgz#0a3b3d97cdc239ec3399f5a10711f751e9f95d98" + integrity sha512-YH4J8yoJb5EVnLhAwWxYAQNh2SJOR+SdZ6XdgoKEv6Kxm33riYkM8MlMaggN87UoISP52qAFyZ5ey56wu6umGg== dependencies: - "@rollup/pluginutils" "^3.0.8" - commondir "^1.0.1" - estree-walker "^1.0.1" - glob "^7.1.2" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - -"@rollup/plugin-node-resolve@^7.0.0": - version "7.1.3" - resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz#80de384edfbd7bfc9101164910f86078151a3eca" - integrity sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q== - dependencies: - "@rollup/pluginutils" "^3.0.8" - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.14.2" + "@rollup/pluginutils" "^4.1.1" + sucrase "^3.20.0" -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": +"@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== @@ -929,32 +142,114 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^4.1.1", "@rollup/pluginutils@^4.1.2": + version "4.2.1" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@rushstack/eslint-patch@^1.1.3": + version "1.1.4" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" + integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== + "@types/estree@*": - version "0.0.50" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + version "1.0.0" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + "@types/node@*": - version "17.0.13" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz#5ed7ed7c662948335fcad6c412bb42d99ea754e3" - integrity sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw== + version "18.6.4" + resolved "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" + integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg== -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" -acorn@^7.1.0: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +"@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.32.0": + version "5.32.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" + integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== + dependencies: + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/typescript-estree" "5.32.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.32.0": + version "5.32.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" + integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg== + dependencies: + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/visitor-keys" "5.32.0" + +"@typescript-eslint/types@5.32.0": + version "5.32.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" + integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== + +"@typescript-eslint/typescript-estree@5.32.0": + version "5.32.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" + integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg== + dependencies: + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/visitor-keys" "5.32.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.32.0": + version "5.32.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" + integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g== + dependencies: + "@typescript-eslint/types" "5.32.0" + eslint-visitor-keys "^3.3.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" @@ -963,36 +258,94 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - object.assign "^4.1.0" + color-convert "^2.0.1" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +array-includes@^3.1.4, array-includes@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" + integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.2.5: + version "1.3.0" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +array.prototype.flatmap@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axe-core@^4.4.3: + version "4.4.3" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" + integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + follow-redirects "^1.14.9" + form-data "^4.0.0" + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== balanced-match@^1.0.0: version "1.0.2" @@ -1007,28 +360,24 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -browserslist@^4.17.5, browserslist@^4.19.1: - version "4.19.1" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + fill-range "^7.0.1" buffer-equal-constant-time@1.0.1: version "1.0.1" - resolved "https://registry.npm.taobao.org/buffer-equal-constant-time/download/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -call-bind@^1.0.0: +call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -1036,10 +385,10 @@ call-bind@^1.0.0: function-bind "^1.1.1" get-intrinsic "^1.0.2" -caniuse-lite@^1.0.30001286: - version "1.0.30001304" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz#38af55ed3fc8220cb13e35e6e7309c8c65a05559" - integrity sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ== +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== chalk@^2.0.0: version "2.4.2" @@ -1050,6 +399,14 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1057,110 +414,616 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== +core-js-pure@^3.20.2: + version "3.24.1" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: - safe-buffer "~5.1.1" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" - integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - browserslist "^4.19.1" - semver "7.0.0" + ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: - version "4.3.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: - object-keys "^1.0.12" + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" ecdsa-sig-formatter@1.0.11: version "1.0.11" - resolved "https://registry.nlark.com/ecdsa-sig-formatter/download/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha1-rg8PothQRe8UqBfao86azQSJ5b8= + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" -electron-to-chromium@^1.4.17: - version "1.4.61" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" - integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: + version "1.20.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" + integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + regexp.prototype.flags "^1.4.3" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@^12.1.5: + version "12.2.4" + resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.4.tgz#5f12f2eff1fabc3f1fb7527ceb8a4ad00235b011" + integrity sha512-r3keSLY1Z+rN+ASN8nmWwZ+AsMl6IrPGRWgbQhKHcop4/fk1hJGxE9Xf/mYMkV07+1Q/catchw25lu525HFy5Q== + dependencies: + "@next/eslint-plugin-next" "12.2.4" + "@rushstack/eslint-patch" "^1.1.3" + "@typescript-eslint/parser" "^5.21.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^2.7.1" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsx-a11y "^6.5.1" + eslint-plugin-react "^7.29.4" + eslint-plugin-react-hooks "^4.5.0" + +eslint-config-prettier@^8.5.0: + version "8.5.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" + integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== + +eslint-import-resolver-node@^0.3.6: + version "0.3.6" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-import-resolver-typescript@^2.7.1: + version "2.7.1" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" + integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== + dependencies: + debug "^4.3.4" + glob "^7.2.0" + is-glob "^4.0.3" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-module-utils@^2.7.3: + version "2.7.3" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + +eslint-plugin-import@^2.26.0: + version "2.26.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" + integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== + dependencies: + array-includes "^3.1.4" + array.prototype.flat "^1.2.5" + debug "^2.6.9" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.6" + eslint-module-utils "^2.7.3" + has "^1.0.3" + is-core-module "^2.8.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.5" + resolve "^1.22.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jsx-a11y@^6.5.1: + version "6.6.1" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz#93736fc91b83fdc38cc8d115deedfc3091aef1ff" + integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== + dependencies: + "@babel/runtime" "^7.18.9" + aria-query "^4.2.2" + array-includes "^3.1.5" + ast-types-flow "^0.0.7" + axe-core "^4.4.3" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + has "^1.0.3" + jsx-ast-utils "^3.3.2" + language-tags "^1.0.5" + minimatch "^3.1.2" + semver "^6.3.0" + +eslint-plugin-prettier@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react-hooks@^4.5.0: + version "4.6.0" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + +eslint-plugin-react@^7.29.4: + version "7.30.1" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== + dependencies: + array-includes "^3.1.5" + array.prototype.flatmap "^1.3.0" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.5" + object.fromentries "^2.0.5" + object.hasown "^1.1.1" + object.values "^1.1.5" + prop-types "^15.8.1" + resolve "^2.0.0-next.3" + semver "^6.3.0" + string.prototype.matchall "^4.0.7" + +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.14.0: + version "8.21.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" + integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== + dependencies: + "@eslint/eslintrc" "^1.3.0" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.3.3" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.6" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" + integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== + +follow-redirects@^1.14.9: + version "1.15.1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" + has-symbols "^1.0.3" -glob@^7.1.2: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1169,20 +1032,92 @@ glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +glob@7.1.7: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.1.6, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + 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" + +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== -has-symbols@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" has@^1.0.3: version "1.0.3" @@ -1191,10 +1126,28 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -1204,50 +1157,179 @@ inherits@2: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: + get-intrinsic "^1.1.0" has "^1.0.3" + side-channel "^1.0.4" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.10.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" + integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" is-module@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-reference@^1.1.2: +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-reference@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: "@types/estree" "*" -js-tokens@^4.0.0: +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: - minimist "^1.2.5" + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" jsonwebtoken@^8.5.1: version "8.5.1" - resolved "https://registry.npmmirror.com/jsonwebtoken/download/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== dependencies: jws "^3.2.2" @@ -1261,10 +1343,18 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" + integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== + dependencies: + array-includes "^3.1.5" + object.assign "^4.1.2" + jwa@^1.4.1: version "1.4.1" - resolved "https://registry.npm.taobao.org/jwa/download/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha1-dDwymFy56YZVUw1TZBtmyGRbA5o= + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== dependencies: buffer-equal-constant-time "1.0.1" ecdsa-sig-formatter "1.0.11" @@ -1272,70 +1362,175 @@ jwa@^1.4.1: jws@^3.2.2: version "3.2.2" - resolved "https://registry.nlark.com/jws/download/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ= + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== dependencies: jwa "^1.4.1" safe-buffer "^5.0.1" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +language-subtag-registry@~0.3.2: + version "0.3.22" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + dependencies: + language-subtag-registry "~0.3.2" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" lodash.includes@^4.3.0: version "4.3.0" - resolved "https://registry.npmmirror.com/lodash.includes/download/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isboolean@^3.0.3: version "3.0.3" - resolved "https://registry.npmmirror.com/lodash.isboolean/download/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== lodash.isinteger@^4.0.4: version "4.0.4" - resolved "https://registry.npm.taobao.org/lodash.isinteger/download/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" - resolved "https://registry.npm.taobao.org/lodash.isnumber/download/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.npm.taobao.org/lodash.isplainobject/download/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.npmmirror.com/lodash.isstring/download/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.once@^4.0.0: version "4.1.1" - resolved "https://registry.npm.taobao.org/lodash.once/download/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -magic-string@^0.25.2: - version "0.25.7" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - sourcemap-codec "^1.4.4" + js-tokens "^3.0.0 || ^4.0.0" -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.26.1: + version "0.26.2" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz#5331700e4158cd6befda738bb6b0c7b93c0d4432" + integrity sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A== + dependencies: + sourcemap-codec "^1.4.8" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -1344,164 +1539,451 @@ ms@2.1.2: ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.6.tgz?cache=0&sync_timestamp=1636395469986&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha1-F1GnwBg06OFpd1hzLp77burfr4k= +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: - whatwg-url "^5.0.0" + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -object-keys@^1.0.12, object-keys@^1.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.0, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.2: + version "4.1.3" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" + integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" +object.entries@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.hasown@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3" + integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== + dependencies: + define-properties "^1.1.4" + es-abstract "^1.19.5" + +object.values@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + once@^1.3.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picomatch@^2.2.2: +picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== +pirates@^4.0.1: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: - regenerate "^1.4.2" + find-up "^4.0.0" -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.6.2: + version "2.7.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" + integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== + +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== dependencies: - "@babel/runtime" "^7.8.4" + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== +resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - jsesc "~0.5.0" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.11.0, resolve@^1.14.2: - version "1.22.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@^2.0.0-next.3: + version "2.0.0-next.4" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -rollup@^1.29.0: - version "1.32.1" - resolved "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" + glob "^7.1.3" + +rollup-plugin-dts@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-4.2.2.tgz#82876b8784213af29b02cf260b45e404ff835ce1" + integrity sha512-A3g6Rogyko/PXeKoUlkjxkP++8UDVpgA7C+Tdl77Xj4fgEaIjPSnxRmR53EzvoYy97VMVwLAOcWJudaVAuxneQ== + dependencies: + magic-string "^0.26.1" + optionalDependencies: + "@babel/code-frame" "^7.16.7" + +rollup-plugin-typescript2@^0.32.1: + version "0.32.1" + resolved "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.32.1.tgz#470ded8e1965efac02043cc0ef4a7fa36bed83b9" + integrity sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw== + dependencies: + "@rollup/pluginutils" "^4.1.2" + find-cache-dir "^3.3.2" + fs-extra "^10.0.0" + resolve "^1.20.0" + tslib "^2.4.0" + +rollup@^2.77.2: + version "2.77.2" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" + integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" safe-buffer@^5.0.1: version "5.2.1" resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^5.6.0: version "5.7.1" - resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463540350&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +semver@^7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -sourcemap-codec@^1.4.4: +sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +string.prototype.matchall@^4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" + integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.4.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +sucrase@^3.20.0: + version "3.25.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.25.0.tgz#6dffa34e614b3347877507a4380cc4f022b7b7aa" + integrity sha512-WxTtwEYXSmZArPGStGBicyRsg5TBEFhT5b7N+tF+zauImP0Acy+CoUK0/byJ8JNPK/5lbpWIVuFagI4+0l85QQ== + dependencies: + commander "^4.0.0" + glob "7.1.6" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1509,63 +1991,159 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" + is-number "^7.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -unicode-property-aliases-ecmascript@^2.0.0: +typescript@>=3.0.0: + version "4.7.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz?cache=0&sync_timestamp=1634673865107&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From b452300c767bd47f57fcca75ca4986b2cbde0ac7 Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 16:32:02 +0800 Subject: [PATCH 036/131] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/package.json b/package.json index c61e83cc..b0fe16ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "name": "juejin-helper", "version": "1.6.0", + "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", + "author": "Derek Li", + "license": "Apache-2.0", "source": "src/index.ts", "main": "build/juejin-helper.c.js", "module": "build/juejin-helper.esm.js", @@ -9,6 +12,17 @@ "watch": "rollup -c -w", "build": "rollup -c" }, + "files": [ + "build", + "types", + "LICENSE", + "README.md", + "package.json" + ], + "keywords": [ + "juejin", + "helper" + ], "dependencies": { "axios": "^0.27.2", "jsonwebtoken": "^8.5.1", @@ -28,5 +42,13 @@ "rollup-plugin-dts": "^4.2.2", "rollup-plugin-typescript2": "^0.32.1", "typescript": ">=3.0.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/iDerekLi/juejin-helper.git" + }, + "homepage": "https://github.com/iDerekLi/juejin-helper#readme", + "bugs": { + "url": "https://github.com/iDerekLi/juejin-helper/issues" } } From 52d0535ed0b0fa7a71c13ae1997f8de727d7b53b Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 16:56:36 +0800 Subject: [PATCH 037/131] =?UTF-8?q?refactor:=20=E6=9E=84=E5=BB=BAgrowth?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/juejin-helper.c.js | 235 ++++++++++++++++++++++++++++++------- build/juejin-helper.esm.js | 235 ++++++++++++++++++++++++++++++------- src/cookie.js | 44 ------- src/growth.js | 103 ---------------- src/growth.ts | 88 ++++++++++++++ src/index.ts | 5 +- src/services/growth.ts | 47 ++++++++ test/test-growth.js | 2 +- types/juejin-helper.d.ts | 72 ++++++++++-- 9 files changed, 581 insertions(+), 250 deletions(-) delete mode 100644 src/cookie.js delete mode 100644 src/growth.js create mode 100644 src/growth.ts create mode 100644 src/services/growth.ts diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js index 098bd3fa..65343e23 100644 --- a/build/juejin-helper.c.js +++ b/build/juejin-helper.c.js @@ -60,18 +60,18 @@ function __generator(thisArg, body) { } } -var instance$1 = axios__default["default"].create({ +var instance$2 = axios__default["default"].create({ baseURL: "https://api.juejin.cn", headers: { referer: "https://juejin.cn/" } }); -instance$1.interceptors.request.use(function (config) { +instance$2.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance$1.interceptors.response.use(function (response) { +instance$2.interceptors.response.use(function (response) { if (response.data.err_no) { throw new Error(response.data.err_msg); } @@ -111,7 +111,51 @@ function generateUUID() { return uuid.v4(); } -var instance = axios__default["default"].create({ +var Cookie = /** @class */ (function () { + function Cookie(cookie) { + if (cookie === void 0) { cookie = ""; } + this.cookie = ""; + this.stack = new Map(); + if (cookie) { + this.setCookieValue(cookie); + } + } + Cookie.prototype.setCookieValue = function (cookie) { + var _this = this; + if (cookie === void 0) { cookie = ""; } + this.stack.clear(); + this.cookie = cookie; + cookie + .split("; ") + .map(function (string) { return string.split("="); }) + .forEach(function (_a) { + var key = _a[0], value = _a[1]; + _this.stack.set(key, value); + }); + }; + Cookie.prototype.get = function (key) { + return this.stack.get(key); + }; + Cookie.prototype.has = function (key) { + return this.stack.has(key); + }; + Cookie.prototype.set = function (key, value) { + return this.stack.set(key, value); + }; + Cookie.prototype.entries = function () { + return this.stack.entries(); + }; + Cookie.prototype.clear = function () { + this.cookie = ""; + this.stack.clear(); + }; + Cookie.prototype.toString = function () { + return this.cookie; + }; + return Cookie; +}()); + +var instance$1 = axios__default["default"].create({ baseURL: "", headers: { // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", @@ -122,12 +166,12 @@ var instance = axios__default["default"].create({ "Sec-Fetch-Site": "cross-site" } }); -instance.interceptors.request.use(function (config) { +instance$1.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance.interceptors.response.use(function (response) { +instance$1.interceptors.response.use(function (response) { var res = response.data; if ("e" in res) { return res; @@ -153,7 +197,7 @@ var Sdk = /** @class */ (function () { Sdk.prototype.slardarSDKSetting = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + return [2 /*return*/, instance$1.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { headers: { cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) } @@ -211,7 +255,7 @@ var Sdk = /** @class */ (function () { } } ]; - return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { + return [2 /*return*/, instance$1.post("https://mcs.snssdk.com/list", { headers: { host: "mcs.snssdk.com" }, @@ -298,48 +342,151 @@ var Sdk = /** @class */ (function () { return Sdk; }()); -var Cookie = /** @class */ (function () { - function Cookie(cookie) { - if (cookie === void 0) { cookie = ""; } - this.cookie = ""; - this.stack = new Map(); - if (cookie) { - this.setCookieValue(cookie); - } +var instance = axios__default["default"].create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/" } - Cookie.prototype.setCookieValue = function (cookie) { - var _this = this; - if (cookie === void 0) { cookie = ""; } - this.stack.clear(); - this.cookie = cookie; - cookie - .split("; ") - .map(function (string) { return string.split("="); }) - .forEach(function (_a) { - var key = _a[0], value = _a[1]; - _this.stack.set(key, value); +}); +var juejin = null; +instance.interceptors.request.use(function (config) { + // @ts-ignore + config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); + if (juejin.user) { + var tokens = juejin.getCookieTokens(); + // @ts-ignore + config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); + } + return config; +}, function (error) { + return Promise.reject(error); +}); +instance.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; +}, function (error) { + return Promise.reject(error); +}); +function setJuejin(context) { + juejin = context; +} + +var Growth = /** @class */ (function () { + function Growth(juejin) { + setJuejin(juejin); + } + /** + * 获取统计签到天数 + * @returns {Promise<*>} + * { + * cont_count 连续签到天数 + * sum_count 累计签到天数 + * } + */ + Growth.prototype.getCounts = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_counts")]; + }); }); }; - Cookie.prototype.get = function (key) { - return this.stack.get(key); + /** + * 获取当前矿石数 + * @returns {Promise<*>} + * number 当前矿石数 + */ + Growth.prototype.getCurrentPoint = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_cur_point")]; + }); + }); }; - Cookie.prototype.has = function (key) { - return this.stack.has(key); + /** + * 获取今日签到状态 + * @returns {Promise<*>} + * boolean 是否签到 + */ + Growth.prototype.getTodayStatus = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_today_status")]; + }); + }); }; - Cookie.prototype.set = function (key, value) { - return this.stack.set(key, value); + /** + * 获取月签到日历 + * @returns {Promise<*>} + * [ + * { + * date: timestamp(格式1646150400) + * point: number增加矿石数 + * status: enum(1 今日, 4 未签到, 3 已签到) + * } + * ] + */ + Growth.prototype.getByMonth = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_by_month")]; + }); + }); }; - Cookie.prototype.entries = function () { - return this.stack.entries(); + Growth.prototype.getLotteryConfig = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/lottery_config/get")]; + }); + }); }; - Cookie.prototype.clear = function () { - this.cookie = ""; - this.stack.clear(); + Growth.prototype.drawLottery = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery/draw")]; + }); + }); }; - Cookie.prototype.toString = function () { - return this.cookie; + Growth.prototype.checkIn = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/check_in")]; + }); + }); }; - return Cookie; + Growth.prototype.getLotteriesLuckyUsers = function (_a) { + var _b = _a === void 0 ? {} : _a, _c = _b.page_no, page_no = _c === void 0 ? 1 : _c, _d = _b.page_size, page_size = _d === void 0 ? 5 : _d; + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_e) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery_history/global_big", { + data: { + page_no: page_no, + page_size: page_size + } + })]; + }); + }); + }; + Growth.prototype.dipLucky = function (lottery_history_id) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/dip_lucky", { + data: { + lottery_history_id: lottery_history_id + } + })]; + }); + }); + }; + Growth.prototype.getMyLucky = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/my_lucky")]; + }); + }); + }; + return Growth; }()); var JuejinHelper = /** @class */ (function () { @@ -357,7 +504,7 @@ var JuejinHelper = /** @class */ (function () { this.cookie.setCookieValue(cookie); this.cookieTokens = parseCookieTokens(this.cookie); _a = this; - return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { + return [4 /*yield*/, instance$2.get("/user_api/v1/user/get", { headers: { cookie: this.getCookie() } })]; case 1: @@ -388,7 +535,7 @@ var JuejinHelper = /** @class */ (function () { JuejinHelper.prototype.makeToken = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance$1.get("/get/token", { + return [2 /*return*/, instance$2.get("/get/token", { baseURL: "https://juejin.cn", headers: { cookie: this.getCookie() } })]; @@ -399,7 +546,7 @@ var JuejinHelper = /** @class */ (function () { return new Sdk(this); }; JuejinHelper.prototype.growth = function () { - // return new Growth(this); + return new Growth(this); }; JuejinHelper.prototype.seagold = function () { // return new SeaGold(this); diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js index df99802d..5ea915eb 100644 --- a/build/juejin-helper.esm.js +++ b/build/juejin-helper.esm.js @@ -54,18 +54,18 @@ function __generator(thisArg, body) { } } -var instance$1 = axios.create({ +var instance$2 = axios.create({ baseURL: "https://api.juejin.cn", headers: { referer: "https://juejin.cn/" } }); -instance$1.interceptors.request.use(function (config) { +instance$2.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance$1.interceptors.response.use(function (response) { +instance$2.interceptors.response.use(function (response) { if (response.data.err_no) { throw new Error(response.data.err_msg); } @@ -105,7 +105,51 @@ function generateUUID() { return v4(); } -var instance = axios.create({ +var Cookie = /** @class */ (function () { + function Cookie(cookie) { + if (cookie === void 0) { cookie = ""; } + this.cookie = ""; + this.stack = new Map(); + if (cookie) { + this.setCookieValue(cookie); + } + } + Cookie.prototype.setCookieValue = function (cookie) { + var _this = this; + if (cookie === void 0) { cookie = ""; } + this.stack.clear(); + this.cookie = cookie; + cookie + .split("; ") + .map(function (string) { return string.split("="); }) + .forEach(function (_a) { + var key = _a[0], value = _a[1]; + _this.stack.set(key, value); + }); + }; + Cookie.prototype.get = function (key) { + return this.stack.get(key); + }; + Cookie.prototype.has = function (key) { + return this.stack.has(key); + }; + Cookie.prototype.set = function (key, value) { + return this.stack.set(key, value); + }; + Cookie.prototype.entries = function () { + return this.stack.entries(); + }; + Cookie.prototype.clear = function () { + this.cookie = ""; + this.stack.clear(); + }; + Cookie.prototype.toString = function () { + return this.cookie; + }; + return Cookie; +}()); + +var instance$1 = axios.create({ baseURL: "", headers: { // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", @@ -116,12 +160,12 @@ var instance = axios.create({ "Sec-Fetch-Site": "cross-site" } }); -instance.interceptors.request.use(function (config) { +instance$1.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance.interceptors.response.use(function (response) { +instance$1.interceptors.response.use(function (response) { var res = response.data; if ("e" in res) { return res; @@ -147,7 +191,7 @@ var Sdk = /** @class */ (function () { Sdk.prototype.slardarSDKSetting = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + return [2 /*return*/, instance$1.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { headers: { cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) } @@ -205,7 +249,7 @@ var Sdk = /** @class */ (function () { } } ]; - return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { + return [2 /*return*/, instance$1.post("https://mcs.snssdk.com/list", { headers: { host: "mcs.snssdk.com" }, @@ -292,48 +336,151 @@ var Sdk = /** @class */ (function () { return Sdk; }()); -var Cookie = /** @class */ (function () { - function Cookie(cookie) { - if (cookie === void 0) { cookie = ""; } - this.cookie = ""; - this.stack = new Map(); - if (cookie) { - this.setCookieValue(cookie); - } +var instance = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/" } - Cookie.prototype.setCookieValue = function (cookie) { - var _this = this; - if (cookie === void 0) { cookie = ""; } - this.stack.clear(); - this.cookie = cookie; - cookie - .split("; ") - .map(function (string) { return string.split("="); }) - .forEach(function (_a) { - var key = _a[0], value = _a[1]; - _this.stack.set(key, value); +}); +var juejin = null; +instance.interceptors.request.use(function (config) { + // @ts-ignore + config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); + if (juejin.user) { + var tokens = juejin.getCookieTokens(); + // @ts-ignore + config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); + } + return config; +}, function (error) { + return Promise.reject(error); +}); +instance.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; +}, function (error) { + return Promise.reject(error); +}); +function setJuejin(context) { + juejin = context; +} + +var Growth = /** @class */ (function () { + function Growth(juejin) { + setJuejin(juejin); + } + /** + * 获取统计签到天数 + * @returns {Promise<*>} + * { + * cont_count 连续签到天数 + * sum_count 累计签到天数 + * } + */ + Growth.prototype.getCounts = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_counts")]; + }); }); }; - Cookie.prototype.get = function (key) { - return this.stack.get(key); + /** + * 获取当前矿石数 + * @returns {Promise<*>} + * number 当前矿石数 + */ + Growth.prototype.getCurrentPoint = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_cur_point")]; + }); + }); }; - Cookie.prototype.has = function (key) { - return this.stack.has(key); + /** + * 获取今日签到状态 + * @returns {Promise<*>} + * boolean 是否签到 + */ + Growth.prototype.getTodayStatus = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_today_status")]; + }); + }); }; - Cookie.prototype.set = function (key, value) { - return this.stack.set(key, value); + /** + * 获取月签到日历 + * @returns {Promise<*>} + * [ + * { + * date: timestamp(格式1646150400) + * point: number增加矿石数 + * status: enum(1 今日, 4 未签到, 3 已签到) + * } + * ] + */ + Growth.prototype.getByMonth = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/get_by_month")]; + }); + }); }; - Cookie.prototype.entries = function () { - return this.stack.entries(); + Growth.prototype.getLotteryConfig = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.get("/growth_api/v1/lottery_config/get")]; + }); + }); }; - Cookie.prototype.clear = function () { - this.cookie = ""; - this.stack.clear(); + Growth.prototype.drawLottery = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery/draw")]; + }); + }); }; - Cookie.prototype.toString = function () { - return this.cookie; + Growth.prototype.checkIn = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/check_in")]; + }); + }); }; - return Cookie; + Growth.prototype.getLotteriesLuckyUsers = function (_a) { + var _b = _a === void 0 ? {} : _a, _c = _b.page_no, page_no = _c === void 0 ? 1 : _c, _d = _b.page_size, page_size = _d === void 0 ? 5 : _d; + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_e) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery_history/global_big", { + data: { + page_no: page_no, + page_size: page_size + } + })]; + }); + }); + }; + Growth.prototype.dipLucky = function (lottery_history_id) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/dip_lucky", { + data: { + lottery_history_id: lottery_history_id + } + })]; + }); + }); + }; + Growth.prototype.getMyLucky = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/my_lucky")]; + }); + }); + }; + return Growth; }()); var JuejinHelper = /** @class */ (function () { @@ -351,7 +498,7 @@ var JuejinHelper = /** @class */ (function () { this.cookie.setCookieValue(cookie); this.cookieTokens = parseCookieTokens(this.cookie); _a = this; - return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { + return [4 /*yield*/, instance$2.get("/user_api/v1/user/get", { headers: { cookie: this.getCookie() } })]; case 1: @@ -382,7 +529,7 @@ var JuejinHelper = /** @class */ (function () { JuejinHelper.prototype.makeToken = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance$1.get("/get/token", { + return [2 /*return*/, instance$2.get("/get/token", { baseURL: "https://juejin.cn", headers: { cookie: this.getCookie() } })]; @@ -393,7 +540,7 @@ var JuejinHelper = /** @class */ (function () { return new Sdk(this); }; JuejinHelper.prototype.growth = function () { - // return new Growth(this); + return new Growth(this); }; JuejinHelper.prototype.seagold = function () { // return new SeaGold(this); diff --git a/src/cookie.js b/src/cookie.js deleted file mode 100644 index a72c6ea6..00000000 --- a/src/cookie.js +++ /dev/null @@ -1,44 +0,0 @@ -class Cookie { - constructor(cookie) { - this.cookie = ""; - this.stack = new Map(); - if (cookie) { - this.setCookieValue(cookie); - } - } - - setCookieValue(cookie = "") { - this.stack.clear(); - this.cookie = cookie; - cookie.split("; ").map(string => string.split("=")).forEach(([key, value]) => { - this.stack.set(key, value); - }); - } - - get(key) { - return this.stack.get(key); - } - - has(key) { - return this.stack.has(key); - } - - set(key, value) { - return this.stack.set(key, value); - } - - entries() { - return this.stack.entries(); - } - - clear() { - this.cookie = ""; - this.stack.clear(); - } - - toString() { - return this.cookie; - } -} - -export default Cookie; diff --git a/src/growth.js b/src/growth.js deleted file mode 100644 index f118ee84..00000000 --- a/src/growth.js +++ /dev/null @@ -1,103 +0,0 @@ -import Api from "./api"; - -class Growth extends Api { - constructor(juejin) { - super(); - this.baseURL = "https://api.juejin.cn"; - this.headers.referer = "https://juejin.cn/"; - this.requestInterceptor = config => { - config.headers.cookie = juejin.getCookie(); - if (juejin.user) { - const tokens = juejin.getCookieTokens(); - config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; - } - return config; - }; - this.responseInterceptor = res => { - if (res.err_no) { - throw new Error(res.err_msg); - } - return res.data; - } - } - - /** - * 获取统计签到天数 - * @returns {Promise<*>} - * { - * cont_count 连续签到天数 - * sum_count 累计签到天数 - * } - */ - async getCounts() { - return this.get("/growth_api/v1/get_counts"); - } - - /** - * 获取当前矿石数 - * @returns {Promise<*>} - * number 当前矿石数 - */ - async getCurrentPoint() { - return this.get("/growth_api/v1/get_cur_point"); - } - - /** - * 获取今日签到状态 - * @returns {Promise<*>} - * boolean 是否签到 - */ - async getTodayStatus() { - return this.get("/growth_api/v1/get_today_status"); - } - - /** - * 获取月签到日历 - * @returns {Promise<*>} - * [ - * { - * date: timestamp(格式1646150400) - * point: number增加矿石数 - * status: enum(1 今日, 4 未签到, 3 已签到) - * } - * ] - */ - async getByMonth() { - return this.get("/growth_api/v1/get_by_month"); - } - - async getLotteryConfig() { - return this.get("/growth_api/v1/lottery_config/get"); - } - - async drawLottery() { - return this.post("/growth_api/v1/lottery/draw"); - } - - async checkIn() { - return this.post("/growth_api/v1/check_in"); - } - - async getLotteriesLuckyUsers({ page_no = 1, page_size = 5 } = {}) { - return this.post("/growth_api/v1/lottery_history/global_big", { - data: { - page_no: page_no, - page_size: page_size - } - }); - } - - async dipLucky(lottery_history_id) { - return this.post("/growth_api/v1/lottery_lucky/dip_lucky", { - data: { - lottery_history_id - } - }); - } - - async getMyLucky() { - return this.post("/growth_api/v1/lottery_lucky/my_lucky"); - } -} - -export default Growth; diff --git a/src/growth.ts b/src/growth.ts new file mode 100644 index 00000000..256242c0 --- /dev/null +++ b/src/growth.ts @@ -0,0 +1,88 @@ +import JuejinHelper from "./index"; +import growth, { setJuejin } from "./services/growth"; + +class Growth { + constructor(juejin: JuejinHelper) { + setJuejin(juejin); + } + + /** + * 获取统计签到天数 + * @returns {Promise<*>} + * { + * cont_count 连续签到天数 + * sum_count 累计签到天数 + * } + */ + async getCounts() { + return growth.get("/growth_api/v1/get_counts"); + } + + /** + * 获取当前矿石数 + * @returns {Promise<*>} + * number 当前矿石数 + */ + async getCurrentPoint() { + return growth.get("/growth_api/v1/get_cur_point"); + } + + /** + * 获取今日签到状态 + * @returns {Promise<*>} + * boolean 是否签到 + */ + async getTodayStatus() { + return growth.get("/growth_api/v1/get_today_status"); + } + + /** + * 获取月签到日历 + * @returns {Promise<*>} + * [ + * { + * date: timestamp(格式1646150400) + * point: number增加矿石数 + * status: enum(1 今日, 4 未签到, 3 已签到) + * } + * ] + */ + async getByMonth() { + return growth.get("/growth_api/v1/get_by_month"); + } + + async getLotteryConfig() { + return growth.get("/growth_api/v1/lottery_config/get"); + } + + async drawLottery() { + return growth.post("/growth_api/v1/lottery/draw"); + } + + async checkIn() { + return growth.post("/growth_api/v1/check_in"); + } + + async getLotteriesLuckyUsers({ page_no = 1, page_size = 5 } = {}) { + return growth.post("/growth_api/v1/lottery_history/global_big", { + data: { + page_no: page_no, + page_size: page_size + } + }); + } + + async dipLucky(lottery_history_id: any) { + return growth.post("/growth_api/v1/lottery_lucky/dip_lucky", { + data: { + lottery_history_id + } + }); + } + + async getMyLucky() { + return growth.post("/growth_api/v1/lottery_lucky/my_lucky"); + } +} + +export default Growth; diff --git a/src/index.ts b/src/index.ts index 4b96d3f2..f0ee4d6b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,8 @@ import api from "./services/api"; import { parseCookieTokens } from "./utils/index"; -import Sdk from "./sdk"; import Cookie from "./utils/cookie"; +import Sdk from "./sdk"; +import Growth from "./growth"; type JuejinUserProps = { user_id: string; @@ -58,7 +59,7 @@ class JuejinHelper { } growth() { - // return new Growth(this); + return new Growth(this); } seagold() { diff --git a/src/services/growth.ts b/src/services/growth.ts new file mode 100644 index 00000000..1ccac796 --- /dev/null +++ b/src/services/growth.ts @@ -0,0 +1,47 @@ +import axios from "axios"; +import JuejinHelper from "../index"; + +const instance = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/" + } +}); + +let juejin: JuejinHelper | null = null; + +instance.interceptors.request.use( + function (config) { + if (!juejin) config; + // @ts-ignore + config.headers.cookie = juejin?.getCookie(); + + if ((juejin as JuejinHelper).user) { + const tokens = (juejin as JuejinHelper).getCookieTokens(); + // @ts-ignore + config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; + } + return config; + }, + function (error) { + return Promise.reject(error); + } +); + +instance.interceptors.response.use( + function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, + function (error) { + return Promise.reject(error); + } +); + +export function setJuejin(context: JuejinHelper) { + juejin = context; +} + +export default instance; diff --git a/test/test-growth.js b/test/test-growth.js index 998dbbae..04b276ed 100644 --- a/test/test-growth.js +++ b/test/test-growth.js @@ -1,4 +1,4 @@ -const JuejinHelper = require('..'); +const JuejinHelper = require(".."); const mockCookie = `juejin-cookies`; diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts index 4810e282..523e15ab 100644 --- a/types/juejin-helper.d.ts +++ b/types/juejin-helper.d.ts @@ -1,3 +1,18 @@ +import * as axios from 'axios'; + +declare class Cookie { + cookie: string; + stack: Map; + constructor(cookie?: string); + setCookieValue(cookie?: string): void; + get(key: string): unknown; + has(key: string): boolean; + set(key: string, value: unknown): Map; + entries(): IterableIterator<[string, unknown]>; + clear(): void; + toString(): string; +} + interface SDKSetting { cookieid: string; reportDomain: string; @@ -41,17 +56,50 @@ declare class Sdk { mockTrackOnloadEvent(): Promise; } -declare class Cookie { - cookie: string; - stack: Map; - constructor(cookie?: string); - setCookieValue(cookie?: string): void; - get(key: string): unknown; - has(key: string): boolean; - set(key: string, value: unknown): Map; - entries(): IterableIterator<[string, unknown]>; - clear(): void; - toString(): string; +declare class Growth { + constructor(juejin: JuejinHelper); + /** + * 获取统计签到天数 + * @returns {Promise<*>} + * { + * cont_count 连续签到天数 + * sum_count 累计签到天数 + * } + */ + getCounts(): Promise>; + /** + * 获取当前矿石数 + * @returns {Promise<*>} + * number 当前矿石数 + */ + getCurrentPoint(): Promise>; + /** + * 获取今日签到状态 + * @returns {Promise<*>} + * boolean 是否签到 + */ + getTodayStatus(): Promise>; + /** + * 获取月签到日历 + * @returns {Promise<*>} + * [ + * { + * date: timestamp(格式1646150400) + * point: number增加矿石数 + * status: enum(1 今日, 4 未签到, 3 已签到) + * } + * ] + */ + getByMonth(): Promise>; + getLotteryConfig(): Promise>; + drawLottery(): Promise>; + checkIn(): Promise>; + getLotteriesLuckyUsers({ page_no, page_size }?: { + page_no?: number | undefined; + page_size?: number | undefined; + }): Promise>; + dipLucky(lottery_history_id: any): Promise>; + getMyLucky(): Promise>; } declare type JuejinUserProps = { @@ -76,7 +124,7 @@ declare class JuejinHelper { getUser(): JuejinUserProps; makeToken(): Promise; sdk(): Sdk; - growth(): void; + growth(): Growth; seagold(): void; numpuzz(): void; bugfix(): void; From d151ca9744b022f5fbace79354a4aa0487d3f583 Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 18:17:09 +0800 Subject: [PATCH 038/131] =?UTF-8?q?refactor:=20=E6=9E=84=E5=BB=BAseagold?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/juejin-helper.c.js | 137 ++++++++++++++++++++++++++++++++++--- build/juejin-helper.esm.js | 136 +++++++++++++++++++++++++++++++++--- package.json | 1 + src/index.ts | 3 +- src/seagold.js | 100 --------------------------- src/seagold.ts | 128 ++++++++++++++++++++++++++++++++++ test/test-seagold.js | 25 +++++++ types/juejin-helper.d.ts | 19 ++++- yarn.lock | 7 ++ 9 files changed, 438 insertions(+), 118 deletions(-) delete mode 100644 src/seagold.js create mode 100644 src/seagold.ts create mode 100644 test/test-seagold.js diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js index 65343e23..28368842 100644 --- a/build/juejin-helper.c.js +++ b/build/juejin-helper.c.js @@ -2,10 +2,12 @@ var axios = require('axios'); var uuid = require('uuid'); +var jwt = require('jsonwebtoken'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios); +var jwt__default = /*#__PURE__*/_interopDefaultLegacy(jwt); /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -460,10 +462,8 @@ var Growth = /** @class */ (function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_e) { return [2 /*return*/, instance.post("/growth_api/v1/lottery_history/global_big", { - data: { - page_no: page_no, - page_size: page_size - } + page_no: page_no, + page_size: page_size })]; }); }); @@ -472,9 +472,7 @@ var Growth = /** @class */ (function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/dip_lucky", { - data: { - lottery_history_id: lottery_history_id - } + lottery_history_id: lottery_history_id })]; }); }); @@ -489,6 +487,129 @@ var Growth = /** @class */ (function () { return Growth; }()); +var Seagold = /** @class */ (function () { + function Seagold(juejin) { + this.juejin = juejin; + this.http = axios__default["default"].create({ + baseURL: "https://juejin-game.bytedance.com/game", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + Authorization: "" + } + }); + this.http.interceptors.request.use(function (config) { + if (juejin.user) { + // @ts-ignore + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + var res = response.data; + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }, function (error) { + return Promise.reject(error); + }); + } + Seagold.prototype.setToken = function (token) { + // @ts-ignore + this.http.defaults.headers.Authorization = "Bearer ".concat(token); + }; + Seagold.prototype.gameLogin = function () { + var _a; + return __awaiter(this, void 0, void 0, function () { + var _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _b = this.setToken; + return [4 /*yield*/, this.juejin.makeToken()]; + case 1: + _b.apply(this, [_c.sent()]); + return [2 /*return*/, this.http.post("/sea-gold/user/login", { + name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name + })]; + } + }); + }); + }; + Seagold.prototype.gameInfo = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.get("/sea-gold/home/info")]; + }); + }); + }; + Seagold.prototype.gameStart = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, roleId; + return __generator(this, function (_b) { + _a = (data || {}).roleId, roleId = _a === void 0 ? 3 : _a; + return [2 /*return*/, this.http.post("/sea-gold/game/start", { + roleId: roleId + })]; + }); + }); + }; + Seagold.prototype.gameOver = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, isButton; + return __generator(this, function (_b) { + _a = (data || {}).isButton, isButton = _a === void 0 ? 1 : _a; + // const result = { + // activity: "", + // deep: 3, + // gameDiamond: 34, // 当局获取 + // originMapData: [], + // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], + // picoDiamond: 0, + // realDiamond: 34, // 真实获取 + // todayDiamond: 34, // 今日获取 + // todayLimitDiamond: 1500 // 今日最大获取 + // }; + return [2 /*return*/, this.http.post("/sea-gold/game/over", { + isButton: isButton + })]; + }); + }); + }; + Seagold.prototype.gameCommand = function (gameId, command) { + if (command === void 0) { command = []; } + return __awaiter(this, void 0, void 0, function () { + var privateKey, token; + return __generator(this, function (_a) { + privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; + token = jwt__default["default"].sign({ + gameId: gameId, + time: new Date().getTime() + }, privateKey, { + algorithm: "ES256", + expiresIn: 2592e3, + header: { + alg: "ES256", + typ: "JWT" + } + }); + return [2 /*return*/, this.http.post("/sea-gold/game/command", { + command: command + // command: ["R", { times: 2, command: ["R"] }, "2"] + }, { + headers: { + "x-tt-gameid": token + } + })]; + }); + }); + }; + return Seagold; +}()); + var JuejinHelper = /** @class */ (function () { function JuejinHelper() { this.cookie = new Cookie(); @@ -549,7 +670,7 @@ var JuejinHelper = /** @class */ (function () { return new Growth(this); }; JuejinHelper.prototype.seagold = function () { - // return new SeaGold(this); + return new Seagold(this); }; JuejinHelper.prototype.numpuzz = function () { // return new NumPuzz(this); diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js index 5ea915eb..66cae47b 100644 --- a/build/juejin-helper.esm.js +++ b/build/juejin-helper.esm.js @@ -1,5 +1,6 @@ import axios from 'axios'; import { v4 } from 'uuid'; +import jwt from 'jsonwebtoken'; /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -454,10 +455,8 @@ var Growth = /** @class */ (function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_e) { return [2 /*return*/, instance.post("/growth_api/v1/lottery_history/global_big", { - data: { - page_no: page_no, - page_size: page_size - } + page_no: page_no, + page_size: page_size })]; }); }); @@ -466,9 +465,7 @@ var Growth = /** @class */ (function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/dip_lucky", { - data: { - lottery_history_id: lottery_history_id - } + lottery_history_id: lottery_history_id })]; }); }); @@ -483,6 +480,129 @@ var Growth = /** @class */ (function () { return Growth; }()); +var Seagold = /** @class */ (function () { + function Seagold(juejin) { + this.juejin = juejin; + this.http = axios.create({ + baseURL: "https://juejin-game.bytedance.com/game", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + Authorization: "" + } + }); + this.http.interceptors.request.use(function (config) { + if (juejin.user) { + // @ts-ignore + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + var res = response.data; + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }, function (error) { + return Promise.reject(error); + }); + } + Seagold.prototype.setToken = function (token) { + // @ts-ignore + this.http.defaults.headers.Authorization = "Bearer ".concat(token); + }; + Seagold.prototype.gameLogin = function () { + var _a; + return __awaiter(this, void 0, void 0, function () { + var _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _b = this.setToken; + return [4 /*yield*/, this.juejin.makeToken()]; + case 1: + _b.apply(this, [_c.sent()]); + return [2 /*return*/, this.http.post("/sea-gold/user/login", { + name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name + })]; + } + }); + }); + }; + Seagold.prototype.gameInfo = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.get("/sea-gold/home/info")]; + }); + }); + }; + Seagold.prototype.gameStart = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, roleId; + return __generator(this, function (_b) { + _a = (data || {}).roleId, roleId = _a === void 0 ? 3 : _a; + return [2 /*return*/, this.http.post("/sea-gold/game/start", { + roleId: roleId + })]; + }); + }); + }; + Seagold.prototype.gameOver = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, isButton; + return __generator(this, function (_b) { + _a = (data || {}).isButton, isButton = _a === void 0 ? 1 : _a; + // const result = { + // activity: "", + // deep: 3, + // gameDiamond: 34, // 当局获取 + // originMapData: [], + // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], + // picoDiamond: 0, + // realDiamond: 34, // 真实获取 + // todayDiamond: 34, // 今日获取 + // todayLimitDiamond: 1500 // 今日最大获取 + // }; + return [2 /*return*/, this.http.post("/sea-gold/game/over", { + isButton: isButton + })]; + }); + }); + }; + Seagold.prototype.gameCommand = function (gameId, command) { + if (command === void 0) { command = []; } + return __awaiter(this, void 0, void 0, function () { + var privateKey, token; + return __generator(this, function (_a) { + privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; + token = jwt.sign({ + gameId: gameId, + time: new Date().getTime() + }, privateKey, { + algorithm: "ES256", + expiresIn: 2592e3, + header: { + alg: "ES256", + typ: "JWT" + } + }); + return [2 /*return*/, this.http.post("/sea-gold/game/command", { + command: command + // command: ["R", { times: 2, command: ["R"] }, "2"] + }, { + headers: { + "x-tt-gameid": token + } + })]; + }); + }); + }; + return Seagold; +}()); + var JuejinHelper = /** @class */ (function () { function JuejinHelper() { this.cookie = new Cookie(); @@ -543,7 +663,7 @@ var JuejinHelper = /** @class */ (function () { return new Growth(this); }; JuejinHelper.prototype.seagold = function () { - // return new SeaGold(this); + return new Seagold(this); }; JuejinHelper.prototype.numpuzz = function () { // return new NumPuzz(this); diff --git a/package.json b/package.json index b0fe16ee..c5c0c189 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@rollup/plugin-commonjs": "^22.0.2", "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-sucrase": "^4.0.4", + "@types/jsonwebtoken": "^8.5.8", "@typescript-eslint/parser": "^5.32.0", "eslint": "^8.14.0", "eslint-config-next": "^12.1.5", diff --git a/src/index.ts b/src/index.ts index f0ee4d6b..c4349c78 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,6 +3,7 @@ import { parseCookieTokens } from "./utils/index"; import Cookie from "./utils/cookie"; import Sdk from "./sdk"; import Growth from "./growth"; +import SeaGold from "./seagold"; type JuejinUserProps = { user_id: string; @@ -63,7 +64,7 @@ class JuejinHelper { } seagold() { - // return new SeaGold(this); + return new SeaGold(this); } numpuzz() { diff --git a/src/seagold.js b/src/seagold.js deleted file mode 100644 index 2764bfed..00000000 --- a/src/seagold.js +++ /dev/null @@ -1,100 +0,0 @@ -import Api from "./api"; -import jwt from "jsonwebtoken"; - -class Seagold extends Api { - constructor(juejin) { - super(); - this.baseURL = "https://juejin-game.bytedance.com/game"; - this.headers.referer = "https://juejin.cn/"; - this.juejin = juejin; - this.requestInterceptor = config => { - if (juejin.user) { - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${juejin.user.user_id}&time=${Date.now()}`; - } - return config; - }; - - this.responseInterceptor = res => { - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - }; - } - - setToken(token) { - this.headers.Authorization = `Bearer ${token}`; - } - - async gameLogin() { - this.setToken(await this.juejin.makeToken()); - return this.post("/sea-gold/user/login", { - data: { - name: this.juejin.user.user_name - } - }); - } - - async gameInfo() { - return this.get("/sea-gold/home/info"); - } - - async gameStart({ roleId = 3 } = {}) { - return this.post("/sea-gold/game/start", { - data: { - roleId - } - }); - } - - async gameOver({ isButton = 1 } = {}) { - // const result = { - // activity: "", - // deep: 3, - // gameDiamond: 34, // 当局获取 - // originMapData: [], - // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], - // picoDiamond: 0, - // realDiamond: 34, // 真实获取 - // todayDiamond: 34, // 今日获取 - // todayLimitDiamond: 1500 // 今日最大获取 - // }; - return this.post("/sea-gold/game/over", { - data: { - isButton - } - }); - } - - async gameCommand(gameId, command = []) { - // const result = { - // appendMapData: [], - // blockData: { moveUp: 14, moveDown: 14, moveLeft: 2, moveRight: 5, jump: 3, loop: 3 }, - // curPos: { x: 0, y: 2 }, - // gameDiamond: 34 - // } - const privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; - const token = jwt.sign({ - gameId: gameId, - time: new Date().getTime() - }, privateKey, { - algorithm: "ES256", - expiresIn: 2592e3, - header: { - alg: "ES256", - typ: "JWT" - } - }); - return this.post("/sea-gold/game/command", { - headers: { - "x-tt-gameid": token - }, - data: { - command - // command: ["R", { times: 2, command: ["R"] }, "2"] - } - }); - } -} - -export default Seagold; diff --git a/src/seagold.ts b/src/seagold.ts new file mode 100644 index 00000000..a33f4f68 --- /dev/null +++ b/src/seagold.ts @@ -0,0 +1,128 @@ +import axios, { AxiosInstance } from "axios"; +import JuejinHelper from "./index"; +import jwt from "jsonwebtoken"; + +class Seagold { + juejin: JuejinHelper; + http: AxiosInstance; + + constructor(juejin: JuejinHelper) { + this.juejin = juejin; + + this.http = axios.create({ + baseURL: "https://juejin-game.bytedance.com/game", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + Authorization: "" + } + }); + + this.http.interceptors.request.use( + function (config) { + if (juejin.user) { + // @ts-ignore + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${juejin.user.user_id}&time=${Date.now()}`; + } + return config; + }, + function (error) { + return Promise.reject(error); + } + ); + + this.http.interceptors.response.use( + function (response) { + const res = response.data; + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }, + function (error) { + return Promise.reject(error); + } + ); + } + + setToken(token: string) { + // @ts-ignore + this.http.defaults.headers.Authorization = `Bearer ${token}`; + } + + async gameLogin() { + this.setToken(await this.juejin.makeToken()); + return this.http.post("/sea-gold/user/login", { + name: this.juejin.user?.user_name + }); + } + + async gameInfo() { + return this.http.get("/sea-gold/home/info"); + } + + async gameStart(data: { roleId: 1 | 2 | 3 }) { + const { roleId = 3 } = data || {}; + return this.http.post("/sea-gold/game/start", { + roleId + }); + } + + async gameOver(data: { isButton: number }) { + const { isButton = 1 } = data || {}; + // const result = { + // activity: "", + // deep: 3, + // gameDiamond: 34, // 当局获取 + // originMapData: [], + // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], + // picoDiamond: 0, + // realDiamond: 34, // 真实获取 + // todayDiamond: 34, // 今日获取 + // todayLimitDiamond: 1500 // 今日最大获取 + // }; + return this.http.post("/sea-gold/game/over", { + isButton + }); + } + + async gameCommand(gameId: number, command = []) { + // const result = { + // appendMapData: [], + // blockData: { moveUp: 14, moveDown: 14, moveLeft: 2, moveRight: 5, jump: 3, loop: 3 }, + // curPos: { x: 0, y: 2 }, + // gameDiamond: 34 + // } + const privateKey = + "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; + const token = jwt.sign( + { + gameId: gameId, + time: new Date().getTime() + }, + privateKey, + { + algorithm: "ES256", + expiresIn: 2592e3, + header: { + alg: "ES256", + typ: "JWT" + } + } + ); + return this.http.post( + "/sea-gold/game/command", + { + command + // command: ["R", { times: 2, command: ["R"] }, "2"] + }, + { + headers: { + "x-tt-gameid": token + } + } + ); + } +} + +export default Seagold; diff --git a/test/test-seagold.js b/test/test-seagold.js new file mode 100644 index 00000000..2588101c --- /dev/null +++ b/test/test-seagold.js @@ -0,0 +1,25 @@ +const JuejinHelper = require(".."); + +const mockCookie = `juejin-cookies`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + console.log("user_id", juejin.getUser().user_id); + + const seagold = juejin.seagold(); + + const loginInfo = await seagold.gameLogin(); + console.log(loginInfo); + + // const gameInfo = await seagold.gameInfo(); + // console.log(gameInfo); + + const gameInfo = await seagold.gameStart(); + console.log(gameInfo); + + const overInfo = await seagold.gameOver(); + console.log(overInfo); +} + +run(); diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts index 523e15ab..bc4479c6 100644 --- a/types/juejin-helper.d.ts +++ b/types/juejin-helper.d.ts @@ -1,4 +1,5 @@ import * as axios from 'axios'; +import { AxiosInstance } from 'axios'; declare class Cookie { cookie: string; @@ -102,6 +103,22 @@ declare class Growth { getMyLucky(): Promise>; } +declare class Seagold { + juejin: JuejinHelper; + http: AxiosInstance; + constructor(juejin: JuejinHelper); + setToken(token: string): void; + gameLogin(): Promise>; + gameInfo(): Promise>; + gameStart(data: { + roleId: 1 | 2 | 3; + }): Promise>; + gameOver(data: { + isButton: number; + }): Promise>; + gameCommand(gameId: number, command?: never[]): Promise>; +} + declare type JuejinUserProps = { user_id: string; user_name: string; @@ -125,7 +142,7 @@ declare class JuejinHelper { makeToken(): Promise; sdk(): Sdk; growth(): Growth; - seagold(): void; + seagold(): Seagold; numpuzz(): void; bugfix(): void; } diff --git a/yarn.lock b/yarn.lock index 4331e489..ba384a97 100644 --- a/yarn.lock +++ b/yarn.lock @@ -170,6 +170,13 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/jsonwebtoken@^8.5.8": + version "8.5.8" + resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" + integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== + dependencies: + "@types/node" "*" + "@types/node@*": version "18.6.4" resolved "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" From 237db7ffcf351c3c84f7ec4292bde0e073018b9c Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 18:21:43 +0800 Subject: [PATCH 039/131] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96growth?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/juejin-helper.c.js | 106 ++++++++++++++++++------------------- build/juejin-helper.esm.js | 106 ++++++++++++++++++------------------- src/growth.ts | 77 +++++++++++++++++++-------- src/services/growth.ts | 47 ---------------- types/juejin-helper.d.ts | 9 ++-- 5 files changed, 163 insertions(+), 182 deletions(-) delete mode 100644 src/services/growth.ts diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js index 28368842..d286f69b 100644 --- a/build/juejin-helper.c.js +++ b/build/juejin-helper.c.js @@ -62,18 +62,18 @@ function __generator(thisArg, body) { } } -var instance$2 = axios__default["default"].create({ +var instance$1 = axios__default["default"].create({ baseURL: "https://api.juejin.cn", headers: { referer: "https://juejin.cn/" } }); -instance$2.interceptors.request.use(function (config) { +instance$1.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance$2.interceptors.response.use(function (response) { +instance$1.interceptors.response.use(function (response) { if (response.data.err_no) { throw new Error(response.data.err_msg); } @@ -157,7 +157,7 @@ var Cookie = /** @class */ (function () { return Cookie; }()); -var instance$1 = axios__default["default"].create({ +var instance = axios__default["default"].create({ baseURL: "", headers: { // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", @@ -168,12 +168,12 @@ var instance$1 = axios__default["default"].create({ "Sec-Fetch-Site": "cross-site" } }); -instance$1.interceptors.request.use(function (config) { +instance.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance$1.interceptors.response.use(function (response) { +instance.interceptors.response.use(function (response) { var res = response.data; if ("e" in res) { return res; @@ -199,7 +199,7 @@ var Sdk = /** @class */ (function () { Sdk.prototype.slardarSDKSetting = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance$1.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { headers: { cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) } @@ -257,7 +257,7 @@ var Sdk = /** @class */ (function () { } } ]; - return [2 /*return*/, instance$1.post("https://mcs.snssdk.com/list", { + return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { headers: { host: "mcs.snssdk.com" }, @@ -344,40 +344,35 @@ var Sdk = /** @class */ (function () { return Sdk; }()); -var instance = axios__default["default"].create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/" - } -}); -var juejin = null; -instance.interceptors.request.use(function (config) { - // @ts-ignore - config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); - if (juejin.user) { - var tokens = juejin.getCookieTokens(); - // @ts-ignore - config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); - } - return config; -}, function (error) { - return Promise.reject(error); -}); -instance.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; -}, function (error) { - return Promise.reject(error); -}); -function setJuejin(context) { - juejin = context; -} - var Growth = /** @class */ (function () { function Growth(juejin) { - setJuejin(juejin); + this.http = axios__default["default"].create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn" + } + }); + this.http.interceptors.request.use(function (config) { + // @ts-ignore + config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); + if (juejin.user) { + var tokens = juejin.getCookieTokens(); + // @ts-ignore + config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, function (error) { + return Promise.reject(error); + }); } /** * 获取统计签到天数 @@ -390,7 +385,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getCounts = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_counts")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_counts")]; }); }); }; @@ -402,7 +397,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getCurrentPoint = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_cur_point")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_cur_point")]; }); }); }; @@ -414,7 +409,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getTodayStatus = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_today_status")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_today_status")]; }); }); }; @@ -432,36 +427,37 @@ var Growth = /** @class */ (function () { Growth.prototype.getByMonth = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_by_month")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_by_month")]; }); }); }; Growth.prototype.getLotteryConfig = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/lottery_config/get")]; + return [2 /*return*/, this.http.get("/growth_api/v1/lottery_config/get")]; }); }); }; Growth.prototype.drawLottery = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery/draw")]; + return [2 /*return*/, this.http.post("/growth_api/v1/lottery/draw")]; }); }); }; Growth.prototype.checkIn = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/check_in")]; + return [2 /*return*/, this.http.post("/growth_api/v1/check_in")]; }); }); }; - Growth.prototype.getLotteriesLuckyUsers = function (_a) { - var _b = _a === void 0 ? {} : _a, _c = _b.page_no, page_no = _c === void 0 ? 1 : _c, _d = _b.page_size, page_size = _d === void 0 ? 5 : _d; + Growth.prototype.getLotteriesLuckyUsers = function (data) { return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_e) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery_history/global_big", { + var _a, _b, page_no, _c, page_size; + return __generator(this, function (_d) { + _a = data || {}, _b = _a.page_no, page_no = _b === void 0 ? 1 : _b, _c = _a.page_size, page_size = _c === void 0 ? 5 : _c; + return [2 /*return*/, this.http.post("/growth_api/v1/lottery_history/global_big", { page_no: page_no, page_size: page_size })]; @@ -471,7 +467,7 @@ var Growth = /** @class */ (function () { Growth.prototype.dipLucky = function (lottery_history_id) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/dip_lucky", { + return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/dip_lucky", { lottery_history_id: lottery_history_id })]; }); @@ -480,7 +476,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getMyLucky = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/my_lucky")]; + return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/my_lucky")]; }); }); }; @@ -625,7 +621,7 @@ var JuejinHelper = /** @class */ (function () { this.cookie.setCookieValue(cookie); this.cookieTokens = parseCookieTokens(this.cookie); _a = this; - return [4 /*yield*/, instance$2.get("/user_api/v1/user/get", { + return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { headers: { cookie: this.getCookie() } })]; case 1: @@ -656,7 +652,7 @@ var JuejinHelper = /** @class */ (function () { JuejinHelper.prototype.makeToken = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance$2.get("/get/token", { + return [2 /*return*/, instance$1.get("/get/token", { baseURL: "https://juejin.cn", headers: { cookie: this.getCookie() } })]; diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js index 66cae47b..745c462f 100644 --- a/build/juejin-helper.esm.js +++ b/build/juejin-helper.esm.js @@ -55,18 +55,18 @@ function __generator(thisArg, body) { } } -var instance$2 = axios.create({ +var instance$1 = axios.create({ baseURL: "https://api.juejin.cn", headers: { referer: "https://juejin.cn/" } }); -instance$2.interceptors.request.use(function (config) { +instance$1.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance$2.interceptors.response.use(function (response) { +instance$1.interceptors.response.use(function (response) { if (response.data.err_no) { throw new Error(response.data.err_msg); } @@ -150,7 +150,7 @@ var Cookie = /** @class */ (function () { return Cookie; }()); -var instance$1 = axios.create({ +var instance = axios.create({ baseURL: "", headers: { // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", @@ -161,12 +161,12 @@ var instance$1 = axios.create({ "Sec-Fetch-Site": "cross-site" } }); -instance$1.interceptors.request.use(function (config) { +instance.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); }); -instance$1.interceptors.response.use(function (response) { +instance.interceptors.response.use(function (response) { var res = response.data; if ("e" in res) { return res; @@ -192,7 +192,7 @@ var Sdk = /** @class */ (function () { Sdk.prototype.slardarSDKSetting = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance$1.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { headers: { cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) } @@ -250,7 +250,7 @@ var Sdk = /** @class */ (function () { } } ]; - return [2 /*return*/, instance$1.post("https://mcs.snssdk.com/list", { + return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { headers: { host: "mcs.snssdk.com" }, @@ -337,40 +337,35 @@ var Sdk = /** @class */ (function () { return Sdk; }()); -var instance = axios.create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/" - } -}); -var juejin = null; -instance.interceptors.request.use(function (config) { - // @ts-ignore - config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); - if (juejin.user) { - var tokens = juejin.getCookieTokens(); - // @ts-ignore - config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); - } - return config; -}, function (error) { - return Promise.reject(error); -}); -instance.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; -}, function (error) { - return Promise.reject(error); -}); -function setJuejin(context) { - juejin = context; -} - var Growth = /** @class */ (function () { function Growth(juejin) { - setJuejin(juejin); + this.http = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn" + } + }); + this.http.interceptors.request.use(function (config) { + // @ts-ignore + config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); + if (juejin.user) { + var tokens = juejin.getCookieTokens(); + // @ts-ignore + config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, function (error) { + return Promise.reject(error); + }); } /** * 获取统计签到天数 @@ -383,7 +378,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getCounts = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_counts")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_counts")]; }); }); }; @@ -395,7 +390,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getCurrentPoint = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_cur_point")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_cur_point")]; }); }); }; @@ -407,7 +402,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getTodayStatus = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_today_status")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_today_status")]; }); }); }; @@ -425,36 +420,37 @@ var Growth = /** @class */ (function () { Growth.prototype.getByMonth = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/get_by_month")]; + return [2 /*return*/, this.http.get("/growth_api/v1/get_by_month")]; }); }); }; Growth.prototype.getLotteryConfig = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.get("/growth_api/v1/lottery_config/get")]; + return [2 /*return*/, this.http.get("/growth_api/v1/lottery_config/get")]; }); }); }; Growth.prototype.drawLottery = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery/draw")]; + return [2 /*return*/, this.http.post("/growth_api/v1/lottery/draw")]; }); }); }; Growth.prototype.checkIn = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/check_in")]; + return [2 /*return*/, this.http.post("/growth_api/v1/check_in")]; }); }); }; - Growth.prototype.getLotteriesLuckyUsers = function (_a) { - var _b = _a === void 0 ? {} : _a, _c = _b.page_no, page_no = _c === void 0 ? 1 : _c, _d = _b.page_size, page_size = _d === void 0 ? 5 : _d; + Growth.prototype.getLotteriesLuckyUsers = function (data) { return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_e) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery_history/global_big", { + var _a, _b, page_no, _c, page_size; + return __generator(this, function (_d) { + _a = data || {}, _b = _a.page_no, page_no = _b === void 0 ? 1 : _b, _c = _a.page_size, page_size = _c === void 0 ? 5 : _c; + return [2 /*return*/, this.http.post("/growth_api/v1/lottery_history/global_big", { page_no: page_no, page_size: page_size })]; @@ -464,7 +460,7 @@ var Growth = /** @class */ (function () { Growth.prototype.dipLucky = function (lottery_history_id) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/dip_lucky", { + return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/dip_lucky", { lottery_history_id: lottery_history_id })]; }); @@ -473,7 +469,7 @@ var Growth = /** @class */ (function () { Growth.prototype.getMyLucky = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance.post("/growth_api/v1/lottery_lucky/my_lucky")]; + return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/my_lucky")]; }); }); }; @@ -618,7 +614,7 @@ var JuejinHelper = /** @class */ (function () { this.cookie.setCookieValue(cookie); this.cookieTokens = parseCookieTokens(this.cookie); _a = this; - return [4 /*yield*/, instance$2.get("/user_api/v1/user/get", { + return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { headers: { cookie: this.getCookie() } })]; case 1: @@ -649,7 +645,7 @@ var JuejinHelper = /** @class */ (function () { JuejinHelper.prototype.makeToken = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - return [2 /*return*/, instance$2.get("/get/token", { + return [2 /*return*/, instance$1.get("/get/token", { baseURL: "https://juejin.cn", headers: { cookie: this.getCookie() } })]; diff --git a/src/growth.ts b/src/growth.ts index 256242c0..4d9e1ced 100644 --- a/src/growth.ts +++ b/src/growth.ts @@ -1,9 +1,47 @@ import JuejinHelper from "./index"; -import growth, { setJuejin } from "./services/growth"; +import axios, { AxiosInstance } from "axios"; class Growth { + http: AxiosInstance; + constructor(juejin: JuejinHelper) { - setJuejin(juejin); + this.http = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn" + } + }); + + this.http.interceptors.request.use( + function (config) { + if (!juejin) config; + // @ts-ignore + config.headers.cookie = juejin?.getCookie(); + + if ((juejin as JuejinHelper).user) { + const tokens = (juejin as JuejinHelper).getCookieTokens(); + // @ts-ignore + config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; + } + return config; + }, + function (error) { + return Promise.reject(error); + } + ); + + this.http.interceptors.response.use( + function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, + function (error) { + return Promise.reject(error); + } + ); } /** @@ -15,7 +53,7 @@ class Growth { * } */ async getCounts() { - return growth.get("/growth_api/v1/get_counts"); + return this.http.get("/growth_api/v1/get_counts"); } /** @@ -24,7 +62,7 @@ class Growth { * number 当前矿石数 */ async getCurrentPoint() { - return growth.get("/growth_api/v1/get_cur_point"); + return this.http.get("/growth_api/v1/get_cur_point"); } /** @@ -33,7 +71,7 @@ class Growth { * boolean 是否签到 */ async getTodayStatus() { - return growth.get("/growth_api/v1/get_today_status"); + return this.http.get("/growth_api/v1/get_today_status"); } /** @@ -48,40 +86,37 @@ class Growth { * ] */ async getByMonth() { - return growth.get("/growth_api/v1/get_by_month"); + return this.http.get("/growth_api/v1/get_by_month"); } async getLotteryConfig() { - return growth.get("/growth_api/v1/lottery_config/get"); + return this.http.get("/growth_api/v1/lottery_config/get"); } async drawLottery() { - return growth.post("/growth_api/v1/lottery/draw"); + return this.http.post("/growth_api/v1/lottery/draw"); } async checkIn() { - return growth.post("/growth_api/v1/check_in"); + return this.http.post("/growth_api/v1/check_in"); } - async getLotteriesLuckyUsers({ page_no = 1, page_size = 5 } = {}) { - return growth.post("/growth_api/v1/lottery_history/global_big", { - data: { - page_no: page_no, - page_size: page_size - } + async getLotteriesLuckyUsers(data: { page_no: number; page_size: number }) { + const { page_no = 1, page_size = 5 } = data || {}; + return this.http.post("/growth_api/v1/lottery_history/global_big", { + page_no: page_no, + page_size: page_size }); } - async dipLucky(lottery_history_id: any) { - return growth.post("/growth_api/v1/lottery_lucky/dip_lucky", { - data: { - lottery_history_id - } + async dipLucky(lottery_history_id: number) { + return this.http.post("/growth_api/v1/lottery_lucky/dip_lucky", { + lottery_history_id }); } async getMyLucky() { - return growth.post("/growth_api/v1/lottery_lucky/my_lucky"); + return this.http.post("/growth_api/v1/lottery_lucky/my_lucky"); } } diff --git a/src/services/growth.ts b/src/services/growth.ts deleted file mode 100644 index 1ccac796..00000000 --- a/src/services/growth.ts +++ /dev/null @@ -1,47 +0,0 @@ -import axios from "axios"; -import JuejinHelper from "../index"; - -const instance = axios.create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/" - } -}); - -let juejin: JuejinHelper | null = null; - -instance.interceptors.request.use( - function (config) { - if (!juejin) config; - // @ts-ignore - config.headers.cookie = juejin?.getCookie(); - - if ((juejin as JuejinHelper).user) { - const tokens = (juejin as JuejinHelper).getCookieTokens(); - // @ts-ignore - config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; - } - return config; - }, - function (error) { - return Promise.reject(error); - } -); - -instance.interceptors.response.use( - function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; - }, - function (error) { - return Promise.reject(error); - } -); - -export function setJuejin(context: JuejinHelper) { - juejin = context; -} - -export default instance; diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts index bc4479c6..dba2cbef 100644 --- a/types/juejin-helper.d.ts +++ b/types/juejin-helper.d.ts @@ -58,6 +58,7 @@ declare class Sdk { } declare class Growth { + http: AxiosInstance; constructor(juejin: JuejinHelper); /** * 获取统计签到天数 @@ -95,11 +96,11 @@ declare class Growth { getLotteryConfig(): Promise>; drawLottery(): Promise>; checkIn(): Promise>; - getLotteriesLuckyUsers({ page_no, page_size }?: { - page_no?: number | undefined; - page_size?: number | undefined; + getLotteriesLuckyUsers(data: { + page_no: number; + page_size: number; }): Promise>; - dipLucky(lottery_history_id: any): Promise>; + dipLucky(lottery_history_id: number): Promise>; getMyLucky(): Promise>; } From 5017367fcc00d5d449d5b471433d80885ef711ff Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 18:36:42 +0800 Subject: [PATCH 040/131] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84numpuzz?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/juejin-helper.c.js | 136 ++++++++++++++++++++++++++++++++++++- build/juejin-helper.esm.js | 136 ++++++++++++++++++++++++++++++++++++- src/index.ts | 3 +- src/numpuzz.js | 105 ---------------------------- src/numpuzz.ts | 124 +++++++++++++++++++++++++++++++++ test/test-numpuzz.js | 44 ++++++------ types/juejin-helper.d.ts | 59 +++++++++++++++- 7 files changed, 476 insertions(+), 131 deletions(-) delete mode 100644 src/numpuzz.js create mode 100644 src/numpuzz.ts diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js index d286f69b..081958ee 100644 --- a/build/juejin-helper.c.js +++ b/build/juejin-helper.c.js @@ -606,6 +606,140 @@ var Seagold = /** @class */ (function () { return Seagold; }()); +/** + * 数字拼图 + * 游戏地址: https://juejin.cn/game/shuzimiti/ + */ +var NumPuzz = /** @class */ (function () { + function NumPuzz(juejin) { + this.juejin = juejin; + this.http = axios__default["default"].create({ + baseURL: "https://juejin-game.bytedance.com/game", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + Authorization: "" + } + }); + this.http.interceptors.request.use(function (config) { + if (juejin.user) { + // @ts-ignore + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + var res = response.data; + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }, function (error) { + return Promise.reject(error); + }); + } + NumPuzz.prototype.setToken = function (token) { + // @ts-ignore + this.http.defaults.headers.Authorization = "Bearer ".concat(token); + }; + /** + * 游戏登录 + * @returns {Promise<*>} + */ + NumPuzz.prototype.gameLogin = function () { + var _a; + return __awaiter(this, void 0, void 0, function () { + var _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _b = this.setToken; + return [4 /*yield*/, this.juejin.makeToken()]; + case 1: + _b.apply(this, [_c.sent()]); + return [2 /*return*/, this.http.post("/num-puzz/user/login", { + name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name + })]; + } + }); + }); + }; + /** + * 获取主页信息 + * @returns {Promise<*>} + * bug: 0 + * diamond: 200 + * originality: 0 + * showToast: false + */ + NumPuzz.prototype.gameInfo = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.get("/num-puzz/home/info")]; + }); + }); + }; + /** + * 开始游戏 + * @param level Number [1|2|3] 简单|中等|困难 + * @returns {Promise<*>} + * guide: 0 + * level: 游戏等级 + * map: 游戏地图 + * round: 关卡 + * target: 目标结果 + */ + NumPuzz.prototype.gameStart = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, level; + return __generator(this, function (_b) { + _a = (data || {}).level, level = _a === void 0 ? 1 : _a; + return [2 /*return*/, this.http.post("/num-puzz/game/start", { + level: level + })]; + }); + }); + }; + /** + * 跳过游戏 + * @description 结构同开始游戏 + * @param level + * @returns {Promise<*>} + */ + NumPuzz.prototype.gameSkip = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, level; + return __generator(this, function (_b) { + _a = (data || {}).level, level = _a === void 0 ? 1 : _a; + return [2 /*return*/, this.http.post("/num-puzz/game/skip", { + level: level + })]; + }); + }); + }; + /** + * 游戏完成 + * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] + * @param command + * @returns {Promise<*>} + */ + NumPuzz.prototype.gameComplete = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, level, _c, command; + return __generator(this, function (_d) { + _a = data || {}, _b = _a.level, level = _b === void 0 ? 1 : _b, _c = _a.command, command = _c === void 0 ? [] : _c; + return [2 /*return*/, this.http.post("/num-puzz/game/complete", { + level: level, + command: command + })]; + }); + }); + }; + return NumPuzz; +}()); + var JuejinHelper = /** @class */ (function () { function JuejinHelper() { this.cookie = new Cookie(); @@ -669,7 +803,7 @@ var JuejinHelper = /** @class */ (function () { return new Seagold(this); }; JuejinHelper.prototype.numpuzz = function () { - // return new NumPuzz(this); + return new NumPuzz(this); }; JuejinHelper.prototype.bugfix = function () { // return new Bugfix(this); diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js index 745c462f..63845775 100644 --- a/build/juejin-helper.esm.js +++ b/build/juejin-helper.esm.js @@ -599,6 +599,140 @@ var Seagold = /** @class */ (function () { return Seagold; }()); +/** + * 数字拼图 + * 游戏地址: https://juejin.cn/game/shuzimiti/ + */ +var NumPuzz = /** @class */ (function () { + function NumPuzz(juejin) { + this.juejin = juejin; + this.http = axios.create({ + baseURL: "https://juejin-game.bytedance.com/game", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + Authorization: "" + } + }); + this.http.interceptors.request.use(function (config) { + if (juejin.user) { + // @ts-ignore + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + var res = response.data; + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }, function (error) { + return Promise.reject(error); + }); + } + NumPuzz.prototype.setToken = function (token) { + // @ts-ignore + this.http.defaults.headers.Authorization = "Bearer ".concat(token); + }; + /** + * 游戏登录 + * @returns {Promise<*>} + */ + NumPuzz.prototype.gameLogin = function () { + var _a; + return __awaiter(this, void 0, void 0, function () { + var _b; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _b = this.setToken; + return [4 /*yield*/, this.juejin.makeToken()]; + case 1: + _b.apply(this, [_c.sent()]); + return [2 /*return*/, this.http.post("/num-puzz/user/login", { + name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name + })]; + } + }); + }); + }; + /** + * 获取主页信息 + * @returns {Promise<*>} + * bug: 0 + * diamond: 200 + * originality: 0 + * showToast: false + */ + NumPuzz.prototype.gameInfo = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.get("/num-puzz/home/info")]; + }); + }); + }; + /** + * 开始游戏 + * @param level Number [1|2|3] 简单|中等|困难 + * @returns {Promise<*>} + * guide: 0 + * level: 游戏等级 + * map: 游戏地图 + * round: 关卡 + * target: 目标结果 + */ + NumPuzz.prototype.gameStart = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, level; + return __generator(this, function (_b) { + _a = (data || {}).level, level = _a === void 0 ? 1 : _a; + return [2 /*return*/, this.http.post("/num-puzz/game/start", { + level: level + })]; + }); + }); + }; + /** + * 跳过游戏 + * @description 结构同开始游戏 + * @param level + * @returns {Promise<*>} + */ + NumPuzz.prototype.gameSkip = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, level; + return __generator(this, function (_b) { + _a = (data || {}).level, level = _a === void 0 ? 1 : _a; + return [2 /*return*/, this.http.post("/num-puzz/game/skip", { + level: level + })]; + }); + }); + }; + /** + * 游戏完成 + * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] + * @param command + * @returns {Promise<*>} + */ + NumPuzz.prototype.gameComplete = function (data) { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, level, _c, command; + return __generator(this, function (_d) { + _a = data || {}, _b = _a.level, level = _b === void 0 ? 1 : _b, _c = _a.command, command = _c === void 0 ? [] : _c; + return [2 /*return*/, this.http.post("/num-puzz/game/complete", { + level: level, + command: command + })]; + }); + }); + }; + return NumPuzz; +}()); + var JuejinHelper = /** @class */ (function () { function JuejinHelper() { this.cookie = new Cookie(); @@ -662,7 +796,7 @@ var JuejinHelper = /** @class */ (function () { return new Seagold(this); }; JuejinHelper.prototype.numpuzz = function () { - // return new NumPuzz(this); + return new NumPuzz(this); }; JuejinHelper.prototype.bugfix = function () { // return new Bugfix(this); diff --git a/src/index.ts b/src/index.ts index c4349c78..28a57d6b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ import Cookie from "./utils/cookie"; import Sdk from "./sdk"; import Growth from "./growth"; import SeaGold from "./seagold"; +import NumPuzz from "./numpuzz"; type JuejinUserProps = { user_id: string; @@ -68,7 +69,7 @@ class JuejinHelper { } numpuzz() { - // return new NumPuzz(this); + return new NumPuzz(this); } bugfix() { diff --git a/src/numpuzz.js b/src/numpuzz.js deleted file mode 100644 index 04926964..00000000 --- a/src/numpuzz.js +++ /dev/null @@ -1,105 +0,0 @@ -import Api from "./api"; - -/** - * 数字拼图 - * 游戏地址: https://juejin.cn/game/shuzimiti/ - */ -class NumPuzz extends Api { - constructor(juejin) { - super(); - this.baseURL = "https://juejin-game.bytedance.com/game"; - this.headers.referer = "https://juejin.cn/"; - this.juejin = juejin; - this.requestInterceptor = config => { - if (juejin.user) { - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${juejin.user.user_id}&time=${Date.now()}`; - } - return config; - }; - - this.responseInterceptor = res => { - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - }; - } - - setToken(token) { - this.headers.Authorization = `Bearer ${token}`; - } - - /** - * 游戏登录 - * @returns {Promise<*>} - */ - async gameLogin() { - this.setToken(await this.juejin.makeToken()); - return this.post("/num-puzz/user/login", { - data: { - name: this.juejin.user.user_name - } - }); - } - - /** - * 获取主页信息 - * @returns {Promise<*>} - * bug: 0 - * diamond: 200 - * originality: 0 - * showToast: false - */ - async gameInfo() { - return this.get("/num-puzz/home/info"); - } - - /** - * 开始游戏 - * @param level Number [1|2|3] 简单|中等|困难 - * @returns {Promise<*>} - * guide: 0 - * level: 游戏等级 - * map: 游戏地图 - * round: 关卡 - * target: 目标结果 - */ - async gameStart({ level = 1 } = {}) { - return this.post("/num-puzz/game/start", { - data: { - level - } - }); - } - - /** - * 跳过游戏 - * @description 结构同开始游戏 - * @param level - * @returns {Promise<*>} - */ - async gameSkip({ level = 1 } = {}) { - return this.post("/num-puzz/game/skip", { - data: { - level - } - }); - } - - /** - * 游戏完成 - * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] - * @param command - * @returns {Promise<*>} - */ - async gameComplete({ level = 1, command = [] } = {}) { - return this.post("/num-puzz/game/complete", { - data: { - level, - command - } - }); - } -} - -export default NumPuzz; diff --git a/src/numpuzz.ts b/src/numpuzz.ts new file mode 100644 index 00000000..8ea32bfa --- /dev/null +++ b/src/numpuzz.ts @@ -0,0 +1,124 @@ +import JuejinHelper from "./index"; +import axios, { AxiosInstance } from "axios"; + +/** + * 数字拼图 + * 游戏地址: https://juejin.cn/game/shuzimiti/ + */ +class NumPuzz { + juejin: JuejinHelper; + http: AxiosInstance; + + constructor(juejin: JuejinHelper) { + this.juejin = juejin; + + this.http = axios.create({ + baseURL: "https://juejin-game.bytedance.com/game", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn", + Authorization: "" + } + }); + + this.http.interceptors.request.use( + function (config) { + if (juejin.user) { + // @ts-ignore + config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + `uid=${juejin.user.user_id}&time=${Date.now()}`; + } + return config; + }, + function (error) { + return Promise.reject(error); + } + ); + + this.http.interceptors.response.use( + function (response) { + const res = response.data; + if (res.code !== 0) { + throw new Error(res.message); + } + return res.data; + }, + function (error) { + return Promise.reject(error); + } + ); + } + + setToken(token: string) { + // @ts-ignore + this.http.defaults.headers.Authorization = `Bearer ${token}`; + } + + /** + * 游戏登录 + * @returns {Promise<*>} + */ + async gameLogin() { + this.setToken(await this.juejin.makeToken()); + return this.http.post("/num-puzz/user/login", { + name: this.juejin.user?.user_name + }); + } + + /** + * 获取主页信息 + * @returns {Promise<*>} + * bug: 0 + * diamond: 200 + * originality: 0 + * showToast: false + */ + async gameInfo() { + return this.http.get("/num-puzz/home/info"); + } + + /** + * 开始游戏 + * @param level Number [1|2|3] 简单|中等|困难 + * @returns {Promise<*>} + * guide: 0 + * level: 游戏等级 + * map: 游戏地图 + * round: 关卡 + * target: 目标结果 + */ + async gameStart(data: { level: number }) { + const { level = 1 } = data || {}; + return this.http.post("/num-puzz/game/start", { + level + }); + } + + /** + * 跳过游戏 + * @description 结构同开始游戏 + * @param level + * @returns {Promise<*>} + */ + async gameSkip(data: { level: number }) { + const { level = 1 } = data || {}; + return this.http.post("/num-puzz/game/skip", { + level + }); + } + + /** + * 游戏完成 + * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] + * @param command + * @returns {Promise<*>} + */ + async gameComplete(data: { level: number; command: [number, number, "u" | "d" | "l" | "r"] }) { + const { level = 1, command = [] } = data || {}; + return this.http.post("/num-puzz/game/complete", { + level, + command + }); + } +} + +export default NumPuzz; diff --git a/test/test-numpuzz.js b/test/test-numpuzz.js index bbe8f042..9b841821 100644 --- a/test/test-numpuzz.js +++ b/test/test-numpuzz.js @@ -1,7 +1,7 @@ -// const JuejinHelper = require('..'); -// -// // const mockCookie = `juejin-cookies`; -// +const JuejinHelper = require(".."); + +const mockCookie = `juejin-cookies`; + // const rules = [ // [{ test: /^0\.1$/, name: "空地", type: "cell", value: 0 }] // [{ test: /^0\.2$/, name: "障碍", type: "cell", value: 1 }], @@ -11,21 +11,21 @@ // [{ test: /^0\.6$/, name: "除法", type: "symbol", value: "/" }], // [{ test: /^[1-9]\d*$/, name: "数字", type: "number", value: n => n }] // ] -// -// async function run() { -// const juejin = new JuejinHelper(); -// await juejin.login(mockCookie); -// -// const numpuzz = juejin.numpuzz(); -// -// const loginInfo = await numpuzz.gameLogin(); -// console.log(loginInfo); -// -// const gameInfo = await numpuzz.gameStart({ level: 1 }); -// console.log(gameInfo); -// -// // const gameResult = await numpuzz.gameComplete({ level: 1, command: [[1, 1, "d"]] }); -// // console.log(gameResult); -// } -// -// run(); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + + const numpuzz = juejin.numpuzz(); + + const loginInfo = await numpuzz.gameLogin(); + console.log(loginInfo); + + // const gameInfo = await numpuzz.gameStart({ level: 1 }); + // console.log(gameInfo); + + // const gameResult = await numpuzz.gameComplete({ level: 1, command: [[1, 1, "d"]] }); + // console.log(gameResult); +} + +run(); diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts index dba2cbef..0a67c1b2 100644 --- a/types/juejin-helper.d.ts +++ b/types/juejin-helper.d.ts @@ -120,6 +120,63 @@ declare class Seagold { gameCommand(gameId: number, command?: never[]): Promise>; } +/** + * 数字拼图 + * 游戏地址: https://juejin.cn/game/shuzimiti/ + */ +declare class NumPuzz { + juejin: JuejinHelper; + http: AxiosInstance; + constructor(juejin: JuejinHelper); + setToken(token: string): void; + /** + * 游戏登录 + * @returns {Promise<*>} + */ + gameLogin(): Promise>; + /** + * 获取主页信息 + * @returns {Promise<*>} + * bug: 0 + * diamond: 200 + * originality: 0 + * showToast: false + */ + gameInfo(): Promise>; + /** + * 开始游戏 + * @param level Number [1|2|3] 简单|中等|困难 + * @returns {Promise<*>} + * guide: 0 + * level: 游戏等级 + * map: 游戏地图 + * round: 关卡 + * target: 目标结果 + */ + gameStart(data: { + level: number; + }): Promise>; + /** + * 跳过游戏 + * @description 结构同开始游戏 + * @param level + * @returns {Promise<*>} + */ + gameSkip(data: { + level: number; + }): Promise>; + /** + * 游戏完成 + * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] + * @param command + * @returns {Promise<*>} + */ + gameComplete(data: { + level: number; + command: [number, number, "u" | "d" | "l" | "r"]; + }): Promise>; +} + declare type JuejinUserProps = { user_id: string; user_name: string; @@ -144,7 +201,7 @@ declare class JuejinHelper { sdk(): Sdk; growth(): Growth; seagold(): Seagold; - numpuzz(): void; + numpuzz(): NumPuzz; bugfix(): void; } From 71636408cd7b1717e48c3ce7e0e19c18866ff68e Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 18:55:43 +0800 Subject: [PATCH 041/131] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84bugfix?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/juejin-helper.c.js | 146 ++++++++++++++++++++++++++++++++++++- build/juejin-helper.esm.js | 146 ++++++++++++++++++++++++++++++++++++- src/api.js | 59 --------------- src/bugfix.js | 99 ------------------------- src/bugfix.ts | 130 +++++++++++++++++++++++++++++++++ src/index.ts | 3 +- test/test-bugfix.js | 2 +- types/juejin-helper.d.ts | 53 +++++++++++++- 8 files changed, 475 insertions(+), 163 deletions(-) delete mode 100644 src/api.js delete mode 100644 src/bugfix.js create mode 100644 src/bugfix.ts diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js index 081958ee..62db89e6 100644 --- a/build/juejin-helper.c.js +++ b/build/juejin-helper.c.js @@ -105,6 +105,10 @@ function parseCookieTokens(cookie) { return cookieTokens; } +async function wait(time = 0) { + return new Promise(resolve => setTimeout(resolve, time)); +} + function randomRangeNumber(start = 500, end = 1000) { return (Math.random() * (end - start) + start) >> 0; } @@ -740,6 +744,146 @@ var NumPuzz = /** @class */ (function () { return NumPuzz; }()); +var Bugfix = /** @class */ (function () { + function Bugfix(juejin) { + this.http = axios__default["default"].create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn" + } + }); + this.http.interceptors.request.use(function (config) { + // @ts-ignore + config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); + if (juejin.user) { + var tokens = juejin.getCookieTokens(); + // @ts-ignore + config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, function (error) { + return Promise.reject(error); + }); + } + /** + * 获取竞赛信息 + * @returns {Promise<*>} + */ + Bugfix.prototype.getCompetition = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/competition", { + // 必须加个空对象,否则接口提示少了参数 + })]; + }); + }); + }; + /** + * 获取用户信息 + * @param competition_id + * @returns {Promise<*>} + */ + Bugfix.prototype.getUser = function (data) { + return __awaiter(this, void 0, void 0, function () { + var competition_id; + return __generator(this, function (_a) { + competition_id = data.competition_id; + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/user", { + competition_id: competition_id + })]; + }); + }); + }; + /** + * 获取未收集的Bug + * @returns {Promise<*>} + * [ + * { + * bug_type: number 类型位置 + * bug_time: number 时间戳 + * bug_show_type: 1 显示类型 + * is_first: boolean 是否第一次 + * } + * ] + * + */ + Bugfix.prototype.getNotCollectBugList = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/not_collect", { + // 必须加个空对象,否则接口提示少了参数 + })]; + }); + }); + }; + /** + * 收集Bug + * @param bug_time + * @param bug_type + * @returns {Promise<*>} + */ + Bugfix.prototype.collectBug = function (data) { + return __awaiter(this, void 0, void 0, function () { + var bug_time, bug_type; + return __generator(this, function (_a) { + bug_time = data.bug_time, bug_type = data.bug_type; + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/collect", { + bug_time: bug_time, + bug_type: bug_type + })]; + }); + }); + }; + /** + * 批量收集Bug + * @param buglist + * @returns {Promise} + */ + Bugfix.prototype.collectBugBatch = function (buglist) { + if (buglist === void 0) { buglist = []; } + return __awaiter(this, void 0, void 0, function () { + var error_1; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, Promise.all(buglist.map(function (bug) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.collectBug(bug)]; + case 1: + _a.sent(); + return [4 /*yield*/, wait(randomRangeNumber(500, 1000))]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }))]; + case 1: + _a.sent(); + return [2 /*return*/, true]; + case 2: + error_1 = _a.sent(); + return [2 /*return*/, error_1]; + case 3: return [2 /*return*/]; + } + }); + }); + }; + return Bugfix; +}()); + var JuejinHelper = /** @class */ (function () { function JuejinHelper() { this.cookie = new Cookie(); @@ -806,7 +950,7 @@ var JuejinHelper = /** @class */ (function () { return new NumPuzz(this); }; JuejinHelper.prototype.bugfix = function () { - // return new Bugfix(this); + return new Bugfix(this); }; return JuejinHelper; }()); diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js index 63845775..ae2743f7 100644 --- a/build/juejin-helper.esm.js +++ b/build/juejin-helper.esm.js @@ -98,6 +98,10 @@ function parseCookieTokens(cookie) { return cookieTokens; } +async function wait(time = 0) { + return new Promise(resolve => setTimeout(resolve, time)); +} + function randomRangeNumber(start = 500, end = 1000) { return (Math.random() * (end - start) + start) >> 0; } @@ -733,6 +737,146 @@ var NumPuzz = /** @class */ (function () { return NumPuzz; }()); +var Bugfix = /** @class */ (function () { + function Bugfix(juejin) { + this.http = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn" + } + }); + this.http.interceptors.request.use(function (config) { + // @ts-ignore + config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); + if (juejin.user) { + var tokens = juejin.getCookieTokens(); + // @ts-ignore + config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); + } + return config; + }, function (error) { + return Promise.reject(error); + }); + this.http.interceptors.response.use(function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, function (error) { + return Promise.reject(error); + }); + } + /** + * 获取竞赛信息 + * @returns {Promise<*>} + */ + Bugfix.prototype.getCompetition = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/competition", { + // 必须加个空对象,否则接口提示少了参数 + })]; + }); + }); + }; + /** + * 获取用户信息 + * @param competition_id + * @returns {Promise<*>} + */ + Bugfix.prototype.getUser = function (data) { + return __awaiter(this, void 0, void 0, function () { + var competition_id; + return __generator(this, function (_a) { + competition_id = data.competition_id; + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/user", { + competition_id: competition_id + })]; + }); + }); + }; + /** + * 获取未收集的Bug + * @returns {Promise<*>} + * [ + * { + * bug_type: number 类型位置 + * bug_time: number 时间戳 + * bug_show_type: 1 显示类型 + * is_first: boolean 是否第一次 + * } + * ] + * + */ + Bugfix.prototype.getNotCollectBugList = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/not_collect", { + // 必须加个空对象,否则接口提示少了参数 + })]; + }); + }); + }; + /** + * 收集Bug + * @param bug_time + * @param bug_type + * @returns {Promise<*>} + */ + Bugfix.prototype.collectBug = function (data) { + return __awaiter(this, void 0, void 0, function () { + var bug_time, bug_type; + return __generator(this, function (_a) { + bug_time = data.bug_time, bug_type = data.bug_type; + return [2 /*return*/, this.http.post("/user_api/v1/bugfix/collect", { + bug_time: bug_time, + bug_type: bug_type + })]; + }); + }); + }; + /** + * 批量收集Bug + * @param buglist + * @returns {Promise} + */ + Bugfix.prototype.collectBugBatch = function (buglist) { + if (buglist === void 0) { buglist = []; } + return __awaiter(this, void 0, void 0, function () { + var error_1; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + _a.trys.push([0, 2, , 3]); + return [4 /*yield*/, Promise.all(buglist.map(function (bug) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.collectBug(bug)]; + case 1: + _a.sent(); + return [4 /*yield*/, wait(randomRangeNumber(500, 1000))]; + case 2: + _a.sent(); + return [2 /*return*/]; + } + }); + }); }))]; + case 1: + _a.sent(); + return [2 /*return*/, true]; + case 2: + error_1 = _a.sent(); + return [2 /*return*/, error_1]; + case 3: return [2 /*return*/]; + } + }); + }); + }; + return Bugfix; +}()); + var JuejinHelper = /** @class */ (function () { function JuejinHelper() { this.cookie = new Cookie(); @@ -799,7 +943,7 @@ var JuejinHelper = /** @class */ (function () { return new NumPuzz(this); }; JuejinHelper.prototype.bugfix = function () { - // return new Bugfix(this); + return new Bugfix(this); }; return JuejinHelper; }()); diff --git a/src/api.js b/src/api.js deleted file mode 100644 index 9f34cde4..00000000 --- a/src/api.js +++ /dev/null @@ -1,59 +0,0 @@ -import fetch from "node-fetch"; - -class Api { - constructor() { - this.baseURL = ""; - this.headers = { - "content-type": "application/json; charset=utf-8", - "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", - "accept-encoding": "gzip, deflate, br", - "accept-language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", - "sec-ch-ua": `"Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99"`, - "sec-ch-ua-mobile": "?0", - "sec-ch-ua-platform": "Windows", - accept: "*/*", - credentials: "include" - }; - this.requestInterceptor = config => config; - this.responseInterceptor = res => res; - } - - async request(config) { - config = this.requestInterceptor({ - baseURL: config.baseURL || this.baseURL, - url: config.url, - method: (config.method || "get").toLocaleUpperCase(), - headers: { - ...this.headers, - ...config.headers - }, - data: config.data - }); - - const response = await fetch(config.baseURL + config.url, { - method: config.method, - headers: config.headers, - body: config.method !== "GET" ? JSON.stringify(config.data) : undefined - }); - - return this.responseInterceptor(await response.json()); - } - - async get(url, config) { - return this.request({ - ...config, - url, - method: "get" - }); - } - - async post(url, config) { - return this.request({ - ...config, - url, - method: "post" - }); - } -} - -export default Api; diff --git a/src/bugfix.js b/src/bugfix.js deleted file mode 100644 index eba99104..00000000 --- a/src/bugfix.js +++ /dev/null @@ -1,99 +0,0 @@ -import Api from "./api"; -import { wait, randomRangeNumber } from './utils/index' - -class Bugfix extends Api { - constructor(juejin) { - super(); - this.baseURL = "https://api.juejin.cn"; - this.headers.referer = "https://juejin.cn/"; - this.requestInterceptor = config => { - config.headers.cookie = juejin.getCookie(); - if (juejin.user) { - const tokens = juejin.getCookieTokens(); - config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; - } - return config; - }; - this.responseInterceptor = res => { - if (res.err_no) { - throw new Error(res.err_msg); - } - return res.data; - } - } - - /** - * 获取竞赛信息 - * @returns {Promise<*>} - */ - async getCompetition() { - return this.post("/user_api/v1/bugfix/competition", { - // 必须加个空对象,否则接口提示少了参数 - data: {} - }) - } - - /** - * 获取用户信息 - * @param competition_id - * @returns {Promise<*>} - */ - async getUser({ competition_id }) { - return this.post("/user_api/v1/bugfix/user", { - data: { - competition_id - } - }) - } - - /** - * 获取未收集的Bug - * @returns {Promise<*>} - * [ - * { - * bug_type: number 类型位置 - * bug_time: number 时间戳 - * bug_show_type: 1 显示类型 - * is_first: boolean 是否第一次 - * } - * ] - * - */ - async getNotCollectBugList() { - return this.post('/user_api/v1/bugfix/not_collect', { - // 必须加个空对象,否则接口提示少了参数 - data: {} - }) - } - - /** - * 收集Bug - * @param bug_time - * @param bug_type - * @returns {Promise<*>} - */ - async collectBug({ bug_time, bug_type }) { - return this.post("/user_api/v1/bugfix/collect", { - data: { bug_time, bug_type } - }) - } - - /** - * 批量收集Bug - * @param buglist - * @returns {Promise} - */ - async collectBugBatch(buglist = []) { - try { - await Promise.all(buglist.map(async bug => { - await this.collectBug(bug); - await wait(randomRangeNumber(500, 1000)); - })) - return true - } catch (error) { - return error; - } - } -} - -export default Bugfix; diff --git a/src/bugfix.ts b/src/bugfix.ts new file mode 100644 index 00000000..523319a3 --- /dev/null +++ b/src/bugfix.ts @@ -0,0 +1,130 @@ +import { wait, randomRangeNumber } from "./utils/index"; +import JuejinHelper from "./index"; +import axios, { AxiosInstance } from "axios"; + +interface Bug { + bug_type: number; + bug_time: number; + bug_show_type: number; + is_first: boolean; +} + +class Bugfix { + http: AxiosInstance; + + constructor(juejin: JuejinHelper) { + this.http = axios.create({ + baseURL: "https://api.juejin.cn", + headers: { + referer: "https://juejin.cn/", + origin: "https://juejin.cn" + } + }); + + this.http.interceptors.request.use( + function (config) { + if (!juejin) config; + // @ts-ignore + config.headers.cookie = juejin?.getCookie(); + + if ((juejin as JuejinHelper).user) { + const tokens = (juejin as JuejinHelper).getCookieTokens(); + // @ts-ignore + config.url += `${config.url.indexOf("?") === -1 ? "?" : "&"}aid=${tokens.aid}&uuid=${tokens.uuid}`; + } + return config; + }, + function (error) { + return Promise.reject(error); + } + ); + + this.http.interceptors.response.use( + function (response) { + if (response.data.err_no) { + throw new Error(response.data.err_msg); + } + return response.data.data; + }, + function (error) { + return Promise.reject(error); + } + ); + } + + /** + * 获取竞赛信息 + * @returns {Promise<*>} + */ + async getCompetition() { + return this.http.post("/user_api/v1/bugfix/competition", { + // 必须加个空对象,否则接口提示少了参数 + }); + } + + /** + * 获取用户信息 + * @param competition_id + * @returns {Promise<*>} + */ + async getUser(data: { competition_id: number }) { + const { competition_id } = data; + return this.http.post("/user_api/v1/bugfix/user", { + competition_id + }); + } + + /** + * 获取未收集的Bug + * @returns {Promise<*>} + * [ + * { + * bug_type: number 类型位置 + * bug_time: number 时间戳 + * bug_show_type: 1 显示类型 + * is_first: boolean 是否第一次 + * } + * ] + * + */ + async getNotCollectBugList(): Promise { + return this.http.post("/user_api/v1/bugfix/not_collect", { + // 必须加个空对象,否则接口提示少了参数 + }); + } + + /** + * 收集Bug + * @param bug_time + * @param bug_type + * @returns {Promise<*>} + */ + async collectBug(data: Bug) { + const { bug_time, bug_type } = data; + return this.http.post("/user_api/v1/bugfix/collect", { + bug_time, + bug_type + }); + } + + /** + * 批量收集Bug + * @param buglist + * @returns {Promise} + */ + async collectBugBatch(buglist: Bug[] = []): Promise { + try { + await Promise.all( + buglist.map(async bug => { + await this.collectBug(bug); + await wait(randomRangeNumber(500, 1000)); + }) + ); + return true; + } catch (error) { + return error; + } + } +} + +export default Bugfix; diff --git a/src/index.ts b/src/index.ts index 28a57d6b..c1310beb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import Sdk from "./sdk"; import Growth from "./growth"; import SeaGold from "./seagold"; import NumPuzz from "./numpuzz"; +import Bugfix from "./bugfix"; type JuejinUserProps = { user_id: string; @@ -73,7 +74,7 @@ class JuejinHelper { } bugfix() { - // return new Bugfix(this); + return new Bugfix(this); } } diff --git a/test/test-bugfix.js b/test/test-bugfix.js index f897aaa6..7f60593e 100644 --- a/test/test-bugfix.js +++ b/test/test-bugfix.js @@ -1,4 +1,4 @@ -const JuejinHelper = require('..'); +const JuejinHelper = require(".."); const mockCookie = `juejin-cookies`; diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts index 0a67c1b2..cd6a503d 100644 --- a/types/juejin-helper.d.ts +++ b/types/juejin-helper.d.ts @@ -177,6 +177,57 @@ declare class NumPuzz { }): Promise>; } +interface Bug { + bug_type: number; + bug_time: number; + bug_show_type: number; + is_first: boolean; +} +declare class Bugfix { + http: AxiosInstance; + constructor(juejin: JuejinHelper); + /** + * 获取竞赛信息 + * @returns {Promise<*>} + */ + getCompetition(): Promise>; + /** + * 获取用户信息 + * @param competition_id + * @returns {Promise<*>} + */ + getUser(data: { + competition_id: number; + }): Promise>; + /** + * 获取未收集的Bug + * @returns {Promise<*>} + * [ + * { + * bug_type: number 类型位置 + * bug_time: number 时间戳 + * bug_show_type: 1 显示类型 + * is_first: boolean 是否第一次 + * } + * ] + * + */ + getNotCollectBugList(): Promise; + /** + * 收集Bug + * @param bug_time + * @param bug_type + * @returns {Promise<*>} + */ + collectBug(data: Bug): Promise>; + /** + * 批量收集Bug + * @param buglist + * @returns {Promise} + */ + collectBugBatch(buglist?: Bug[]): Promise; +} + declare type JuejinUserProps = { user_id: string; user_name: string; @@ -202,7 +253,7 @@ declare class JuejinHelper { growth(): Growth; seagold(): Seagold; numpuzz(): NumPuzz; - bugfix(): void; + bugfix(): Bugfix; } export { JuejinHelper as default }; From 48c444da7b38815e6e47cdb09420b37c42900070 Mon Sep 17 00:00:00 2001 From: derek Date: Mon, 8 Aug 2022 18:58:46 +0800 Subject: [PATCH 042/131] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c5c0c189..290a59b2 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "module": "build/juejin-helper.esm.js", "types": "types/juejin-helper.d.ts", "scripts": { - "watch": "rollup -c -w", + "dev": "rollup -c -w", "build": "rollup -c" }, "files": [ From 3e2c95d9415cc02eb44889662b45d1dd93dc1d53 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 01:00:31 +0800 Subject: [PATCH 043/131] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=B8=BA?= =?UTF-8?q?ts=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/juejin-helper.c.js | 57 ++++++++++--------- build/juejin-helper.esm.js | 57 ++++++++++--------- package.json | 1 + src/utils/{index.js => index.ts} | 6 +- ...-cookietokens.js => parse-cookietokens.ts} | 5 +- yarn.lock | 5 ++ 6 files changed, 75 insertions(+), 56 deletions(-) rename src/utils/{index.js => index.ts} (57%) rename src/utils/{parse-cookietokens.js => parse-cookietokens.ts} (86%) diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js index 62db89e6..f4a9660b 100644 --- a/build/juejin-helper.c.js +++ b/build/juejin-helper.c.js @@ -83,38 +83,43 @@ instance$1.interceptors.response.use(function (response) { }); function parseCookieTokens(cookie) { - const cookieTokens = { - aid: "", - uuid: "", - user_unique_id: "", - web_id: "" - }; - - const tokensReg = /^__tea_cookie_tokens_(\d+)$/; - for (const [key, value] of cookie.entries()) { - if (tokensReg.test(key)) { - cookieTokens.aid = key.match(tokensReg)[1]; - const json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); - cookieTokens.uuid = json.user_unique_id; - cookieTokens.user_unique_id = json.user_unique_id; - cookieTokens.web_id = json.web_id; - break; + var cookieTokens = { + aid: "", + uuid: "", + user_unique_id: "", + web_id: "" + }; + var tokensReg = /^__tea_cookie_tokens_(\d+)$/; + // @ts-ignore + for (var _i = 0, _a = cookie.entries(); _i < _a.length; _i++) { + var _b = _a[_i], key = _b[0], value = _b[1]; + if (tokensReg.test(key)) { + cookieTokens.aid = key.match(tokensReg)[1]; + var json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); + cookieTokens.uuid = json.user_unique_id; + cookieTokens.user_unique_id = json.user_unique_id; + cookieTokens.web_id = json.web_id; + break; + } } - } - - return cookieTokens; + return cookieTokens; } -async function wait(time = 0) { - return new Promise(resolve => setTimeout(resolve, time)); +function wait(time) { + if (time === void 0) { time = 0; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, time); })]; + }); + }); } - -function randomRangeNumber(start = 500, end = 1000) { - return (Math.random() * (end - start) + start) >> 0; +function randomRangeNumber(start, end) { + if (start === void 0) { start = 500; } + if (end === void 0) { end = 1000; } + return (Math.random() * (end - start) + start) >> 0; } - function generateUUID() { - return uuid.v4(); + return uuid.v4(); } var Cookie = /** @class */ (function () { diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js index ae2743f7..499fbc6e 100644 --- a/build/juejin-helper.esm.js +++ b/build/juejin-helper.esm.js @@ -76,38 +76,43 @@ instance$1.interceptors.response.use(function (response) { }); function parseCookieTokens(cookie) { - const cookieTokens = { - aid: "", - uuid: "", - user_unique_id: "", - web_id: "" - }; - - const tokensReg = /^__tea_cookie_tokens_(\d+)$/; - for (const [key, value] of cookie.entries()) { - if (tokensReg.test(key)) { - cookieTokens.aid = key.match(tokensReg)[1]; - const json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); - cookieTokens.uuid = json.user_unique_id; - cookieTokens.user_unique_id = json.user_unique_id; - cookieTokens.web_id = json.web_id; - break; + var cookieTokens = { + aid: "", + uuid: "", + user_unique_id: "", + web_id: "" + }; + var tokensReg = /^__tea_cookie_tokens_(\d+)$/; + // @ts-ignore + for (var _i = 0, _a = cookie.entries(); _i < _a.length; _i++) { + var _b = _a[_i], key = _b[0], value = _b[1]; + if (tokensReg.test(key)) { + cookieTokens.aid = key.match(tokensReg)[1]; + var json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); + cookieTokens.uuid = json.user_unique_id; + cookieTokens.user_unique_id = json.user_unique_id; + cookieTokens.web_id = json.web_id; + break; + } } - } - - return cookieTokens; + return cookieTokens; } -async function wait(time = 0) { - return new Promise(resolve => setTimeout(resolve, time)); +function wait(time) { + if (time === void 0) { time = 0; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, time); })]; + }); + }); } - -function randomRangeNumber(start = 500, end = 1000) { - return (Math.random() * (end - start) + start) >> 0; +function randomRangeNumber(start, end) { + if (start === void 0) { start = 500; } + if (end === void 0) { end = 1000; } + return (Math.random() * (end - start) + start) >> 0; } - function generateUUID() { - return v4(); + return v4(); } var Cookie = /** @class */ (function () { diff --git a/package.json b/package.json index 290a59b2..6da2e320 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-sucrase": "^4.0.4", "@types/jsonwebtoken": "^8.5.8", + "@types/uuid": "^8.3.4", "@typescript-eslint/parser": "^5.32.0", "eslint": "^8.14.0", "eslint-config-next": "^12.1.5", diff --git a/src/utils/index.js b/src/utils/index.ts similarity index 57% rename from src/utils/index.js rename to src/utils/index.ts index f1fb6e56..f5694605 100644 --- a/src/utils/index.js +++ b/src/utils/index.ts @@ -1,15 +1,15 @@ import { v4 as uuid } from "uuid"; import { parseCookieTokens } from "./parse-cookietokens"; -export async function wait(time = 0) { +export async function wait(time: number = 0): Promise { return new Promise(resolve => setTimeout(resolve, time)); } -export function randomRangeNumber(start = 500, end = 1000) { +export function randomRangeNumber(start: number = 500, end: number = 1000): number { return (Math.random() * (end - start) + start) >> 0; } -export function generateUUID() { +export function generateUUID(): string { return uuid(); } diff --git a/src/utils/parse-cookietokens.js b/src/utils/parse-cookietokens.ts similarity index 86% rename from src/utils/parse-cookietokens.js rename to src/utils/parse-cookietokens.ts index 44ee12b3..111d8d32 100644 --- a/src/utils/parse-cookietokens.js +++ b/src/utils/parse-cookietokens.ts @@ -1,4 +1,6 @@ -function parseCookieTokens(cookie) { +import Cookie from "./cookie"; + +function parseCookieTokens(cookie: Cookie) { const cookieTokens = { aid: "", uuid: "", @@ -7,6 +9,7 @@ function parseCookieTokens(cookie) { }; const tokensReg = /^__tea_cookie_tokens_(\d+)$/; + // @ts-ignore for (const [key, value] of cookie.entries()) { if (tokensReg.test(key)) { cookieTokens.aid = key.match(tokensReg)[1]; diff --git a/yarn.lock b/yarn.lock index ba384a97..d9be1559 100644 --- a/yarn.lock +++ b/yarn.lock @@ -189,6 +189,11 @@ dependencies: "@types/node" "*" +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + "@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.32.0": version "5.32.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" From fcfac7eff24746bc7ae6f8c58342ff37e661621d Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 19:25:59 +0800 Subject: [PATCH 044/131] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 7 + .github/workflows/checkin.yml | 28 + .github/workflows/seagold.yml | 28 + .gitignore | 2 + CONTRIBUTING.md | 41 + README.md | 144 +- build/juejin-helper.c.js | 963 ------------- build/juejin-helper.esm.js | 956 ------------ package.json | 51 +- packages/juejin-helper/LICENSE | 201 +++ packages/juejin-helper/README.md | 142 ++ packages/juejin-helper/package.json | 43 + {src => packages/juejin-helper/src}/bugfix.ts | 0 {src => packages/juejin-helper/src}/growth.ts | 0 {src => packages/juejin-helper/src}/index.ts | 0 .../juejin-helper/src}/numpuzz.ts | 0 {src => packages/juejin-helper/src}/sdk.ts | 0 .../juejin-helper/src}/seagold.ts | 0 .../juejin-helper/src}/services/api.ts | 0 .../juejin-helper/src}/services/snssdk.ts | 0 .../juejin-helper/src}/utils/cookie.ts | 0 .../juejin-helper/src}/utils/index.ts | 0 .../src}/utils/parse-cookietokens.ts | 0 .../juejin-helper/test}/test-bugfix.js | 0 .../juejin-helper/test}/test-growth.js | 0 .../juejin-helper/test}/test-login.js | 0 .../juejin-helper/test}/test-numpuzz.js | 0 .../juejin-helper/test}/test-sdk.js | 0 .../juejin-helper/test}/test-seagold.js | 0 packages/juejin-helper/test/test.js | 9 + packages/juejin-helper/tsconfig.json | 20 + resources/getcookie.png | Bin 0 -> 511696 bytes rollup.config.js | 87 +- tsconfig.json | 6 +- types/juejin-helper.d.ts | 259 ---- workflows/checkin.js | 232 +++ workflows/package.json | 19 + workflows/seagold.js | 440 ++++++ workflows/utils/dingding.js | 24 + workflows/utils/email.js | 63 + workflows/utils/env.js | 28 + workflows/utils/pushMessage.js | 12 + workflows/utils/pushplus.js | 41 + workflows/utils/utils.js | 16 + yarn.lock | 1283 ++++++++++++++++- 45 files changed, 2745 insertions(+), 2400 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/checkin.yml create mode 100644 .github/workflows/seagold.yml create mode 100644 CONTRIBUTING.md delete mode 100644 build/juejin-helper.c.js delete mode 100644 build/juejin-helper.esm.js create mode 100644 packages/juejin-helper/LICENSE create mode 100644 packages/juejin-helper/README.md create mode 100644 packages/juejin-helper/package.json rename {src => packages/juejin-helper/src}/bugfix.ts (100%) rename {src => packages/juejin-helper/src}/growth.ts (100%) rename {src => packages/juejin-helper/src}/index.ts (100%) rename {src => packages/juejin-helper/src}/numpuzz.ts (100%) rename {src => packages/juejin-helper/src}/sdk.ts (100%) rename {src => packages/juejin-helper/src}/seagold.ts (100%) rename {src => packages/juejin-helper/src}/services/api.ts (100%) rename {src => packages/juejin-helper/src}/services/snssdk.ts (100%) rename {src => packages/juejin-helper/src}/utils/cookie.ts (100%) rename {src => packages/juejin-helper/src}/utils/index.ts (100%) rename {src => packages/juejin-helper/src}/utils/parse-cookietokens.ts (100%) rename {test => packages/juejin-helper/test}/test-bugfix.js (100%) rename {test => packages/juejin-helper/test}/test-growth.js (100%) rename {test => packages/juejin-helper/test}/test-login.js (100%) rename {test => packages/juejin-helper/test}/test-numpuzz.js (100%) rename {test => packages/juejin-helper/test}/test-sdk.js (100%) rename {test => packages/juejin-helper/test}/test-seagold.js (100%) create mode 100644 packages/juejin-helper/test/test.js create mode 100644 packages/juejin-helper/tsconfig.json create mode 100644 resources/getcookie.png delete mode 100644 types/juejin-helper.d.ts create mode 100644 workflows/checkin.js create mode 100644 workflows/package.json create mode 100644 workflows/seagold.js create mode 100644 workflows/utils/dingding.js create mode 100644 workflows/utils/email.js create mode 100644 workflows/utils/env.js create mode 100644 workflows/utils/pushMessage.js create mode 100644 workflows/utils/pushplus.js create mode 100644 workflows/utils/utils.js diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..513f4228 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,7 @@ + diff --git a/.github/workflows/checkin.yml b/.github/workflows/checkin.yml new file mode 100644 index 00000000..8f397823 --- /dev/null +++ b/.github/workflows/checkin.yml @@ -0,0 +1,28 @@ +name: CheckIn + +on: + schedule: + - cron: "40 22 * * *" # 北京时间上午06:40 + workflow_dispatch: +jobs: + CheckIn: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + - name: Run Project + env: + COOKIE: ${{ secrets.COOKIE }} + COOKIE_2: ${{ secrets.COOKIE_2 }} + COOKIE_3: ${{ secrets.COOKIE_3 }} + COOKIE_4: ${{ secrets.COOKIE_4 }} + COOKIE_5: ${{ secrets.COOKIE_5 }} + EMAIL_USER: ${{ secrets.EMAIL_USER }} + EMAIL_PASS: ${{ secrets.EMAIL_PASS }} + EMAIL_TO: ${{ secrets.EMAIL_TO }} + DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} + PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} + run: | + cd workflows + yarn + yarn checkin diff --git a/.github/workflows/seagold.yml b/.github/workflows/seagold.yml new file mode 100644 index 00000000..8cdd99af --- /dev/null +++ b/.github/workflows/seagold.yml @@ -0,0 +1,28 @@ +name: SeaGold + +on: + schedule: + - cron: "30 22 * * *" # 北京时间上午06:30 + workflow_dispatch: +jobs: + SeaGold: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + - name: Run Project + env: + COOKIE: ${{ secrets.COOKIE }} + COOKIE_2: ${{ secrets.COOKIE_2 }} + COOKIE_3: ${{ secrets.COOKIE_3 }} + COOKIE_4: ${{ secrets.COOKIE_4 }} + COOKIE_5: ${{ secrets.COOKIE_5 }} + EMAIL_USER: ${{ secrets.EMAIL_USER }} + EMAIL_PASS: ${{ secrets.EMAIL_PASS }} + EMAIL_TO: ${{ secrets.EMAIL_TO }} + DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} + PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} + run: | + cd workflows + yarn + yarn seagold diff --git a/.gitignore b/.gitignore index 7df6d182..1d3662fe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .DS_Store node_modules +build +types # local env files .env.local diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..a07b7eba --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,41 @@ +# 参与贡献 + +## 分支介绍 + +- `package` 掘金API发布npm包,供给自动化工作流使用。 +- `workflows` 自动化工作流开发分支。 +- `main` 是 workflows 分支的稳定版。 + +**处理自动化相关逻辑:** +base: `workflows` <- compare `your branch` + +**处理JueJinAPI相关逻辑:** +base: `package` <- compare `your branch` + +## workflows 分支 + +### 安装 + +- `yarn` 安装依赖 + +### 环境变量 + +- `/scripts/utils/env.js` 替换本地测试所需的环境变量 + +```javascript +module.exports = { + COOKIE: "测试掘金Cookie", + // ... +}; +``` + +### 本地运行 + +- `yarn checkin` 运行掘金签到脚本 +- `yarn seagold` 运行海底掘金游戏脚本 + +## package 分支 + +- `yarn` 安装依赖 +- `yarn dev` 启动开发模式 +- `node tests/your-test.js` 测试一个模块 diff --git a/README.md b/README.md index 26418bb9..f7005dd4 100644 --- a/README.md +++ b/README.md @@ -6,137 +6,63 @@

JuejinHelper-稀土掘金助手

-

签到、抽奖、沾喜气、海底掘金游戏、自动化工作流。

+

签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。

-## 示例 +## 使用 -### 签到示例 -```javascript -const JuejinHelper = require("juejin-helper"); +自动化执行任务: 掘金每日签到, 沾喜气, 免费抽奖, 消除Bug, 海底掘金游戏, 最后将结果报告邮件通知订阅人。\ +自动化运行时间: 北京时间上午06:30 -async function run() { - const juejin = new JuejinHelper(); - await juejin.login("你的掘金Cookie"); +1. [Fork 仓库](https://github.com/iDerekLi/juejin-helper) - const growth = juejin.growth(); +2. 仓库 -> Settings -> Secrets -> New repository secret, 添加Secrets变量如下: - // 签到 - await growth.checkIn(); + | Name | Value | Required | + | --- | --- | --- | + | COOKIE | 掘金网站Cookie | 是 | + | COOKIE_2 | 多用户, 当需要同时运行多个掘金用户时所需, 支持最多 **5** 名用户(即COOKIE + COOKIE_2 - COOKIE_5) | 否 | + | EMAIL_USER | 发件人邮箱地址(需要开启 SMTP) | 否 | + | EMAIL_PASS | 发件人邮箱密码(SMTP密码) | 否 | + | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | + | DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | + | PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | - // 获取当前矿石数 - // await growth.getCurrentPoint(); +4. 仓库 -> Actions, 检查Workflows并启用。 - // 获取统计签到天数 - // await growth.getCounts(); +## 预览 - // 获取今日签到状态 - // await growth.getTodayStatus(); +| 掘金每日签到 | 海底掘金游戏 | +|:-----------:| :-------------:| +| ![掘金每日签到](https://user-images.githubusercontent.com/24502299/156475511-342cfcd8-3b66-4b9c-8614-215e0b4e08a1.jpg) | ![海底掘金游戏](https://user-images.githubusercontent.com/24502299/156475550-c8cc459a-3b27-4ca6-a07b-902b65bea7a9.jpg) | - // 获取抽奖配置 - // await growth.getLotteryConfig(); - - // 抽奖 - // await growth.drawLottery(); - - // 获取抽奖幸运用户 - // await growth.getLotteriesLuckyUsers({ page_no = 1, page_size = 5 }); // => { lotteries: [{ lottery_history_id }, ...] } - - // 获取我的幸运值 - // await growth.getMyLucky(); - - // 沾喜气 - // await growth.dipLucky(lottery_history_id); // => { has_dip, dip_value, total_value, dip_action } - - await juejin.logout(); -} - -run(); -``` - -### 海底掘金游戏示例 -```javascript -const JuejinHelper = require("juejin-helper"); - -async function run() { - const juejin = new JuejinHelper(); - await juejin.login("你的掘金Cookie"); - - const seagold = juejin.seagold(); - - await seagold.gameLogin(); // 登陆游戏 - - let gameInfo = null; - - const info = await seagold.gameInfo(); // 游戏状态 - if (info.gameStatus === 1) { - gameInfo = info.gameInfo; // 继续游戏 - } else { - gameInfo = await seagold.gameStart(); // 开始游戏 - } - - const command = ["U", "L"]; - await seagold.gameCommand(gameInfo.gameId, command); // 执行命令 - - const result = await seagold.gameOver(); // 游戏结束 - console.log(result); // => { ... } - - await juejin.logout(); -} - -run(); -``` - -### bugfix 游戏示例 -```javascript -const JuejinHelper = require("juejin-helper"); - -async function run() { - const juejin = new JuejinHelper(); - await juejin.login("你的掘金Cookie"); - - const bugfix = juejin.bugfix(); - - const notCollectBugList = await bugfix.getNotCollectBugList(); - await bugfix.collectBugBatch(notCollectBugList); - console.log(`收集Bug ${notCollectBugList.length}`); - - const competition = await bugfix.getCompetition(); - const bugfixInfo = await bugfix.getUser(competition); - console.log(`未消除Bug数量 ${bugfixInfo.user_own_bug}`); -} -``` +## 问题 -### SDK示例 +### 如何获取Cookie -```javascript -const JuejinHelper = require("juejin-helper"); +掘金网站Cookie, 打开浏览器,登录 [掘金](https://juejin.cn/), 打开控制台DevTools(快捷键F12) -> Network,复制 cookie, **掘金Cookie有效期约1个月需定期更新.** -async function run() { - const juejin = new JuejinHelper(); - await juejin.login("你的掘金Cookie"); +DevTools截图: +getcookie - const sdk = juejin.sdk(); +### 如何授权海底掘金游戏 - await sdk.slardarSDKSetting(); // SDK设置 - await sdk.list(/* events */); // 埋点数据 -} +运行自动化后通知订阅人 `玩家未授权, 请前往掘金授权!`, 说明您是新玩家从始至终未进行海底掘金游戏, 需要先进行游戏授权. -run(); -``` +授权步骤: 登陆 [掘金](https://juejin.cn/) -> 每日签到 -> 海底掘金挑战赛(点击进入游戏, 点击授权, 最好再随意玩一局). 后续就可以由掘金助手自动处理. -## 问题 +或点击👇这个海报帮您直达海底掘金挑战赛 -### 如何获取Cookie +[![海底掘金挑战赛](https://user-images.githubusercontent.com/24502299/151397151-0d69998a-2310-4a32-945f-c8e0035ed65d.png)](https://juejin.cn/game/haidijuejin/) -掘金网站Cookie, 打开浏览器,登录 [掘金](https://juejin.cn/), 打开控制台DevTools(快捷键F12) -> Network,复制 cookie, **掘金Cookie有效期约1个月需定期更新.** +## 贡献 -DevTools截图: -getcookie +这个项目的存在要感谢所有做出贡献的人。 请先阅读 [[Contribute](CONTRIBUTING.md)]。 +您可以将任何想法作为 [拉取请求](https://github.com/iDerekLi/juejin-helper/pulls) 或 [GitHub问题](https://github.com/iDerekLi/juejin-helper/issues) 提交。 ## 赞赏 -### ☕️微信赞赏!鼓励升级! +### ☕️微信赞赏! 微信赞赏 ## 许可 -[Apache-2.0](./LICENSE) +[MIT](./LICENSE) diff --git a/build/juejin-helper.c.js b/build/juejin-helper.c.js deleted file mode 100644 index f4a9660b..00000000 --- a/build/juejin-helper.c.js +++ /dev/null @@ -1,963 +0,0 @@ -'use strict'; - -var axios = require('axios'); -var uuid = require('uuid'); -var jwt = require('jsonwebtoken'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios); -var jwt__default = /*#__PURE__*/_interopDefaultLegacy(jwt); - -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -var instance$1 = axios__default["default"].create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/" - } -}); -instance$1.interceptors.request.use(function (config) { - return config; -}, function (error) { - return Promise.reject(error); -}); -instance$1.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; -}, function (error) { - return Promise.reject(error); -}); - -function parseCookieTokens(cookie) { - var cookieTokens = { - aid: "", - uuid: "", - user_unique_id: "", - web_id: "" - }; - var tokensReg = /^__tea_cookie_tokens_(\d+)$/; - // @ts-ignore - for (var _i = 0, _a = cookie.entries(); _i < _a.length; _i++) { - var _b = _a[_i], key = _b[0], value = _b[1]; - if (tokensReg.test(key)) { - cookieTokens.aid = key.match(tokensReg)[1]; - var json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); - cookieTokens.uuid = json.user_unique_id; - cookieTokens.user_unique_id = json.user_unique_id; - cookieTokens.web_id = json.web_id; - break; - } - } - return cookieTokens; -} - -function wait(time) { - if (time === void 0) { time = 0; } - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, time); })]; - }); - }); -} -function randomRangeNumber(start, end) { - if (start === void 0) { start = 500; } - if (end === void 0) { end = 1000; } - return (Math.random() * (end - start) + start) >> 0; -} -function generateUUID() { - return uuid.v4(); -} - -var Cookie = /** @class */ (function () { - function Cookie(cookie) { - if (cookie === void 0) { cookie = ""; } - this.cookie = ""; - this.stack = new Map(); - if (cookie) { - this.setCookieValue(cookie); - } - } - Cookie.prototype.setCookieValue = function (cookie) { - var _this = this; - if (cookie === void 0) { cookie = ""; } - this.stack.clear(); - this.cookie = cookie; - cookie - .split("; ") - .map(function (string) { return string.split("="); }) - .forEach(function (_a) { - var key = _a[0], value = _a[1]; - _this.stack.set(key, value); - }); - }; - Cookie.prototype.get = function (key) { - return this.stack.get(key); - }; - Cookie.prototype.has = function (key) { - return this.stack.has(key); - }; - Cookie.prototype.set = function (key, value) { - return this.stack.set(key, value); - }; - Cookie.prototype.entries = function () { - return this.stack.entries(); - }; - Cookie.prototype.clear = function () { - this.cookie = ""; - this.stack.clear(); - }; - Cookie.prototype.toString = function () { - return this.cookie; - }; - return Cookie; -}()); - -var instance = axios__default["default"].create({ - baseURL: "", - headers: { - // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "cross-site" - } -}); -instance.interceptors.request.use(function (config) { - return config; -}, function (error) { - return Promise.reject(error); -}); -instance.interceptors.response.use(function (response) { - var res = response.data; - if ("e" in res) { - return res; - } - if (res.errno !== 200) { - throw new Error(res.message); - } - return res.data; -}, function (error) { - return Promise.reject(error); -}); - -/** - * SDK - */ -var Sdk = /** @class */ (function () { - function Sdk(juejin) { - this.sdk_type = "npm"; - this.sdk_lib = "js"; - this.sdk_version = "4.2.9"; - this.juejin = juejin; - } - Sdk.prototype.slardarSDKSetting = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { - headers: { - cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) - } - })]; - }); - }); - }; - Sdk.prototype.list = function (events) { - var _a; - if (events === void 0) { events = []; } - return __awaiter(this, void 0, void 0, function () { - var cookieTokens, userInfo, userIsLogin, data; - return __generator(this, function (_b) { - cookieTokens = this.juejin.getCookieTokens(); - userInfo = this.juejin.getUser(); - userIsLogin = !!userInfo; - data = [ - { - events: events, - header: { - app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), - browser: "Chrome", - browser_version: "99.0.4844.51", - custom: JSON.stringify(userIsLogin - ? { - student_verify_status: userInfo.student_status ? "student" : "not_student", - user_level: userInfo.level - } - : {}), - device_model: "Windows NT 10.0", - os_name: "windows", - os_version: "10", - resolution: "1920x1080", - screen_width: 1920, - screen_height: 1080, - width: 1920, - height: 1080, - language: "zh-CN", - platform: "Web", - referrer: "", - referrer_host: "", - sdk_lib: this.sdk_lib, - sdk_version: this.sdk_version, - timezone: 8, - tz_offset: -28800, - utm_campaign: "ad", - utm_medium: "user_center" - }, - local_time: (Date.now() / 1000) >> 0, - user: { - user_id: ((_a = this.juejin.getUser()) === null || _a === void 0 ? void 0 : _a.user_id) || "", - user_is_login: userIsLogin, - user_unique_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.user_unique_id) || "", - web_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.web_id) || "" - } - } - ]; - return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { - headers: { - host: "mcs.snssdk.com" - }, - data: data - })]; - }); - }); - }; - // 模拟成长API事件埋点 - Sdk.prototype.mockTrackGrowthEvent = function () { - return __awaiter(this, void 0, void 0, function () { - var sessionid, localtime, eventindex; - return __generator(this, function (_a) { - sessionid = generateUUID(); - localtime = Date.now(); - eventindex = localtime + randomRangeNumber(4000, 10000); - return [2 /*return*/, this.list([ - { - ab_sdk_version: "90000611,90001195", - event: "task_center_sign_in_visit", - is_bav: 0, - local_time_ms: localtime + 1, - params: JSON.stringify({ - event_index: eventindex + 1, - _staging_flag: 0 - }), - session_id: sessionid - }, - { - ab_sdk_version: "90000611,90001195", - event: "predefine_pageview", - is_bav: 0, - local_time_ms: localtime, - params: JSON.stringify({ - $is_first_time: "false", - event_index: eventindex, - referrer: "", - time: localtime, - title: "每日签到 - 掘金", - url: "https://juejin.cn/user/center/signin", - url_path: "/user/center/signin", - _staging_flag: 0 - }), - session_id: sessionid - } - ])]; - }); - }); - }; - // 模拟OnLoad事件埋点 - Sdk.prototype.mockTrackOnloadEvent = function () { - return __awaiter(this, void 0, void 0, function () { - var cookieTokens, localtime; - return __generator(this, function (_a) { - cookieTokens = this.juejin.getCookieTokens(); - localtime = Date.now(); - return [2 /*return*/, this.list([ - { - event: "onload", - local_time_ms: localtime, - params: JSON.stringify({ - app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), - app_name: "", - sdk_version: this.sdk_version, - sdk_type: this.sdk_type, - sdk_config: { - app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), - channel: "cn", - log: false, - enable_ab_test: true, - ab_channel_domain: "https://abtestvm.bytedance.com", - cross_subdomain: true, - cookie_expire: 94608000000, - cookie_domain: "juejin.cn", - enable_stay_duration: true, - maxDuration: 1200000 - } - }) - } - ])]; - }); - }); - }; - return Sdk; -}()); - -var Growth = /** @class */ (function () { - function Growth(juejin) { - this.http = axios__default["default"].create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn" - } - }); - this.http.interceptors.request.use(function (config) { - // @ts-ignore - config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); - if (juejin.user) { - var tokens = juejin.getCookieTokens(); - // @ts-ignore - config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; - }, function (error) { - return Promise.reject(error); - }); - } - /** - * 获取统计签到天数 - * @returns {Promise<*>} - * { - * cont_count 连续签到天数 - * sum_count 累计签到天数 - * } - */ - Growth.prototype.getCounts = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_counts")]; - }); - }); - }; - /** - * 获取当前矿石数 - * @returns {Promise<*>} - * number 当前矿石数 - */ - Growth.prototype.getCurrentPoint = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_cur_point")]; - }); - }); - }; - /** - * 获取今日签到状态 - * @returns {Promise<*>} - * boolean 是否签到 - */ - Growth.prototype.getTodayStatus = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_today_status")]; - }); - }); - }; - /** - * 获取月签到日历 - * @returns {Promise<*>} - * [ - * { - * date: timestamp(格式1646150400) - * point: number增加矿石数 - * status: enum(1 今日, 4 未签到, 3 已签到) - * } - * ] - */ - Growth.prototype.getByMonth = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_by_month")]; - }); - }); - }; - Growth.prototype.getLotteryConfig = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/lottery_config/get")]; - }); - }); - }; - Growth.prototype.drawLottery = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/lottery/draw")]; - }); - }); - }; - Growth.prototype.checkIn = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/check_in")]; - }); - }); - }; - Growth.prototype.getLotteriesLuckyUsers = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, _b, page_no, _c, page_size; - return __generator(this, function (_d) { - _a = data || {}, _b = _a.page_no, page_no = _b === void 0 ? 1 : _b, _c = _a.page_size, page_size = _c === void 0 ? 5 : _c; - return [2 /*return*/, this.http.post("/growth_api/v1/lottery_history/global_big", { - page_no: page_no, - page_size: page_size - })]; - }); - }); - }; - Growth.prototype.dipLucky = function (lottery_history_id) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/dip_lucky", { - lottery_history_id: lottery_history_id - })]; - }); - }); - }; - Growth.prototype.getMyLucky = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/my_lucky")]; - }); - }); - }; - return Growth; -}()); - -var Seagold = /** @class */ (function () { - function Seagold(juejin) { - this.juejin = juejin; - this.http = axios__default["default"].create({ - baseURL: "https://juejin-game.bytedance.com/game", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - Authorization: "" - } - }); - this.http.interceptors.request.use(function (config) { - if (juejin.user) { - // @ts-ignore - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - var res = response.data; - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - }, function (error) { - return Promise.reject(error); - }); - } - Seagold.prototype.setToken = function (token) { - // @ts-ignore - this.http.defaults.headers.Authorization = "Bearer ".concat(token); - }; - Seagold.prototype.gameLogin = function () { - var _a; - return __awaiter(this, void 0, void 0, function () { - var _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - _b = this.setToken; - return [4 /*yield*/, this.juejin.makeToken()]; - case 1: - _b.apply(this, [_c.sent()]); - return [2 /*return*/, this.http.post("/sea-gold/user/login", { - name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name - })]; - } - }); - }); - }; - Seagold.prototype.gameInfo = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/sea-gold/home/info")]; - }); - }); - }; - Seagold.prototype.gameStart = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, roleId; - return __generator(this, function (_b) { - _a = (data || {}).roleId, roleId = _a === void 0 ? 3 : _a; - return [2 /*return*/, this.http.post("/sea-gold/game/start", { - roleId: roleId - })]; - }); - }); - }; - Seagold.prototype.gameOver = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, isButton; - return __generator(this, function (_b) { - _a = (data || {}).isButton, isButton = _a === void 0 ? 1 : _a; - // const result = { - // activity: "", - // deep: 3, - // gameDiamond: 34, // 当局获取 - // originMapData: [], - // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], - // picoDiamond: 0, - // realDiamond: 34, // 真实获取 - // todayDiamond: 34, // 今日获取 - // todayLimitDiamond: 1500 // 今日最大获取 - // }; - return [2 /*return*/, this.http.post("/sea-gold/game/over", { - isButton: isButton - })]; - }); - }); - }; - Seagold.prototype.gameCommand = function (gameId, command) { - if (command === void 0) { command = []; } - return __awaiter(this, void 0, void 0, function () { - var privateKey, token; - return __generator(this, function (_a) { - privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; - token = jwt__default["default"].sign({ - gameId: gameId, - time: new Date().getTime() - }, privateKey, { - algorithm: "ES256", - expiresIn: 2592e3, - header: { - alg: "ES256", - typ: "JWT" - } - }); - return [2 /*return*/, this.http.post("/sea-gold/game/command", { - command: command - // command: ["R", { times: 2, command: ["R"] }, "2"] - }, { - headers: { - "x-tt-gameid": token - } - })]; - }); - }); - }; - return Seagold; -}()); - -/** - * 数字拼图 - * 游戏地址: https://juejin.cn/game/shuzimiti/ - */ -var NumPuzz = /** @class */ (function () { - function NumPuzz(juejin) { - this.juejin = juejin; - this.http = axios__default["default"].create({ - baseURL: "https://juejin-game.bytedance.com/game", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - Authorization: "" - } - }); - this.http.interceptors.request.use(function (config) { - if (juejin.user) { - // @ts-ignore - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - var res = response.data; - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - }, function (error) { - return Promise.reject(error); - }); - } - NumPuzz.prototype.setToken = function (token) { - // @ts-ignore - this.http.defaults.headers.Authorization = "Bearer ".concat(token); - }; - /** - * 游戏登录 - * @returns {Promise<*>} - */ - NumPuzz.prototype.gameLogin = function () { - var _a; - return __awaiter(this, void 0, void 0, function () { - var _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - _b = this.setToken; - return [4 /*yield*/, this.juejin.makeToken()]; - case 1: - _b.apply(this, [_c.sent()]); - return [2 /*return*/, this.http.post("/num-puzz/user/login", { - name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name - })]; - } - }); - }); - }; - /** - * 获取主页信息 - * @returns {Promise<*>} - * bug: 0 - * diamond: 200 - * originality: 0 - * showToast: false - */ - NumPuzz.prototype.gameInfo = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/num-puzz/home/info")]; - }); - }); - }; - /** - * 开始游戏 - * @param level Number [1|2|3] 简单|中等|困难 - * @returns {Promise<*>} - * guide: 0 - * level: 游戏等级 - * map: 游戏地图 - * round: 关卡 - * target: 目标结果 - */ - NumPuzz.prototype.gameStart = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, level; - return __generator(this, function (_b) { - _a = (data || {}).level, level = _a === void 0 ? 1 : _a; - return [2 /*return*/, this.http.post("/num-puzz/game/start", { - level: level - })]; - }); - }); - }; - /** - * 跳过游戏 - * @description 结构同开始游戏 - * @param level - * @returns {Promise<*>} - */ - NumPuzz.prototype.gameSkip = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, level; - return __generator(this, function (_b) { - _a = (data || {}).level, level = _a === void 0 ? 1 : _a; - return [2 /*return*/, this.http.post("/num-puzz/game/skip", { - level: level - })]; - }); - }); - }; - /** - * 游戏完成 - * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] - * @param command - * @returns {Promise<*>} - */ - NumPuzz.prototype.gameComplete = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, _b, level, _c, command; - return __generator(this, function (_d) { - _a = data || {}, _b = _a.level, level = _b === void 0 ? 1 : _b, _c = _a.command, command = _c === void 0 ? [] : _c; - return [2 /*return*/, this.http.post("/num-puzz/game/complete", { - level: level, - command: command - })]; - }); - }); - }; - return NumPuzz; -}()); - -var Bugfix = /** @class */ (function () { - function Bugfix(juejin) { - this.http = axios__default["default"].create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn" - } - }); - this.http.interceptors.request.use(function (config) { - // @ts-ignore - config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); - if (juejin.user) { - var tokens = juejin.getCookieTokens(); - // @ts-ignore - config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; - }, function (error) { - return Promise.reject(error); - }); - } - /** - * 获取竞赛信息 - * @returns {Promise<*>} - */ - Bugfix.prototype.getCompetition = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/competition", { - // 必须加个空对象,否则接口提示少了参数 - })]; - }); - }); - }; - /** - * 获取用户信息 - * @param competition_id - * @returns {Promise<*>} - */ - Bugfix.prototype.getUser = function (data) { - return __awaiter(this, void 0, void 0, function () { - var competition_id; - return __generator(this, function (_a) { - competition_id = data.competition_id; - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/user", { - competition_id: competition_id - })]; - }); - }); - }; - /** - * 获取未收集的Bug - * @returns {Promise<*>} - * [ - * { - * bug_type: number 类型位置 - * bug_time: number 时间戳 - * bug_show_type: 1 显示类型 - * is_first: boolean 是否第一次 - * } - * ] - * - */ - Bugfix.prototype.getNotCollectBugList = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/not_collect", { - // 必须加个空对象,否则接口提示少了参数 - })]; - }); - }); - }; - /** - * 收集Bug - * @param bug_time - * @param bug_type - * @returns {Promise<*>} - */ - Bugfix.prototype.collectBug = function (data) { - return __awaiter(this, void 0, void 0, function () { - var bug_time, bug_type; - return __generator(this, function (_a) { - bug_time = data.bug_time, bug_type = data.bug_type; - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/collect", { - bug_time: bug_time, - bug_type: bug_type - })]; - }); - }); - }; - /** - * 批量收集Bug - * @param buglist - * @returns {Promise} - */ - Bugfix.prototype.collectBugBatch = function (buglist) { - if (buglist === void 0) { buglist = []; } - return __awaiter(this, void 0, void 0, function () { - var error_1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, Promise.all(buglist.map(function (bug) { return __awaiter(_this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.collectBug(bug)]; - case 1: - _a.sent(); - return [4 /*yield*/, wait(randomRangeNumber(500, 1000))]; - case 2: - _a.sent(); - return [2 /*return*/]; - } - }); - }); }))]; - case 1: - _a.sent(); - return [2 /*return*/, true]; - case 2: - error_1 = _a.sent(); - return [2 /*return*/, error_1]; - case 3: return [2 /*return*/]; - } - }); - }); - }; - return Bugfix; -}()); - -var JuejinHelper = /** @class */ (function () { - function JuejinHelper() { - this.cookie = new Cookie(); - this.cookieTokens = null; - this.user = null; - } - JuejinHelper.prototype.login = function (cookie) { - return __awaiter(this, void 0, void 0, function () { - var _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - this.cookie.setCookieValue(cookie); - this.cookieTokens = parseCookieTokens(this.cookie); - _a = this; - return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { - headers: { cookie: this.getCookie() } - })]; - case 1: - _a.user = _b.sent(); - return [2 /*return*/]; - } - }); - }); - }; - JuejinHelper.prototype.logout = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - this.cookie.clear(); - this.user = null; - return [2 /*return*/]; - }); - }); - }; - JuejinHelper.prototype.getCookie = function () { - return this.cookie.toString(); - }; - JuejinHelper.prototype.getCookieTokens = function () { - return this.cookieTokens; - }; - JuejinHelper.prototype.getUser = function () { - return this.user; - }; - JuejinHelper.prototype.makeToken = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, instance$1.get("/get/token", { - baseURL: "https://juejin.cn", - headers: { cookie: this.getCookie() } - })]; - }); - }); - }; - JuejinHelper.prototype.sdk = function () { - return new Sdk(this); - }; - JuejinHelper.prototype.growth = function () { - return new Growth(this); - }; - JuejinHelper.prototype.seagold = function () { - return new Seagold(this); - }; - JuejinHelper.prototype.numpuzz = function () { - return new NumPuzz(this); - }; - JuejinHelper.prototype.bugfix = function () { - return new Bugfix(this); - }; - return JuejinHelper; -}()); - -module.exports = JuejinHelper; diff --git a/build/juejin-helper.esm.js b/build/juejin-helper.esm.js deleted file mode 100644 index 499fbc6e..00000000 --- a/build/juejin-helper.esm.js +++ /dev/null @@ -1,956 +0,0 @@ -import axios from 'axios'; -import { v4 } from 'uuid'; -import jwt from 'jsonwebtoken'; - -/****************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -var instance$1 = axios.create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/" - } -}); -instance$1.interceptors.request.use(function (config) { - return config; -}, function (error) { - return Promise.reject(error); -}); -instance$1.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; -}, function (error) { - return Promise.reject(error); -}); - -function parseCookieTokens(cookie) { - var cookieTokens = { - aid: "", - uuid: "", - user_unique_id: "", - web_id: "" - }; - var tokensReg = /^__tea_cookie_tokens_(\d+)$/; - // @ts-ignore - for (var _i = 0, _a = cookie.entries(); _i < _a.length; _i++) { - var _b = _a[_i], key = _b[0], value = _b[1]; - if (tokensReg.test(key)) { - cookieTokens.aid = key.match(tokensReg)[1]; - var json = JSON.parse(decodeURIComponent(decodeURIComponent(value))); - cookieTokens.uuid = json.user_unique_id; - cookieTokens.user_unique_id = json.user_unique_id; - cookieTokens.web_id = json.web_id; - break; - } - } - return cookieTokens; -} - -function wait(time) { - if (time === void 0) { time = 0; } - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, time); })]; - }); - }); -} -function randomRangeNumber(start, end) { - if (start === void 0) { start = 500; } - if (end === void 0) { end = 1000; } - return (Math.random() * (end - start) + start) >> 0; -} -function generateUUID() { - return v4(); -} - -var Cookie = /** @class */ (function () { - function Cookie(cookie) { - if (cookie === void 0) { cookie = ""; } - this.cookie = ""; - this.stack = new Map(); - if (cookie) { - this.setCookieValue(cookie); - } - } - Cookie.prototype.setCookieValue = function (cookie) { - var _this = this; - if (cookie === void 0) { cookie = ""; } - this.stack.clear(); - this.cookie = cookie; - cookie - .split("; ") - .map(function (string) { return string.split("="); }) - .forEach(function (_a) { - var key = _a[0], value = _a[1]; - _this.stack.set(key, value); - }); - }; - Cookie.prototype.get = function (key) { - return this.stack.get(key); - }; - Cookie.prototype.has = function (key) { - return this.stack.has(key); - }; - Cookie.prototype.set = function (key, value) { - return this.stack.set(key, value); - }; - Cookie.prototype.entries = function () { - return this.stack.entries(); - }; - Cookie.prototype.clear = function () { - this.cookie = ""; - this.stack.clear(); - }; - Cookie.prototype.toString = function () { - return this.cookie; - }; - return Cookie; -}()); - -var instance = axios.create({ - baseURL: "", - headers: { - // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "cross-site" - } -}); -instance.interceptors.request.use(function (config) { - return config; -}, function (error) { - return Promise.reject(error); -}); -instance.interceptors.response.use(function (response) { - var res = response.data; - if ("e" in res) { - return res; - } - if (res.errno !== 200) { - throw new Error(res.message); - } - return res.data; -}, function (error) { - return Promise.reject(error); -}); - -/** - * SDK - */ -var Sdk = /** @class */ (function () { - function Sdk(juejin) { - this.sdk_type = "npm"; - this.sdk_lib = "js"; - this.sdk_version = "4.2.9"; - this.juejin = juejin; - } - Sdk.prototype.slardarSDKSetting = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, instance.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { - headers: { - cookie: "MONITOR_WEB_ID=".concat(this.juejin.cookie.get("MONITOR_WEB_ID")) - } - })]; - }); - }); - }; - Sdk.prototype.list = function (events) { - var _a; - if (events === void 0) { events = []; } - return __awaiter(this, void 0, void 0, function () { - var cookieTokens, userInfo, userIsLogin, data; - return __generator(this, function (_b) { - cookieTokens = this.juejin.getCookieTokens(); - userInfo = this.juejin.getUser(); - userIsLogin = !!userInfo; - data = [ - { - events: events, - header: { - app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), - browser: "Chrome", - browser_version: "99.0.4844.51", - custom: JSON.stringify(userIsLogin - ? { - student_verify_status: userInfo.student_status ? "student" : "not_student", - user_level: userInfo.level - } - : {}), - device_model: "Windows NT 10.0", - os_name: "windows", - os_version: "10", - resolution: "1920x1080", - screen_width: 1920, - screen_height: 1080, - width: 1920, - height: 1080, - language: "zh-CN", - platform: "Web", - referrer: "", - referrer_host: "", - sdk_lib: this.sdk_lib, - sdk_version: this.sdk_version, - timezone: 8, - tz_offset: -28800, - utm_campaign: "ad", - utm_medium: "user_center" - }, - local_time: (Date.now() / 1000) >> 0, - user: { - user_id: ((_a = this.juejin.getUser()) === null || _a === void 0 ? void 0 : _a.user_id) || "", - user_is_login: userIsLogin, - user_unique_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.user_unique_id) || "", - web_id: (cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.web_id) || "" - } - } - ]; - return [2 /*return*/, instance.post("https://mcs.snssdk.com/list", { - headers: { - host: "mcs.snssdk.com" - }, - data: data - })]; - }); - }); - }; - // 模拟成长API事件埋点 - Sdk.prototype.mockTrackGrowthEvent = function () { - return __awaiter(this, void 0, void 0, function () { - var sessionid, localtime, eventindex; - return __generator(this, function (_a) { - sessionid = generateUUID(); - localtime = Date.now(); - eventindex = localtime + randomRangeNumber(4000, 10000); - return [2 /*return*/, this.list([ - { - ab_sdk_version: "90000611,90001195", - event: "task_center_sign_in_visit", - is_bav: 0, - local_time_ms: localtime + 1, - params: JSON.stringify({ - event_index: eventindex + 1, - _staging_flag: 0 - }), - session_id: sessionid - }, - { - ab_sdk_version: "90000611,90001195", - event: "predefine_pageview", - is_bav: 0, - local_time_ms: localtime, - params: JSON.stringify({ - $is_first_time: "false", - event_index: eventindex, - referrer: "", - time: localtime, - title: "每日签到 - 掘金", - url: "https://juejin.cn/user/center/signin", - url_path: "/user/center/signin", - _staging_flag: 0 - }), - session_id: sessionid - } - ])]; - }); - }); - }; - // 模拟OnLoad事件埋点 - Sdk.prototype.mockTrackOnloadEvent = function () { - return __awaiter(this, void 0, void 0, function () { - var cookieTokens, localtime; - return __generator(this, function (_a) { - cookieTokens = this.juejin.getCookieTokens(); - localtime = Date.now(); - return [2 /*return*/, this.list([ - { - event: "onload", - local_time_ms: localtime, - params: JSON.stringify({ - app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), - app_name: "", - sdk_version: this.sdk_version, - sdk_type: this.sdk_type, - sdk_config: { - app_id: Number(cookieTokens === null || cookieTokens === void 0 ? void 0 : cookieTokens.aid), - channel: "cn", - log: false, - enable_ab_test: true, - ab_channel_domain: "https://abtestvm.bytedance.com", - cross_subdomain: true, - cookie_expire: 94608000000, - cookie_domain: "juejin.cn", - enable_stay_duration: true, - maxDuration: 1200000 - } - }) - } - ])]; - }); - }); - }; - return Sdk; -}()); - -var Growth = /** @class */ (function () { - function Growth(juejin) { - this.http = axios.create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn" - } - }); - this.http.interceptors.request.use(function (config) { - // @ts-ignore - config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); - if (juejin.user) { - var tokens = juejin.getCookieTokens(); - // @ts-ignore - config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; - }, function (error) { - return Promise.reject(error); - }); - } - /** - * 获取统计签到天数 - * @returns {Promise<*>} - * { - * cont_count 连续签到天数 - * sum_count 累计签到天数 - * } - */ - Growth.prototype.getCounts = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_counts")]; - }); - }); - }; - /** - * 获取当前矿石数 - * @returns {Promise<*>} - * number 当前矿石数 - */ - Growth.prototype.getCurrentPoint = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_cur_point")]; - }); - }); - }; - /** - * 获取今日签到状态 - * @returns {Promise<*>} - * boolean 是否签到 - */ - Growth.prototype.getTodayStatus = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_today_status")]; - }); - }); - }; - /** - * 获取月签到日历 - * @returns {Promise<*>} - * [ - * { - * date: timestamp(格式1646150400) - * point: number增加矿石数 - * status: enum(1 今日, 4 未签到, 3 已签到) - * } - * ] - */ - Growth.prototype.getByMonth = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/get_by_month")]; - }); - }); - }; - Growth.prototype.getLotteryConfig = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/growth_api/v1/lottery_config/get")]; - }); - }); - }; - Growth.prototype.drawLottery = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/lottery/draw")]; - }); - }); - }; - Growth.prototype.checkIn = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/check_in")]; - }); - }); - }; - Growth.prototype.getLotteriesLuckyUsers = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, _b, page_no, _c, page_size; - return __generator(this, function (_d) { - _a = data || {}, _b = _a.page_no, page_no = _b === void 0 ? 1 : _b, _c = _a.page_size, page_size = _c === void 0 ? 5 : _c; - return [2 /*return*/, this.http.post("/growth_api/v1/lottery_history/global_big", { - page_no: page_no, - page_size: page_size - })]; - }); - }); - }; - Growth.prototype.dipLucky = function (lottery_history_id) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/dip_lucky", { - lottery_history_id: lottery_history_id - })]; - }); - }); - }; - Growth.prototype.getMyLucky = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/growth_api/v1/lottery_lucky/my_lucky")]; - }); - }); - }; - return Growth; -}()); - -var Seagold = /** @class */ (function () { - function Seagold(juejin) { - this.juejin = juejin; - this.http = axios.create({ - baseURL: "https://juejin-game.bytedance.com/game", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - Authorization: "" - } - }); - this.http.interceptors.request.use(function (config) { - if (juejin.user) { - // @ts-ignore - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - var res = response.data; - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - }, function (error) { - return Promise.reject(error); - }); - } - Seagold.prototype.setToken = function (token) { - // @ts-ignore - this.http.defaults.headers.Authorization = "Bearer ".concat(token); - }; - Seagold.prototype.gameLogin = function () { - var _a; - return __awaiter(this, void 0, void 0, function () { - var _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - _b = this.setToken; - return [4 /*yield*/, this.juejin.makeToken()]; - case 1: - _b.apply(this, [_c.sent()]); - return [2 /*return*/, this.http.post("/sea-gold/user/login", { - name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name - })]; - } - }); - }); - }; - Seagold.prototype.gameInfo = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/sea-gold/home/info")]; - }); - }); - }; - Seagold.prototype.gameStart = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, roleId; - return __generator(this, function (_b) { - _a = (data || {}).roleId, roleId = _a === void 0 ? 3 : _a; - return [2 /*return*/, this.http.post("/sea-gold/game/start", { - roleId: roleId - })]; - }); - }); - }; - Seagold.prototype.gameOver = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, isButton; - return __generator(this, function (_b) { - _a = (data || {}).isButton, isButton = _a === void 0 ? 1 : _a; - // const result = { - // activity: "", - // deep: 3, - // gameDiamond: 34, // 当局获取 - // originMapData: [], - // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], - // picoDiamond: 0, - // realDiamond: 34, // 真实获取 - // todayDiamond: 34, // 今日获取 - // todayLimitDiamond: 1500 // 今日最大获取 - // }; - return [2 /*return*/, this.http.post("/sea-gold/game/over", { - isButton: isButton - })]; - }); - }); - }; - Seagold.prototype.gameCommand = function (gameId, command) { - if (command === void 0) { command = []; } - return __awaiter(this, void 0, void 0, function () { - var privateKey, token; - return __generator(this, function (_a) { - privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; - token = jwt.sign({ - gameId: gameId, - time: new Date().getTime() - }, privateKey, { - algorithm: "ES256", - expiresIn: 2592e3, - header: { - alg: "ES256", - typ: "JWT" - } - }); - return [2 /*return*/, this.http.post("/sea-gold/game/command", { - command: command - // command: ["R", { times: 2, command: ["R"] }, "2"] - }, { - headers: { - "x-tt-gameid": token - } - })]; - }); - }); - }; - return Seagold; -}()); - -/** - * 数字拼图 - * 游戏地址: https://juejin.cn/game/shuzimiti/ - */ -var NumPuzz = /** @class */ (function () { - function NumPuzz(juejin) { - this.juejin = juejin; - this.http = axios.create({ - baseURL: "https://juejin-game.bytedance.com/game", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn", - Authorization: "" - } - }); - this.http.interceptors.request.use(function (config) { - if (juejin.user) { - // @ts-ignore - config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "uid=".concat(juejin.user.user_id, "&time=").concat(Date.now()); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - var res = response.data; - if (res.code !== 0) { - throw new Error(res.message); - } - return res.data; - }, function (error) { - return Promise.reject(error); - }); - } - NumPuzz.prototype.setToken = function (token) { - // @ts-ignore - this.http.defaults.headers.Authorization = "Bearer ".concat(token); - }; - /** - * 游戏登录 - * @returns {Promise<*>} - */ - NumPuzz.prototype.gameLogin = function () { - var _a; - return __awaiter(this, void 0, void 0, function () { - var _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - _b = this.setToken; - return [4 /*yield*/, this.juejin.makeToken()]; - case 1: - _b.apply(this, [_c.sent()]); - return [2 /*return*/, this.http.post("/num-puzz/user/login", { - name: (_a = this.juejin.user) === null || _a === void 0 ? void 0 : _a.user_name - })]; - } - }); - }); - }; - /** - * 获取主页信息 - * @returns {Promise<*>} - * bug: 0 - * diamond: 200 - * originality: 0 - * showToast: false - */ - NumPuzz.prototype.gameInfo = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.get("/num-puzz/home/info")]; - }); - }); - }; - /** - * 开始游戏 - * @param level Number [1|2|3] 简单|中等|困难 - * @returns {Promise<*>} - * guide: 0 - * level: 游戏等级 - * map: 游戏地图 - * round: 关卡 - * target: 目标结果 - */ - NumPuzz.prototype.gameStart = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, level; - return __generator(this, function (_b) { - _a = (data || {}).level, level = _a === void 0 ? 1 : _a; - return [2 /*return*/, this.http.post("/num-puzz/game/start", { - level: level - })]; - }); - }); - }; - /** - * 跳过游戏 - * @description 结构同开始游戏 - * @param level - * @returns {Promise<*>} - */ - NumPuzz.prototype.gameSkip = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, level; - return __generator(this, function (_b) { - _a = (data || {}).level, level = _a === void 0 ? 1 : _a; - return [2 /*return*/, this.http.post("/num-puzz/game/skip", { - level: level - })]; - }); - }); - }; - /** - * 游戏完成 - * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] - * @param command - * @returns {Promise<*>} - */ - NumPuzz.prototype.gameComplete = function (data) { - return __awaiter(this, void 0, void 0, function () { - var _a, _b, level, _c, command; - return __generator(this, function (_d) { - _a = data || {}, _b = _a.level, level = _b === void 0 ? 1 : _b, _c = _a.command, command = _c === void 0 ? [] : _c; - return [2 /*return*/, this.http.post("/num-puzz/game/complete", { - level: level, - command: command - })]; - }); - }); - }; - return NumPuzz; -}()); - -var Bugfix = /** @class */ (function () { - function Bugfix(juejin) { - this.http = axios.create({ - baseURL: "https://api.juejin.cn", - headers: { - referer: "https://juejin.cn/", - origin: "https://juejin.cn" - } - }); - this.http.interceptors.request.use(function (config) { - // @ts-ignore - config.headers.cookie = juejin === null || juejin === void 0 ? void 0 : juejin.getCookie(); - if (juejin.user) { - var tokens = juejin.getCookieTokens(); - // @ts-ignore - config.url += "".concat(config.url.indexOf("?") === -1 ? "?" : "&", "aid=").concat(tokens.aid, "&uuid=").concat(tokens.uuid); - } - return config; - }, function (error) { - return Promise.reject(error); - }); - this.http.interceptors.response.use(function (response) { - if (response.data.err_no) { - throw new Error(response.data.err_msg); - } - return response.data.data; - }, function (error) { - return Promise.reject(error); - }); - } - /** - * 获取竞赛信息 - * @returns {Promise<*>} - */ - Bugfix.prototype.getCompetition = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/competition", { - // 必须加个空对象,否则接口提示少了参数 - })]; - }); - }); - }; - /** - * 获取用户信息 - * @param competition_id - * @returns {Promise<*>} - */ - Bugfix.prototype.getUser = function (data) { - return __awaiter(this, void 0, void 0, function () { - var competition_id; - return __generator(this, function (_a) { - competition_id = data.competition_id; - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/user", { - competition_id: competition_id - })]; - }); - }); - }; - /** - * 获取未收集的Bug - * @returns {Promise<*>} - * [ - * { - * bug_type: number 类型位置 - * bug_time: number 时间戳 - * bug_show_type: 1 显示类型 - * is_first: boolean 是否第一次 - * } - * ] - * - */ - Bugfix.prototype.getNotCollectBugList = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/not_collect", { - // 必须加个空对象,否则接口提示少了参数 - })]; - }); - }); - }; - /** - * 收集Bug - * @param bug_time - * @param bug_type - * @returns {Promise<*>} - */ - Bugfix.prototype.collectBug = function (data) { - return __awaiter(this, void 0, void 0, function () { - var bug_time, bug_type; - return __generator(this, function (_a) { - bug_time = data.bug_time, bug_type = data.bug_type; - return [2 /*return*/, this.http.post("/user_api/v1/bugfix/collect", { - bug_time: bug_time, - bug_type: bug_type - })]; - }); - }); - }; - /** - * 批量收集Bug - * @param buglist - * @returns {Promise} - */ - Bugfix.prototype.collectBugBatch = function (buglist) { - if (buglist === void 0) { buglist = []; } - return __awaiter(this, void 0, void 0, function () { - var error_1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, Promise.all(buglist.map(function (bug) { return __awaiter(_this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.collectBug(bug)]; - case 1: - _a.sent(); - return [4 /*yield*/, wait(randomRangeNumber(500, 1000))]; - case 2: - _a.sent(); - return [2 /*return*/]; - } - }); - }); }))]; - case 1: - _a.sent(); - return [2 /*return*/, true]; - case 2: - error_1 = _a.sent(); - return [2 /*return*/, error_1]; - case 3: return [2 /*return*/]; - } - }); - }); - }; - return Bugfix; -}()); - -var JuejinHelper = /** @class */ (function () { - function JuejinHelper() { - this.cookie = new Cookie(); - this.cookieTokens = null; - this.user = null; - } - JuejinHelper.prototype.login = function (cookie) { - return __awaiter(this, void 0, void 0, function () { - var _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - this.cookie.setCookieValue(cookie); - this.cookieTokens = parseCookieTokens(this.cookie); - _a = this; - return [4 /*yield*/, instance$1.get("/user_api/v1/user/get", { - headers: { cookie: this.getCookie() } - })]; - case 1: - _a.user = _b.sent(); - return [2 /*return*/]; - } - }); - }); - }; - JuejinHelper.prototype.logout = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - this.cookie.clear(); - this.user = null; - return [2 /*return*/]; - }); - }); - }; - JuejinHelper.prototype.getCookie = function () { - return this.cookie.toString(); - }; - JuejinHelper.prototype.getCookieTokens = function () { - return this.cookieTokens; - }; - JuejinHelper.prototype.getUser = function () { - return this.user; - }; - JuejinHelper.prototype.makeToken = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, instance$1.get("/get/token", { - baseURL: "https://juejin.cn", - headers: { cookie: this.getCookie() } - })]; - }); - }); - }; - JuejinHelper.prototype.sdk = function () { - return new Sdk(this); - }; - JuejinHelper.prototype.growth = function () { - return new Growth(this); - }; - JuejinHelper.prototype.seagold = function () { - return new Seagold(this); - }; - JuejinHelper.prototype.numpuzz = function () { - return new NumPuzz(this); - }; - JuejinHelper.prototype.bugfix = function () { - return new Bugfix(this); - }; - return JuejinHelper; -}()); - -export { JuejinHelper as default }; diff --git a/package.json b/package.json index 6da2e320..0542acec 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,37 @@ { - "name": "juejin-helper", + "name": "juejin-helper-monorepo", "version": "1.6.0", - "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", + "private": true, "author": "Derek Li", - "license": "Apache-2.0", - "source": "src/index.ts", - "main": "build/juejin-helper.c.js", - "module": "build/juejin-helper.esm.js", - "types": "types/juejin-helper.d.ts", - "scripts": { - "dev": "rollup -c -w", - "build": "rollup -c" - }, - "files": [ - "build", - "types", - "LICENSE", - "README.md", - "package.json" - ], - "keywords": [ - "juejin", - "helper" + "workspaces": [ + "packages/*", + "workflows" ], - "dependencies": { - "axios": "^0.27.2", - "jsonwebtoken": "^8.5.1", - "uuid": "^8.3.2" + "scripts": { + "dev": "cross-env NODE_ENV=development rollup -cw", + "build": "cross-env NODE_ENV=production rollup -c", + "clean": "rimraf \"packages/*/{build,types}\"" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-sucrase": "^4.0.4", - "@types/jsonwebtoken": "^8.5.8", - "@types/uuid": "^8.3.4", "@typescript-eslint/parser": "^5.32.0", + "cross-env": "^7.0.3", "eslint": "^8.14.0", "eslint-config-next": "^12.1.5", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", "prettier": "^2.6.2", + "rimraf": "^3.0.2", "rollup": "^2.77.2", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-typescript2": "^0.32.1", - "typescript": ">=3.0.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/iDerekLi/juejin-helper.git" + "typescript": ">=3.0.0", + "workspaces-run": "^1.0.1" }, - "homepage": "https://github.com/iDerekLi/juejin-helper#readme", - "bugs": { - "url": "https://github.com/iDerekLi/juejin-helper/issues" + "engines": { + "node": ">=14.17.0", + "npm": ">=6.14.13" } } diff --git a/packages/juejin-helper/LICENSE b/packages/juejin-helper/LICENSE new file mode 100644 index 00000000..2d71a081 --- /dev/null +++ b/packages/juejin-helper/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Derek Li + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/juejin-helper/README.md b/packages/juejin-helper/README.md new file mode 100644 index 00000000..e406ab9a --- /dev/null +++ b/packages/juejin-helper/README.md @@ -0,0 +1,142 @@ +
+ + 稀土掘金 + +
+ +

JuejinHelper-稀土掘金助手

+ +

签到、抽奖、沾喜气、海底掘金游戏、自动化工作流。

+ +## 示例 + +### 签到示例 +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const growth = juejin.growth(); + + // 签到 + await growth.checkIn(); + + // 获取当前矿石数 + // await growth.getCurrentPoint(); + + // 获取统计签到天数 + // await growth.getCounts(); + + // 获取今日签到状态 + // await growth.getTodayStatus(); + + // 获取抽奖配置 + // await growth.getLotteryConfig(); + + // 抽奖 + // await growth.drawLottery(); + + // 获取抽奖幸运用户 + // await growth.getLotteriesLuckyUsers({ page_no = 1, page_size = 5 }); // => { lotteries: [{ lottery_history_id }, ...] } + + // 获取我的幸运值 + // await growth.getMyLucky(); + + // 沾喜气 + // await growth.dipLucky(lottery_history_id); // => { has_dip, dip_value, total_value, dip_action } + + await juejin.logout(); +} + +run(); +``` + +### 海底掘金游戏示例 +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const seagold = juejin.seagold(); + + await seagold.gameLogin(); // 登陆游戏 + + let gameInfo = null; + + const info = await seagold.gameInfo(); // 游戏状态 + if (info.gameStatus === 1) { + gameInfo = info.gameInfo; // 继续游戏 + } else { + gameInfo = await seagold.gameStart(); // 开始游戏 + } + + const command = ["U", "L"]; + await seagold.gameCommand(gameInfo.gameId, command); // 执行命令 + + const result = await seagold.gameOver(); // 游戏结束 + console.log(result); // => { ... } + + await juejin.logout(); +} + +run(); +``` + +### bugfix 游戏示例 +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const bugfix = juejin.bugfix(); + + const notCollectBugList = await bugfix.getNotCollectBugList(); + await bugfix.collectBugBatch(notCollectBugList); + console.log(`收集Bug ${notCollectBugList.length}`); + + const competition = await bugfix.getCompetition(); + const bugfixInfo = await bugfix.getUser(competition); + console.log(`未消除Bug数量 ${bugfixInfo.user_own_bug}`); +} +``` + +### SDK示例 + +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const sdk = juejin.sdk(); + + await sdk.slardarSDKSetting(); // SDK设置 + await sdk.list(/* events */); // 埋点数据 +} + +run(); +``` + +## 问题 + +### 如何获取Cookie + +掘金网站Cookie, 打开浏览器,登录 [掘金](https://juejin.cn/), 打开控制台DevTools(快捷键F12) -> Network,复制 cookie, **掘金Cookie有效期约1个月需定期更新.** + +DevTools截图: +getcookie + +## 赞赏 +### ☕️微信赞赏!鼓励升级! +微信赞赏 + +## 许可 + +[Apache-2.0](./LICENSE) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json new file mode 100644 index 00000000..5c6660f6 --- /dev/null +++ b/packages/juejin-helper/package.json @@ -0,0 +1,43 @@ +{ + "name": "juejin-helper", + "version": "1.6.0", + "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", + "author": "Derek Li", + "license": "Apache-2.0", + "source": "src/index.ts", + "main": "build/juejin-helper.c.js", + "module": "build/juejin-helper.esm.js", + "types": "types/juejin-helper.d.ts", + "scripts": { + "dev": "rollup -c -w", + "build": "rollup -c" + }, + "files": [ + "build", + "types", + "LICENSE", + "README.md", + "package.json" + ], + "keywords": [ + "juejin", + "helper" + ], + "dependencies": { + "axios": "^0.27.2", + "jsonwebtoken": "^8.5.1", + "uuid": "^8.3.2" + }, + "devDependencies": { + "@types/jsonwebtoken": "^8.5.8", + "@types/uuid": "^8.3.4" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/iDerekLi/juejin-helper.git" + }, + "homepage": "https://github.com/iDerekLi/juejin-helper#readme", + "bugs": { + "url": "https://github.com/iDerekLi/juejin-helper/issues" + } +} diff --git a/src/bugfix.ts b/packages/juejin-helper/src/bugfix.ts similarity index 100% rename from src/bugfix.ts rename to packages/juejin-helper/src/bugfix.ts diff --git a/src/growth.ts b/packages/juejin-helper/src/growth.ts similarity index 100% rename from src/growth.ts rename to packages/juejin-helper/src/growth.ts diff --git a/src/index.ts b/packages/juejin-helper/src/index.ts similarity index 100% rename from src/index.ts rename to packages/juejin-helper/src/index.ts diff --git a/src/numpuzz.ts b/packages/juejin-helper/src/numpuzz.ts similarity index 100% rename from src/numpuzz.ts rename to packages/juejin-helper/src/numpuzz.ts diff --git a/src/sdk.ts b/packages/juejin-helper/src/sdk.ts similarity index 100% rename from src/sdk.ts rename to packages/juejin-helper/src/sdk.ts diff --git a/src/seagold.ts b/packages/juejin-helper/src/seagold.ts similarity index 100% rename from src/seagold.ts rename to packages/juejin-helper/src/seagold.ts diff --git a/src/services/api.ts b/packages/juejin-helper/src/services/api.ts similarity index 100% rename from src/services/api.ts rename to packages/juejin-helper/src/services/api.ts diff --git a/src/services/snssdk.ts b/packages/juejin-helper/src/services/snssdk.ts similarity index 100% rename from src/services/snssdk.ts rename to packages/juejin-helper/src/services/snssdk.ts diff --git a/src/utils/cookie.ts b/packages/juejin-helper/src/utils/cookie.ts similarity index 100% rename from src/utils/cookie.ts rename to packages/juejin-helper/src/utils/cookie.ts diff --git a/src/utils/index.ts b/packages/juejin-helper/src/utils/index.ts similarity index 100% rename from src/utils/index.ts rename to packages/juejin-helper/src/utils/index.ts diff --git a/src/utils/parse-cookietokens.ts b/packages/juejin-helper/src/utils/parse-cookietokens.ts similarity index 100% rename from src/utils/parse-cookietokens.ts rename to packages/juejin-helper/src/utils/parse-cookietokens.ts diff --git a/test/test-bugfix.js b/packages/juejin-helper/test/test-bugfix.js similarity index 100% rename from test/test-bugfix.js rename to packages/juejin-helper/test/test-bugfix.js diff --git a/test/test-growth.js b/packages/juejin-helper/test/test-growth.js similarity index 100% rename from test/test-growth.js rename to packages/juejin-helper/test/test-growth.js diff --git a/test/test-login.js b/packages/juejin-helper/test/test-login.js similarity index 100% rename from test/test-login.js rename to packages/juejin-helper/test/test-login.js diff --git a/test/test-numpuzz.js b/packages/juejin-helper/test/test-numpuzz.js similarity index 100% rename from test/test-numpuzz.js rename to packages/juejin-helper/test/test-numpuzz.js diff --git a/test/test-sdk.js b/packages/juejin-helper/test/test-sdk.js similarity index 100% rename from test/test-sdk.js rename to packages/juejin-helper/test/test-sdk.js diff --git a/test/test-seagold.js b/packages/juejin-helper/test/test-seagold.js similarity index 100% rename from test/test-seagold.js rename to packages/juejin-helper/test/test-seagold.js diff --git a/packages/juejin-helper/test/test.js b/packages/juejin-helper/test/test.js new file mode 100644 index 00000000..0446fb4b --- /dev/null +++ b/packages/juejin-helper/test/test.js @@ -0,0 +1,9 @@ +const JuejinHelper = require(".."); + +const mockCookie = `juejin-cookies`; + +async function run() { + console.log(JuejinHelper); +} + +run(); diff --git a/packages/juejin-helper/tsconfig.json b/packages/juejin-helper/tsconfig.json new file mode 100644 index 00000000..bf334c53 --- /dev/null +++ b/packages/juejin-helper/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": false, + "experimentalDecorators": true + }, + "include": ["src/*.ts", "src/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/resources/getcookie.png b/resources/getcookie.png new file mode 100644 index 0000000000000000000000000000000000000000..94dc65d5291f2b2522e183d1e5eaa2a96bd71b4a GIT binary patch literal 511696 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

s~@+J$3>m+~Zloh*&dc?h!$u0#0XOL*4Tgaxw} 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ℜ0YUY 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%0A+_BrWCWz0$k_(fvxw`9PW_93Q=Rwd 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�y|z`I+Lv*I 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 { + if (!pkg.config.private) { + packages.push(pkg); } - }, - { - input: pkg.source, - output: [{ file: pkg.types, format: "esm" }], - plugins: [dts()] - } -]; + }); + + packages.forEach(pkg => { + const { version, source, main, module, types, dependencies, devDependencies } = pkg.config; + + const banner = [ + `/*!`, + ` * ${pkg.name} - v${version}`, + ` * Compiled ${compiled}`, + ` *`, + ` * ${pkg.name} is licensed under the Apache License Version 2.0.`, + ` * https://opensource.org/licenses/Apache-2.0`, + ` */` + ].join("\n"); + + const basePath = path.relative(__dirname, pkg.dir); + const input = path.join(basePath, source); + + results.push({ + input, + external: [...Object.keys(dependencies), ...Object.keys(devDependencies)], + output: [ + { banner, file: path.join(basePath, main), format: "cjs" }, + { banner, file: path.join(basePath, module), format: "esm" } + ], + plugins: [ + commonjs(/*{ + defaultIsModuleExports: true + }*/), + typescript() + ], + watch: { + exclude: "node_modules" + } + }); + + if (isProduction) { + results.push({ + input, + output: [{ banner, file: path.join(basePath, types), format: "esm" }], + plugins: [dts()] + }); + } + }); + + return results; +} + +export default run(); diff --git a/tsconfig.json b/tsconfig.json index bf334c53..2944a1ab 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,8 @@ "incremental": false, "experimentalDecorators": true }, - "include": ["src/*.ts", "src/*.tsx"], - "exclude": ["node_modules"] + "exclude": [ + "node_modules", + "**/build/**" + ] } diff --git a/types/juejin-helper.d.ts b/types/juejin-helper.d.ts deleted file mode 100644 index cd6a503d..00000000 --- a/types/juejin-helper.d.ts +++ /dev/null @@ -1,259 +0,0 @@ -import * as axios from 'axios'; -import { AxiosInstance } from 'axios'; - -declare class Cookie { - cookie: string; - stack: Map; - constructor(cookie?: string); - setCookieValue(cookie?: string): void; - get(key: string): unknown; - has(key: string): boolean; - set(key: string, value: unknown): Map; - entries(): IterableIterator<[string, unknown]>; - clear(): void; - toString(): string; -} - -interface SDKSetting { - cookieid: string; - reportDomain: string; - bid: string; - plugins: { - [prop: string]: any; - }; - last_modify_time: string; - heatmap: { - [prop: string]: any; - }; - setting: { - [prop: string]: any; - }; - whitelist: any[]; -} -declare type jsonstring = string; -interface SDKEvent { - event: string; - local_time_ms: number; - params: jsonstring; - ab_sdk_version?: string; - is_bav?: number; - session_id?: string; -} -interface SDKListResult { - e: number; -} -/** - * SDK - */ -declare class Sdk { - juejin: JuejinHelper; - sdk_type: string; - sdk_lib: string; - sdk_version: string; - constructor(juejin: JuejinHelper); - slardarSDKSetting(): Promise; - list(events?: SDKEvent[]): Promise; - mockTrackGrowthEvent(): Promise; - mockTrackOnloadEvent(): Promise; -} - -declare class Growth { - http: AxiosInstance; - constructor(juejin: JuejinHelper); - /** - * 获取统计签到天数 - * @returns {Promise<*>} - * { - * cont_count 连续签到天数 - * sum_count 累计签到天数 - * } - */ - getCounts(): Promise>; - /** - * 获取当前矿石数 - * @returns {Promise<*>} - * number 当前矿石数 - */ - getCurrentPoint(): Promise>; - /** - * 获取今日签到状态 - * @returns {Promise<*>} - * boolean 是否签到 - */ - getTodayStatus(): Promise>; - /** - * 获取月签到日历 - * @returns {Promise<*>} - * [ - * { - * date: timestamp(格式1646150400) - * point: number增加矿石数 - * status: enum(1 今日, 4 未签到, 3 已签到) - * } - * ] - */ - getByMonth(): Promise>; - getLotteryConfig(): Promise>; - drawLottery(): Promise>; - checkIn(): Promise>; - getLotteriesLuckyUsers(data: { - page_no: number; - page_size: number; - }): Promise>; - dipLucky(lottery_history_id: number): Promise>; - getMyLucky(): Promise>; -} - -declare class Seagold { - juejin: JuejinHelper; - http: AxiosInstance; - constructor(juejin: JuejinHelper); - setToken(token: string): void; - gameLogin(): Promise>; - gameInfo(): Promise>; - gameStart(data: { - roleId: 1 | 2 | 3; - }): Promise>; - gameOver(data: { - isButton: number; - }): Promise>; - gameCommand(gameId: number, command?: never[]): Promise>; -} - -/** - * 数字拼图 - * 游戏地址: https://juejin.cn/game/shuzimiti/ - */ -declare class NumPuzz { - juejin: JuejinHelper; - http: AxiosInstance; - constructor(juejin: JuejinHelper); - setToken(token: string): void; - /** - * 游戏登录 - * @returns {Promise<*>} - */ - gameLogin(): Promise>; - /** - * 获取主页信息 - * @returns {Promise<*>} - * bug: 0 - * diamond: 200 - * originality: 0 - * showToast: false - */ - gameInfo(): Promise>; - /** - * 开始游戏 - * @param level Number [1|2|3] 简单|中等|困难 - * @returns {Promise<*>} - * guide: 0 - * level: 游戏等级 - * map: 游戏地图 - * round: 关卡 - * target: 目标结果 - */ - gameStart(data: { - level: number; - }): Promise>; - /** - * 跳过游戏 - * @description 结构同开始游戏 - * @param level - * @returns {Promise<*>} - */ - gameSkip(data: { - level: number; - }): Promise>; - /** - * 游戏完成 - * @param level Array<[x, y, direction]>, direction["u", "d", "l", "r"] - * @param command - * @returns {Promise<*>} - */ - gameComplete(data: { - level: number; - command: [number, number, "u" | "d" | "l" | "r"]; - }): Promise>; -} - -interface Bug { - bug_type: number; - bug_time: number; - bug_show_type: number; - is_first: boolean; -} -declare class Bugfix { - http: AxiosInstance; - constructor(juejin: JuejinHelper); - /** - * 获取竞赛信息 - * @returns {Promise<*>} - */ - getCompetition(): Promise>; - /** - * 获取用户信息 - * @param competition_id - * @returns {Promise<*>} - */ - getUser(data: { - competition_id: number; - }): Promise>; - /** - * 获取未收集的Bug - * @returns {Promise<*>} - * [ - * { - * bug_type: number 类型位置 - * bug_time: number 时间戳 - * bug_show_type: 1 显示类型 - * is_first: boolean 是否第一次 - * } - * ] - * - */ - getNotCollectBugList(): Promise; - /** - * 收集Bug - * @param bug_time - * @param bug_type - * @returns {Promise<*>} - */ - collectBug(data: Bug): Promise>; - /** - * 批量收集Bug - * @param buglist - * @returns {Promise} - */ - collectBugBatch(buglist?: Bug[]): Promise; -} - -declare type JuejinUserProps = { - user_id: string; - user_name: string; - [prop: string]: any; -} | null; -declare type JuejinCookieTokens = { - aid: string; - uuid: string; - user_unique_id: string; - web_id: string; -} | null; -declare class JuejinHelper { - cookie: Cookie; - cookieTokens: JuejinCookieTokens; - user: JuejinUserProps; - login(cookie: string): Promise; - logout(): Promise; - getCookie(): string; - getCookieTokens(): JuejinCookieTokens; - getUser(): JuejinUserProps; - makeToken(): Promise; - sdk(): Sdk; - growth(): Growth; - seagold(): Seagold; - numpuzz(): NumPuzz; - bugfix(): Bugfix; -} - -export { JuejinHelper as default }; diff --git a/workflows/checkin.js b/workflows/checkin.js new file mode 100644 index 00000000..accb0611 --- /dev/null +++ b/workflows/checkin.js @@ -0,0 +1,232 @@ +const JuejinHelper = require("juejin-helper"); +const utils = require("./utils/utils"); +const pushMessage = require("./utils/pushMessage"); +const env = require("./utils/env"); + +class CheckIn { + username = ""; + cookie = ""; + todayStatus = 0; // 未签到 + incrPoint = 0; + sumPoint = 0; // 当前矿石数 + contCount = 0; // 连续签到天数 + sumCount = 0; // 累计签到天数 + dipStatus = 0; + dipValue = 0; // 沾喜气 + luckyValue = 0; + lottery = []; // 奖池 + pointCost = 0; // 一次抽奖消耗 + freeCount = 0; // 免费抽奖次数 + drawLotteryHistory = {}; + lotteryCount = 0; + luckyValueProbability = 0; + bugStatus = 0; + collectBugCount = 0; + userOwnBug = 0; + + calledSdkSetting = false; + calledTrackGrowthEvent = false; + calledTrackOnloadEvent = false; + + constructor(cookie) { + this.cookie = cookie; + } + + async run() { + const juejin = new JuejinHelper(); + try { + await juejin.login(this.cookie); + } catch (e) { + console.error(e); + throw new Error("登录失败, 请尝试更新Cookies!"); + } + + this.username = juejin.getUser().user_name; + + const growth = juejin.growth(); + + const todayStatus = await growth.getTodayStatus(); + if (!todayStatus) { + const checkInResult = await growth.checkIn(); + + this.incrPoint = checkInResult.incr_point; + this.sumPoint = checkInResult.sum_point; + this.todayStatus = 1; // 本次签到 + } else { + this.todayStatus = 2; // 已签到 + } + + const counts = await growth.getCounts(); + this.contCount = counts.cont_count; + this.sumCount = counts.sum_count; + + const luckyusersResult = await growth.getLotteriesLuckyUsers(); + if (luckyusersResult.count > 0) { + const no1LuckyUser = luckyusersResult.lotteries[0]; + const dipLuckyResult = await growth.dipLucky(no1LuckyUser.history_id); + if (dipLuckyResult.has_dip) { + this.dipStatus = 2; + } else { + this.dipStatus = 1; + this.dipValue = dipLuckyResult.dip_value; + } + } + + const luckyResult = await growth.getMyLucky(); + this.luckyValue = luckyResult.total_value; + + const lotteryConfig = await growth.getLotteryConfig(); + this.lottery = lotteryConfig.lottery; + this.pointCost = lotteryConfig.point_cost; + this.freeCount = lotteryConfig.free_count; + this.lotteryCount = 0; + + let freeCount = this.freeCount; + while (freeCount > 0) { + const result = await growth.drawLottery(); + this.drawLotteryHistory[result.lottery_id] = (this.drawLotteryHistory[result.lottery_id] || 0) + 1; + this.luckyValue = result.total_lucky_value; + freeCount--; + this.lotteryCount++; + await utils.wait(utils.randomRangeNumber(300, 1000)); + } + + this.sumPoint = await growth.getCurrentPoint(); + + const getProbabilityOfWinning = sumPoint => { + const pointCost = this.pointCost; + const luckyValueCost = 10; + const totalDrawsNumber = sumPoint / pointCost; + let supplyPoint = 0; + for (let i = 0, length = Math.floor(totalDrawsNumber * 0.65); i < length; i++) { + supplyPoint += Math.ceil(Math.random() * 100); + } + const luckyValue = ((sumPoint + supplyPoint) / pointCost) * luckyValueCost + this.luckyValue; + return luckyValue / 6000; + }; + + this.luckyValueProbability = getProbabilityOfWinning(this.sumPoint); + + // 收集bug + const bugfix = juejin.bugfix(); + + const competition = await bugfix.getCompetition(); + const bugfixInfo = await bugfix.getUser(competition); + this.userOwnBug = bugfixInfo.user_own_bug; + + try { + const notCollectBugList = await bugfix.getNotCollectBugList(); + await bugfix.collectBugBatch(notCollectBugList); + this.bugStatus = 1; + this.collectBugCount = notCollectBugList.length; + this.userOwnBug += this.collectBugCount; + } catch (e) { + this.bugStatus = 2; + } + + // 调用埋点 + const sdk = juejin.sdk(); + + try { + await sdk.slardarSDKSetting(); + this.calledSdkSetting = true; + } catch { + this.calledSdkSetting = false; + } + + try { + const result = await sdk.mockTrackGrowthEvent(); + if (result && result.e === 0) { + this.calledTrackGrowthEvent = true; + } else { + throw result; + } + } catch { + this.calledTrackGrowthEvent = false; + } + + try { + const result = await sdk.mockTrackOnloadEvent(); + if (result && result.e === 0) { + this.calledTrackOnloadEvent = true; + } else { + throw result; + } + } catch { + this.calledTrackOnloadEvent = false; + } + + console.log("------事件埋点追踪-------"); + console.log(`SDK状态: ${this.calledSdkSetting ? "加载成功" : "加载失败"}`); + console.log(`成长API事件埋点: ${this.calledTrackGrowthEvent ? "调用成功" : "调用失败"}`); + console.log(`OnLoad事件埋点: ${this.calledTrackOnloadEvent ? "调用成功" : "调用失败"}`); + console.log("-------------------------"); + + await juejin.logout(); + } + + toString() { + const drawLotteryHistory = Object.entries(this.drawLotteryHistory) + .map(([lottery_id, count]) => { + const lotteryItem = this.lottery.find(item => item.lottery_id === lottery_id); + if (lotteryItem) { + return `${lotteryItem.lottery_name}: ${count}`; + } + return `${lottery_id}: ${count}`; + }) + .join("\n"); + + return ` +掘友: ${this.username} +${this.todayStatus === 1 ? `签到成功 +${this.incrPoint} 矿石` : this.todayStatus === 2 ? "今日已完成签到" : "签到失败"} +${this.dipStatus === 1 ? `沾喜气 +${this.dipValue} 幸运值` : this.dipStatus === 2 ? "今日已经沾过喜气" : "沾喜气失败"} +${ + this.bugStatus === 1 + ? this.collectBugCount > 0 + ? `收集Bug +${this.collectBugCount}` + : "没有可收集Bug" + : "收集Bug失败" +} +连续签到天数 ${this.contCount} +累计签到天数 ${this.sumCount} +当前矿石数 ${this.sumPoint} +当前未消除Bug数量 ${this.userOwnBug} +当前幸运值 ${this.luckyValue}/6000 +预测All In矿石累计幸运值比率 ${(this.luckyValueProbability * 100).toFixed(2) + "%"} +抽奖总次数 ${this.lotteryCount} +免费抽奖次数 ${this.freeCount} +${this.lotteryCount > 0 ? "==============\n" + drawLotteryHistory + "\n==============" : ""} +`.trim(); + } +} + +async function run(args) { + const cookies = utils.getUsersCookie(env); + let messageList = []; + for (let cookie of cookies) { + const checkin = new CheckIn(cookie); + + await utils.wait(utils.randomRangeNumber(1000, 5000)); // 初始等待1-5s + await checkin.run(); // 执行 + + const content = checkin.toString(); + console.log(content); // 打印结果 + + messageList.push(content); + } + + const message = messageList.join(`\n${"-".repeat(15)}\n`); + pushMessage({ + subject: "掘金每日签到", + text: message + }); +} + +run(process.argv.splice(2)).catch(error => { + pushMessage({ + subject: "掘金每日签到", + html: `Error

${error.message}
` + }); + + throw error; +}); diff --git a/workflows/package.json b/workflows/package.json new file mode 100644 index 00000000..a8caf652 --- /dev/null +++ b/workflows/package.json @@ -0,0 +1,19 @@ +{ + "name": "workflows", + "version": "1.6.0", + "private": true, + "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", + "author": "Derek Li", + "scripts": { + "checkin": "node checkin.js", + "seagold": "node seagold.js" + }, + "dependencies": { + "axios": "^0.27.2", + "fast-astar": "^1.0.6", + "nodemailer": "^6.7.0" + }, + "peerDependencies": { + "juejin-helper": "1.6.0" + } +} diff --git a/workflows/seagold.js b/workflows/seagold.js new file mode 100644 index 00000000..86770b69 --- /dev/null +++ b/workflows/seagold.js @@ -0,0 +1,440 @@ +const JuejinHelper = require("juejin-helper"); +const utils = require("./utils/utils"); +const {Grid, Astar} = require("fast-astar"); +const pushMessage = require("./utils/pushMessage"); +const env = require("./utils/env"); + +class Seagold { + gameApi = null; + cookie = ""; + + constructor(cookie) { + this.cookie = cookie; + } + + nodeRules = [ + {code: 0, hasBounty: false, isWall: false, name: "空地"}, + {code: 2, hasBounty: true, isWall: false, name: "矿石", isBest: true}, + {code: 3, hasBounty: false, isWall: false, name: "星星"}, + {code: 4, hasBounty: false, isWall: true, name: "贝壳"}, + {code: 5, hasBounty: false, isWall: true, name: "水母"}, + {code: 6, hasBounty: false, isWall: true, name: "石头"}, + {code: 10, hasBounty: true, isWall: false, name: "上指令"}, + {code: 11, hasBounty: true, isWall: false, name: "下指令"}, + {code: 12, hasBounty: true, isWall: false, name: "左指令"}, + {code: 13, hasBounty: true, isWall: false, name: "右指令"}, + {code: 14, hasBounty: true, isWall: false, name: "跳跃指令"}, + {code: 15, hasBounty: true, isWall: false, name: "循环指令"} + ]; + + debug = false; + userInfo = { + uid: "", + name: "", + todayDiamond: 0, // 今日获取矿石数 + todayLimitDiamond: 1500, // 今日限制获取矿石数 + maxTodayDiamond: 0 // 今日最大矿石数 + }; + + gameInfo = { + gameId: "", + mapData: [], + curPos: {x: 0, y: 0}, + blockData: { + moveUp: 0, + moveDown: 0, + moveLeft: 0, + moveRight: 0, + jump: 0, + loop: 0 + }, + gameDiamond: 0 + }; + + history = []; + + get isGaming() { + return this.gameInfo && this.gameInfo.gameId !== ""; + } + + resetGame() { + this.gameInfo = { + gameId: "", + mapData: [], + curPos: {x: 0, y: 0}, + blockData: { + moveUp: 0, + moveDown: 0, + moveLeft: 0, + moveRight: 0, + jump: 0, + loop: 0 + }, + gameDiamond: 0 + }; + } + + restoreGame(gameInfo) { + this.gameInfo = { + gameId: gameInfo.gameId, + mapData: this.makeMap(gameInfo.mapData, 6), + curPos: gameInfo.curPos, + blockData: gameInfo.blockData, + gameDiamond: gameInfo.gameDiamond + }; + } + + async gameStart() { + if (this.isGaming) return; + const roleId = Math.ceil(Math.random() * 3); + const gameInfo = await this.gameApi.gameStart({roleId}); + + this.gameInfo = { + roleId, + gameId: gameInfo.gameId, + mapData: this.makeMap(gameInfo.mapData, 6), + curPos: gameInfo.curPos, + blockData: gameInfo.blockData, + gameDiamond: 0 + }; + } + + async gameOver() { + if (!this.isGaming) return; + const gameOverInfo = await this.gameApi.gameOver(); + this.userInfo.todayDiamond = gameOverInfo.todayDiamond; + this.userInfo.todayLimitDiamond = gameOverInfo.todayLimitDiamond; + + this.history.push({ + gameId: this.gameInfo.gameId, + gameDiamond: gameOverInfo.gameDiamond, + realDiamond: gameOverInfo.realDiamond, + todayDiamond: gameOverInfo.todayDiamond, + todayLimitDiamond: gameOverInfo.todayLimitDiamond + }); + + this.resetGame(); + + return gameOverInfo; + } + + async executeGameCommand() { + const bmmap = this.getBMMap(); + const curNode = this.getNode(this.gameInfo.curPos); + const bestNode = this.getBestNode(bmmap); + const path = this.getRoutePath(bmmap, curNode, bestNode); + if (!Array.isArray(path)) { + throw new Error( + `路径 ${JSON.stringify(path)} 无法在地图 ${JSON.stringify(this.getMaze(bmmap))} 行进.` + ); + } + const commands = this.getCommands(path); + if (commands.length <= 0) { + return false; + } + const gameCommandInfo = await this.gameApi.gameCommand(this.gameInfo.gameId, commands); + this.gameInfo.curPos = gameCommandInfo.curPos; + this.gameInfo.blockData = gameCommandInfo.blockData; + this.gameInfo.gameDiamond = gameCommandInfo.gameDiamond; + + return true; + } + + getCommand(start, end) { + const [sx, sy] = start; + const [ex, ey] = end; + + if (sx === ex && sy !== ey) { + return sy > ey ? "U" : "D"; + } + + if (sy === ey && sx !== ex) { + return sx > ex ? "L" : "R"; + } + + return null; + } + + getCommands(path) { + const commands = []; + for (let i = 0; i < path.length - 1; i++) { + const cmd = this.getCommand(path[i], path[i + 1]); + if (!cmd) { + throw new Error(`路径错误: ${i}->${i + 1}`); + } + commands.push(cmd); + } + return commands; + } + + getNodePosition(map, node) { + for (let y = 0; y < map.length; y++) { + const list = map[y]; + for (let x = 0; x < list.length; x++) { + const cNode = list[x]; + if (cNode === node) { + return {x, y}; + } + } + } + return {x: 0, y: 0}; + } + + getRoutePath(map, startNode, endNode) { + const maze = this.generateMapMaze(map); + const startPos = this.getNodePosition(map, startNode); + const endPos = this.getNodePosition(map, endNode); + + if (this.debug) { + console.log("地图", this.getMaze(map)); + console.log("开始位置", startPos); + console.log("结束位置", endPos); + } + + const astar = new Astar(maze); + const path = astar.search([startPos.x, startPos.y], [endPos.x, endPos.y], { + rightAngle: true, + optimalResult: true + }); + + return path; + } + + makeMap(mapData, grid = 6) { + const map = []; + for (let i = 0, y = 0; i < mapData.length; i += grid, y++) { + const row = []; + map.push(row); + for (let x = 0; x < grid; x++) { + const cell = mapData[i + x]; + row.push(this.createMapNode(x, y, cell)); + } + } + return map; + } + + createMapNode(x, y, secret) { + const rule = this.getNodeRule(secret); + return { + code: rule.code, + bounty: rule.hasBounty ? this.getBounty(secret, rule.code) : 0, + x, + y, + isWall: rule.isWall, + isBest: !!rule.isBest + }; + } + + // 获取范围地图 + getBMMap() { + const {mapData, blockData, curPos} = this.gameInfo; + const minX = Math.max(curPos.x - blockData.moveLeft, 0); + const maxX = Math.min(curPos.x + blockData.moveRight, mapData[0].length - 1); + const minY = Math.max(curPos.y - blockData.moveUp, 0); + const maxY = Math.min(curPos.y + blockData.moveDown, mapData.length - 1); + + const map = []; + for (let y = minY; y <= maxY; y++) { + const row = []; + map.push(row); + for (let x = minX; x <= maxX; x++) { + row.push(mapData[y][x]); + } + } + + return map; + } + + getNode(pos) { + return this.gameInfo.mapData[pos.y][pos.x]; + } + + getBestNode(map) { + let bestNode = null; + map.forEach((row) => { + row.forEach((node) => { + if (node.isBest && bestNode === null) { + bestNode = node; + } else if (node.isBest && node.bounty > bestNode.bounty) { + bestNode = node; + } + }); + }); + return bestNode; + } + + getMaze(map) { + return map.map((row, y) => { + return row.map((node, x) => { + if (node.isWall) { + return 1; + } else { + return 0; + } + }); + }); + } + + // 生成迷宫 + generateMapMaze(map) { + const grid = new Grid({ + col: map[0].length, + row: map.length + }); + + map.forEach((row, y) => { + row.forEach((node, x) => { + if (node.isWall) { + grid.set([x, y], "value", 1); + } + }); + }); + + return grid; + } + + getNodeRule(secret) { + return this.nodeRules.find((rule) => { + const reg = new RegExp(`^${rule.code}`); + return reg.test(secret); + }); + } + + getBounty(secret, key) { + const reg = new RegExp(`^${key}([0-9]*)`); + const match = secret.toString().match(reg); + if (match) { + const materials = Number.parseInt(match[1]); + return !isNaN(materials) ? materials : 0; + } + return 0; + } + + async run() { + const juejin = new JuejinHelper(); + await juejin.login(this.cookie); + this.gameApi = juejin.seagold(); + + const loginInfo = await this.gameApi.gameLogin(); + if (!loginInfo.isAuth) { + throw Error(`掘友 ${loginInfo.name} 未授权, 请前往掘金授权!`); + } + + const info = await this.gameApi.gameInfo(); + this.userInfo = { + uid: info.userInfo.uid, + name: info.userInfo.name, + todayDiamond: info.userInfo.todayDiamond, + todayLimitDiamond: info.userInfo.todayLimitDiamond, + maxTodayDiamond: info.userInfo.maxTodayDiamond + }; + + const runEndTime = new Date(); + runEndTime.setMinutes(runEndTime.getMinutes() + 30); + let runTime = new Date(); + + const runGame = async () => { + if (this.isGaming) { + return await this.gameOver(); + } + + await this.gameStart(); + + while (await this.executeGameCommand()) { + await utils.wait(utils.randomRangeNumber(1000, 1500)); + + if (runTime >= runEndTime) { + throw Error(`掘金游戏异常: 服务运行时间过长.`); + } + + runTime = new Date(); + } + + return await this.gameOver(); + }; + + const maxZeroCount = 5; + let zeroCount = 0; + + if (info.gameStatus === 1) { + this.restoreGame(info.gameInfo); + await runGame(); + } else { + this.resetGame(); + } + + while (this.userInfo.todayDiamond < this.userInfo.todayLimitDiamond) { + if (runTime >= runEndTime) { + throw Error(`掘金游戏异常: 服务运行时间过长.`); + } + + if (zeroCount > maxZeroCount) { + throw new Error("掘金游戏异常: 您 0 矿石游戏对局次数过多."); + } + + await utils.wait(utils.randomRangeNumber(1000, 5000)); + const gameOverInfo = await runGame(); + + if (gameOverInfo.gameDiamond === 0) { + zeroCount++; + } + + runTime = new Date(); + } + + await juejin.logout(); + } + + toString() { + const userInfo = this.userInfo; + const gameLives = this.history + .map((game) => `${game.gameId}\n 挖取 ${game.gameDiamond}\n 获得 ${game.realDiamond}`) + .join("\n"); + + return ` +掘友: ${userInfo.name} +今日限制矿石数 ${userInfo.todayLimitDiamond} +${ + userInfo.todayDiamond < userInfo.todayLimitDiamond + ? `今日获取矿石数 ${userInfo.todayDiamond}` + : "今日获取已达上限" +} +${this.history.length ? `\n游戏记录\n${gameLives}` : ""} +`.trim(); + } +} + +async function run(args) { + const cookies = utils.getUsersCookie(env); + const messageList = []; + for (let cookie of cookies) { + const seaGold = new Seagold(cookie); + + await utils.wait(utils.randomRangeNumber(1000, 5000)); // 初始等待1-5s + await seaGold.run(); + + const content = seaGold.toString(); + console.log(content); + + messageList.push(content); + } + + const message = messageList.join(`\n${"-".repeat(15)}\n`); + pushMessage({ + subject: "海底掘金游戏", + text: message + }); +} + +run(process.argv.splice(2)).catch((error) => { + pushMessage({ + subject: "海底掘金游戏", + html: ` +Error +
${error.message}
+
+`.trim() + }); + + throw error; +}); diff --git a/workflows/utils/dingding.js b/workflows/utils/dingding.js new file mode 100644 index 00000000..b8dbd234 --- /dev/null +++ b/workflows/utils/dingding.js @@ -0,0 +1,24 @@ +const axios = require("axios"); + +const env = require("./env"); +async function dingding({ subject, text, html }) { + return axios + .post( + env.DINGDING_WEBHOOK, + { + msgtype: "text", + text: { + content: `${subject}\n${text || html}` + } + }, + { + headers: { + "Content-Type": "application/json", + Charset: "UTF-8" + } + } + ) + .then(res => console.log(JSON.stringify(res))); +} + +module.exports = dingding; diff --git a/workflows/utils/email.js b/workflows/utils/email.js new file mode 100644 index 00000000..34a74951 --- /dev/null +++ b/workflows/utils/email.js @@ -0,0 +1,63 @@ +const nodemailer = require("nodemailer"); +const path = require("path"); + +async function main({ subject, text, html }) { + const env = require("./env"); + + const auth = { + user: env.EMAIL_USER, // generated ethereal user + pass: env.EMAIL_PASS // generated ethereal password + }; + + if (!auth.user || !auth.pass) { + console.warn("邮箱功能不可用, 请先配置邮箱用户和密码"); + return; + } + + const transporter = nodemailer.createTransport({ + host: "smtp." + auth.user.match(/@(.*)/)[1], + secure: true, + port: 465, + auth, + tls: { + // do not fail on invalid certs + rejectUnauthorized: false + } + }); + + const template = ` +
+
+ 稀土掘金 +
+
+ ${html ? html : `
${text}
`} +
+
+ 稀土掘金助手 | + Copyright © ${new Date().getFullYear()} Derek Li. +
+
+ `.trim(); + + await transporter.sendMail({ + from: `稀土掘金助手 <${auth.user}>`, // sender address('"Fred Foo 👻" ') + to: env.EMAIL_TO, // list of receivers + subject, // Subject line + // text, // plain text body + html: template, // html body + attachments: [ + { + filename: "logo.svg", + path: path.resolve(__dirname, "../../resources/logo.svg"), + cid: "logo.svg" //same cid value as in the html img src + } + ] + }); + + console.log("已通知订阅人!"); +} + +module.exports = main; + +// main().catch(console.error); diff --git a/workflows/utils/env.js b/workflows/utils/env.js new file mode 100644 index 00000000..e49ba69b --- /dev/null +++ b/workflows/utils/env.js @@ -0,0 +1,28 @@ +const env = process.env || {}; + +module.exports = { + /* 掘金Cookie */ + COOKIE: env.COOKIE, + /* 多用户掘金Cookie, 当有1名以上用户时填写, 支持同时最多可配置5名用户 */ + COOKIE_2: env.COOKIE_2, + COOKIE_3: env.COOKIE_3, + COOKIE_4: env.COOKIE_4, + COOKIE_5: env.COOKIE_5, + /** + * 邮箱配置 + * user 发件人邮箱, pass, 发件人密码, to收件人 + */ + EMAIL_USER: env.EMAIL_USER, + EMAIL_PASS: env.EMAIL_PASS, + EMAIL_TO: env.EMAIL_TO, + /** + * 钉钉配置 + * https://open.dingtalk.com/document/robots/custom-robot-access + */ + DINGDING_WEBHOOK: env.DINGDING_WEBHOOK, + /** + * PushPlus配置 + * http://www.pushplus.plus/doc/guide/openApi.html + */ + PUSHPLUS_TOKEN: env.PUSHPLUS_TOKEN +}; diff --git a/workflows/utils/pushMessage.js b/workflows/utils/pushMessage.js new file mode 100644 index 00000000..68c4ca2b --- /dev/null +++ b/workflows/utils/pushMessage.js @@ -0,0 +1,12 @@ +const env = require("./env"); +const email = require("./email"); +const pushplus = require("./pushplus"); +const dingding = require("./dingding"); + +async function pushMessage({ subject, text, html }) { + env.EMAIL_USER && (await email({ subject, text, html })); + env.DINGDING_WEBHOOK && (await dingding({ subject, text, html })); + env.PUSHPLUS_TOKEN && (await pushplus({ subject, text, html })); +} + +module.exports = pushMessage; diff --git a/workflows/utils/pushplus.js b/workflows/utils/pushplus.js new file mode 100644 index 00000000..18a68781 --- /dev/null +++ b/workflows/utils/pushplus.js @@ -0,0 +1,41 @@ +const axios = require("axios"); +const env = require("./env"); +const userConfig = { + url: "http://www.pushplus.plus/send", + token: env.PUSHPLUS_TOKEN +}; + +async function main({ subject, text, html }) { + if (!userConfig.token) { + console.warn("未配置PushPlus之Token, 请先配置PushPlus"); + return; + } + return await postMessage({ + token: userConfig.token, + title: subject, + content: text || html, + topic: "", + template: "html", + channel: "wechat", + webhook: "", + callbackUrl: "", + timestamp: "" + }) + .then(res => res.json()) + .then(json => { + console.log(`PushPlus推送结果: ` + json.msg); + return json; + }); +} + +async function postMessage(message) { + return await axios + .post(userConfig.url, message, { + headers: { + "Content-Type": "application/json" + } + }) + .catch(err => console.log(err)); +} + +module.exports = main; diff --git a/workflows/utils/utils.js b/workflows/utils/utils.js new file mode 100644 index 00000000..62b8d950 --- /dev/null +++ b/workflows/utils/utils.js @@ -0,0 +1,16 @@ +module.exports = { + async wait(time = 0) { + return new Promise((resolve) => setTimeout(resolve, time)); + }, + randomRangeNumber(start = 500, end = 1000) { + return (Math.random() * (end - start) + start) >> 0; + }, + getUsersCookie(env) { + const users = [env.COOKIE]; + + const keys = Object.keys(env).filter(key => key.match(/^COOKIE_([0-9])+$/)); + keys.forEach(key => users.push(env[key])); + + return users.filter(cookie => !!cookie); + } +}; diff --git a/yarn.lock b/yarn.lock index d9be1559..5fbf7541 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.16.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.18.6" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -38,6 +38,11 @@ dependencies: regenerator-runtime "^0.13.4" +"@changesets/types@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@changesets/types/-/types-0.4.0.tgz#3413badb2c3904357a36268cb9f8c7e0afc3a804" + integrity sha512-TclHHKDVYQ8rJGZgVeWiF7c91yWzTTWdPagltgutelGu/Psup5PQlUq6svx7S8suj+jXcaE34yEEsfIvzXXB2Q== + "@eslint/eslintrc@^1.3.0": version "1.3.0" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" @@ -72,6 +77,14 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + "@next/eslint-plugin-next@12.2.4": version "12.2.4" resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.4.tgz#b7496cf11050577cfa815612c541195c1b4871eb" @@ -92,6 +105,11 @@ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + "@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" @@ -165,6 +183,14 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -177,10 +203,25 @@ dependencies: "@types/node" "*" +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== + "@types/node@*": - version "18.6.4" - resolved "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" - integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg== + version "18.6.5" + resolved "https://registry.npmjs.org/@types/node/-/node-18.6.5.tgz#06caea822caf9e59d5034b695186ee74154d2802" + integrity sha512-Xjt5ZGUa5WusGZJ4WJPbOT8QOqp6nDynVFRKcUt32bOgvXEoc6o085WNkYTMO7ifAj2isEfQQ2cseE+wT6jsRw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/resolve@1.17.1": version "1.17.1" @@ -195,47 +236,47 @@ integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== "@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" - integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== + version "5.33.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" + integrity sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w== dependencies: - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/typescript-estree" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/typescript-estree" "5.33.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" - integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg== +"@typescript-eslint/scope-manager@5.33.0": + version "5.33.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d" + integrity sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw== dependencies: - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/visitor-keys" "5.32.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/visitor-keys" "5.33.0" -"@typescript-eslint/types@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" - integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== +"@typescript-eslint/types@5.33.0": + version "5.33.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" + integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== -"@typescript-eslint/typescript-estree@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" - integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg== +"@typescript-eslint/typescript-estree@5.33.0": + version "5.33.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf" + integrity sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ== dependencies: - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/visitor-keys" "5.32.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/visitor-keys" "5.33.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.32.0": - version "5.32.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" - integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g== +"@typescript-eslint/visitor-keys@5.33.0": + version "5.33.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484" + integrity sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw== dependencies: - "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/types" "5.33.0" eslint-visitor-keys "^3.3.0" acorn-jsx@^5.3.2: @@ -248,6 +289,14 @@ acorn@^8.8.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +aggregate-error@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -295,7 +344,22 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" -array-includes@^3.1.4, array-includes@^3.1.5: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-includes@^3.0.3, array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== @@ -306,11 +370,28 @@ array-includes@^3.1.4, array-includes@^3.1.5: get-intrinsic "^1.1.1" is-string "^1.0.7" +array-union@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng== + dependencies: + array-uniq "^1.0.1" + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + array.prototype.flat@^1.2.5: version "1.3.0" resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" @@ -331,6 +412,16 @@ array.prototype.flatmap@^1.3.0: es-abstract "^1.19.2" es-shim-unscopables "^1.0.0" +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -341,6 +432,11 @@ asynckit@^0.4.0: resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + axe-core@^4.4.3: version "4.4.3" resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz#11c74d23d5013c0fa5d183796729bc3482bd2f6f" @@ -364,6 +460,19 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -372,6 +481,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + braces@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -389,6 +514,21 @@ builtin-modules@^3.3.0: resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -397,11 +537,30 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw== + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -411,6 +570,14 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -419,6 +586,34 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chunkd@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" + integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -460,17 +655,39 @@ commondir@^1.0.1: resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + core-js-pure@^3.20.2: version "3.24.1" resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== -cross-spawn@^7.0.2: +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -484,7 +701,7 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -debug@^2.6.9: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -505,6 +722,24 @@ debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -523,11 +758,40 @@ define-properties@^1.1.3, define-properties@^1.1.4: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +dir-glob@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -549,6 +813,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +duplexer2@~0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + integrity sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g== + dependencies: + readable-stream "~1.1.9" + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -561,6 +832,13 @@ emoji-regex@^9.2.2: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: version "1.20.1" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" @@ -846,6 +1124,53 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-astar@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/fast-astar/-/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" + integrity sha512-r23aD+DIl2Y/XdhP/Z3kDyi9dJ4BID6z49gjc+lQo1fLBqi9uEkaevcX4v0bqHGxjwc7GKbt/OPRM/UwTCfiEw== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -856,6 +1181,18 @@ fast-diff@^1.1.2: resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-glob@^2.2.6: + version "2.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" @@ -891,6 +1228,16 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -914,7 +1261,7 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -948,6 +1295,11 @@ follow-redirects@^1.14.9: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + form-data@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -957,6 +1309,13 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + fs-extra@^10.0.0: version "10.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -966,6 +1325,15 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1018,6 +1386,28 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +get-workspaces@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/get-workspaces/-/get-workspaces-0.5.2.tgz#4fb2031ec1bdd32d3c1f3de2589ce8af5c2e24ee" + integrity sha512-99x72taQ9OUHhCmBS0B2WI/zwOtBOBPoyVNGs9+B0ag2GGhCjl/EaU9VQ8Zorx64TyVj1Am7bO+0J1KwDqo7OA== + dependencies: + "@changesets/types" "^0.4.0" + fs-extra "^7.0.1" + globby "^9.2.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1032,6 +1422,11 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== + glob@7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -1087,7 +1482,21 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.2.0: +globby@^9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" + integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^1.0.2" + dir-glob "^2.2.2" + fast-glob "^2.2.6" + glob "^7.1.3" + ignore "^4.0.3" + pify "^4.0.1" + slash "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1097,6 +1506,11 @@ grapheme-splitter@^1.0.4: resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -1131,6 +1545,37 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1138,6 +1583,16 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +ignore@^4.0.3: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -1156,6 +1611,11 @@ imurmurhash@^0.1.4: resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1164,7 +1624,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@~2.0.1: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1178,6 +1638,25 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -1193,6 +1672,11 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-builtin-module@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" @@ -1212,6 +1696,20 @@ is-core-module@^2.8.1, is-core-module@^2.9.0: dependencies: has "^1.0.3" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -1219,11 +1717,48 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" -is-extglob@^2.1.1: +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== + dependencies: + is-extglob "^2.1.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -1248,11 +1783,30 @@ is-number-object@^1.0.4: dependencies: has-tostringtag "^1.0.0" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-reference@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -1296,11 +1850,38 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -1313,6 +1894,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1330,6 +1916,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -1356,12 +1949,12 @@ jsonwebtoken@^8.5.1: semver "^5.6.0" "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz#afe5efe4332cd3515c065072bd4d6b0aa22152bd" - integrity sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q== + version "3.3.3" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" + integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: array-includes "^3.1.5" - object.assign "^4.1.2" + object.assign "^4.1.3" jwa@^1.4.1: version "1.4.1" @@ -1380,6 +1973,30 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" @@ -1502,12 +2119,70 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" -merge2@^1.3.0, merge2@^1.4.1: +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +meow@^6.0.0: + version "6.1.1" + resolved "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" + integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "^4.0.2" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@^3.1.10: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -1527,6 +2202,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1534,11 +2214,28 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimist-options@^4.0.2: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1563,16 +2260,57 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +nodemailer@^6.7.0: + version "6.7.7" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" + integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -1583,7 +2321,19 @@ object-keys@^1.1.1: resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2: +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.2, object.assign@^4.1.3: version "4.1.3" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz#d36b7700ddf0019abb6b1df1bb13f6445f79051f" integrity sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA== @@ -1619,6 +2369,13 @@ object.hasown@^1.1.1: define-properties "^1.1.4" es-abstract "^1.19.5" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + object.values@^1.1.5: version "1.1.5" resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" @@ -1654,7 +2411,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.2.0: +p-limit@^2.2.0, p-limit@^2.2.1: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -1706,6 +2463,26 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -1731,16 +2508,38 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +physical-cpu-count@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660" + integrity sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g== + picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pirates@^4.0.1: version "4.0.5" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" @@ -1753,6 +2552,11 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -1789,16 +2593,76 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + react-is@^16.13.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@~1.0.17: + version "1.0.34" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" @@ -1813,12 +2677,27 @@ regexpp@^3.2.0: resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -1836,6 +2715,11 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -1884,10 +2768,17 @@ run-parallel@^1.1.9: safe-buffer@^5.0.1: version "5.2.1" - resolved "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -semver@^5.6.0: +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"semver@2 || 3 || 4 || 5", semver@^5.6.0: version "5.7.1" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -1897,13 +2788,23 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.7: +semver@^7.1.1, semver@^7.3.7: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -1925,16 +2826,125 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/split2/-/split2-0.1.2.tgz#a4d560b91f04168f21cd9bdd569b6f78d5164593" + integrity sha512-t6JTeWbon5yYazpiZN1Fn0ehh5h/FBH9iuoQBAaEHUp+uFxLKFrmMQF3ElmzoScD9OQn+gb8Ut+NOuQYZ1aBfA== + dependencies: + through2 "~0.4.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" @@ -1967,6 +2977,11 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -1979,6 +2994,13 @@ strip-bom@^3.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -2015,6 +3037,13 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +task-graph-runner@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/task-graph-runner/-/task-graph-runner-1.0.3.tgz#73b2cd380cef6f51b8179b0d1da4bb7c356b03bf" + integrity sha512-aC70bepv1j9jXX70nzolNvnHJvD4A3WtU4lQ1HEjgTS8rgnRXoUUq+xl9hZ1hKYXxVwElZXmUUMxpzDC6R0mRg== + dependencies: + array-includes "^3.0.3" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -2034,6 +3063,37 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +through2@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7" + integrity sha512-zexCrAOTbjkBCXGyozn7hhS3aEaqdrc59mAD2E3dKYzV1vFuEGQ1hEDJN2oQMQFwy4he2zyLqPZV+AlfS8ZWJA== + dependencies: + readable-stream "~1.0.17" + xtend "~3.0.0" + +through2@~0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" + integrity sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ== + dependencies: + readable-stream "~1.0.17" + xtend "~2.1.1" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2041,6 +3101,21 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" @@ -2080,11 +3155,26 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + typescript@>=3.0.0: version "4.7.4" resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" @@ -2100,11 +3190,34 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -2112,6 +3225,16 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -2122,6 +3245,14 @@ v8-compile-cache@^2.0.3: resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -2145,16 +3276,66 @@ word-wrap@^1.2.3: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +workspaces-run@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/workspaces-run/-/workspaces-run-1.0.1.tgz#dace5df0d45f8770316d254e0cfe7a6c1a3df437" + integrity sha512-B7tZj/g4/1JCeNQ7+zVNVBC83hOJBKpOm/yYob3eqw0Aerp1Guecfdf0J6kO/I/EyA2X2uP1oCHWsh2QywXh0A== + dependencies: + aggregate-error "^3.0.1" + chalk "^3.0.0" + chunkd "^2.0.1" + cross-spawn "^7.0.1" + get-workspaces "^0.5.2" + meow "^6.0.0" + micromatch "^4.0.2" + p-limit "^2.2.1" + physical-cpu-count "^2.0.0" + redent "^3.0.0" + semver "^7.1.1" + signal-exit "^3.0.2" + task-graph-runner "^1.0.3" + trim-newlines "^3.0.0" + wrapline "^2.0.1" + +wrapline@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/wrapline/-/wrapline-2.0.1.tgz#c79908ac15f41d401da6607ff25661d4c91479bb" + integrity sha512-WmC0Dk43usmD+shMS8dr06Znblx3nAWHWR+BMecQEClNq/NTBPKIA6JHSX+cv8TRG7w4H6/nLGUmFt56rHkFow== + dependencies: + duplexer2 "~0.0.2" + split2 "^0.1.2" + through2 "^0.5.1" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== + dependencies: + object-keys "~0.4.0" + +xtend@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + integrity sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From fca9338ba9ab83a8968c69233971e6059f383326 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 19:38:32 +0800 Subject: [PATCH 045/131] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=96=E5=8F=8A=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 29 +++++++++++++++++++++++++++++ workflows/README.md | 16 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 .github/workflows/auto.yml create mode 100644 workflows/README.md diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml new file mode 100644 index 00000000..6ea8639b --- /dev/null +++ b/.github/workflows/auto.yml @@ -0,0 +1,29 @@ +name: CheckIn + +on: + schedule: + - cron: "40 22 * * *" # 北京时间上午06:40 + workflow_dispatch: +jobs: + CheckIn: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + - name: Run Project + env: + COOKIE: ${{ secrets.COOKIE }} + COOKIE_2: ${{ secrets.COOKIE_2 }} + COOKIE_3: ${{ secrets.COOKIE_3 }} + COOKIE_4: ${{ secrets.COOKIE_4 }} + COOKIE_5: ${{ secrets.COOKIE_5 }} + EMAIL_USER: ${{ secrets.EMAIL_USER }} + EMAIL_PASS: ${{ secrets.EMAIL_PASS }} + EMAIL_TO: ${{ secrets.EMAIL_TO }} + DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} + PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} + run: | + cd workflows + yarn + yarn checkin + yarn seagold diff --git a/workflows/README.md b/workflows/README.md new file mode 100644 index 00000000..abf7a5b5 --- /dev/null +++ b/workflows/README.md @@ -0,0 +1,16 @@ +# Juejin Workflows 掘金工作流 + +## 开始使用 + +下载项目 或 [ clone the repo:](https://github.com/iDerekLi/juejin-helper) +```shell +curl https://codeload.github.com/iDerekLi/juejin-helper/tar.gz/main | tar -xz --strip=2 juejin-helper-main/workflows +cd workflows +``` + +安装依赖并运行脚本 +```shell +yarn +yarn checkin +yarn seagold +``` From a693cb5b729595b89c9d44b92986b620551a19f4 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 19:48:34 +0800 Subject: [PATCH 046/131] =?UTF-8?q?chore:=20=E8=B0=83=E6=95=B4=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 24 ++++++++++++++++++++++-- .github/workflows/checkin.yml | 28 ---------------------------- .github/workflows/seagold.yml | 28 ---------------------------- 3 files changed, 22 insertions(+), 58 deletions(-) delete mode 100644 .github/workflows/checkin.yml delete mode 100644 .github/workflows/seagold.yml diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml index 6ea8639b..a838ae8b 100644 --- a/.github/workflows/auto.yml +++ b/.github/workflows/auto.yml @@ -1,8 +1,8 @@ -name: CheckIn +name: Auto on: schedule: - - cron: "40 22 * * *" # 北京时间上午06:40 + - cron: "30 22 * * *" # 北京时间上午06:30 workflow_dispatch: jobs: CheckIn: @@ -26,4 +26,24 @@ jobs: cd workflows yarn yarn checkin + SeaGold: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + - name: Run Project + env: + COOKIE: ${{ secrets.COOKIE }} + COOKIE_2: ${{ secrets.COOKIE_2 }} + COOKIE_3: ${{ secrets.COOKIE_3 }} + COOKIE_4: ${{ secrets.COOKIE_4 }} + COOKIE_5: ${{ secrets.COOKIE_5 }} + EMAIL_USER: ${{ secrets.EMAIL_USER }} + EMAIL_PASS: ${{ secrets.EMAIL_PASS }} + EMAIL_TO: ${{ secrets.EMAIL_TO }} + DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} + PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} + run: | + cd workflows + yarn yarn seagold diff --git a/.github/workflows/checkin.yml b/.github/workflows/checkin.yml deleted file mode 100644 index 8f397823..00000000 --- a/.github/workflows/checkin.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: CheckIn - -on: - schedule: - - cron: "40 22 * * *" # 北京时间上午06:40 - workflow_dispatch: -jobs: - CheckIn: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - - name: Run Project - env: - COOKIE: ${{ secrets.COOKIE }} - COOKIE_2: ${{ secrets.COOKIE_2 }} - COOKIE_3: ${{ secrets.COOKIE_3 }} - COOKIE_4: ${{ secrets.COOKIE_4 }} - COOKIE_5: ${{ secrets.COOKIE_5 }} - EMAIL_USER: ${{ secrets.EMAIL_USER }} - EMAIL_PASS: ${{ secrets.EMAIL_PASS }} - EMAIL_TO: ${{ secrets.EMAIL_TO }} - DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} - PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} - run: | - cd workflows - yarn - yarn checkin diff --git a/.github/workflows/seagold.yml b/.github/workflows/seagold.yml deleted file mode 100644 index 8cdd99af..00000000 --- a/.github/workflows/seagold.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: SeaGold - -on: - schedule: - - cron: "30 22 * * *" # 北京时间上午06:30 - workflow_dispatch: -jobs: - SeaGold: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - - name: Run Project - env: - COOKIE: ${{ secrets.COOKIE }} - COOKIE_2: ${{ secrets.COOKIE_2 }} - COOKIE_3: ${{ secrets.COOKIE_3 }} - COOKIE_4: ${{ secrets.COOKIE_4 }} - COOKIE_5: ${{ secrets.COOKIE_5 }} - EMAIL_USER: ${{ secrets.EMAIL_USER }} - EMAIL_PASS: ${{ secrets.EMAIL_PASS }} - EMAIL_TO: ${{ secrets.EMAIL_TO }} - DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} - PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} - run: | - cd workflows - yarn - yarn seagold From 08a907bb84cba0e4793f76732b095b367d07fd0a Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 20:06:59 +0800 Subject: [PATCH 047/131] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=B8=B2=E8=81=94job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml index a838ae8b..5cbce5ff 100644 --- a/.github/workflows/auto.yml +++ b/.github/workflows/auto.yml @@ -4,6 +4,19 @@ on: schedule: - cron: "30 22 * * *" # 北京时间上午06:30 workflow_dispatch: + +env: + COOKIE: ${{ secrets.COOKIE }} + COOKIE_2: ${{ secrets.COOKIE_2 }} + COOKIE_3: ${{ secrets.COOKIE_3 }} + COOKIE_4: ${{ secrets.COOKIE_4 }} + COOKIE_5: ${{ secrets.COOKIE_5 }} + EMAIL_USER: ${{ secrets.EMAIL_USER }} + EMAIL_PASS: ${{ secrets.EMAIL_PASS }} + EMAIL_TO: ${{ secrets.EMAIL_TO }} + DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} + PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} + jobs: CheckIn: runs-on: ubuntu-latest @@ -11,38 +24,17 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 - name: Run Project - env: - COOKIE: ${{ secrets.COOKIE }} - COOKIE_2: ${{ secrets.COOKIE_2 }} - COOKIE_3: ${{ secrets.COOKIE_3 }} - COOKIE_4: ${{ secrets.COOKIE_4 }} - COOKIE_5: ${{ secrets.COOKIE_5 }} - EMAIL_USER: ${{ secrets.EMAIL_USER }} - EMAIL_PASS: ${{ secrets.EMAIL_PASS }} - EMAIL_TO: ${{ secrets.EMAIL_TO }} - DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} - PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} run: | cd workflows yarn yarn checkin SeaGold: + needs: CheckIn runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 - name: Run Project - env: - COOKIE: ${{ secrets.COOKIE }} - COOKIE_2: ${{ secrets.COOKIE_2 }} - COOKIE_3: ${{ secrets.COOKIE_3 }} - COOKIE_4: ${{ secrets.COOKIE_4 }} - COOKIE_5: ${{ secrets.COOKIE_5 }} - EMAIL_USER: ${{ secrets.EMAIL_USER }} - EMAIL_PASS: ${{ secrets.EMAIL_PASS }} - EMAIL_TO: ${{ secrets.EMAIL_TO }} - DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} - PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} run: | cd workflows yarn From 3c11c54c6c40ea03a0961c0cdbb8d71cafdde1f0 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 20:07:39 +0800 Subject: [PATCH 048/131] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/workflows/package.json b/workflows/package.json index a8caf652..0fb2b1c8 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -9,11 +9,9 @@ "seagold": "node seagold.js" }, "dependencies": { + "juejin-helper": "1.6.0", "axios": "^0.27.2", "fast-astar": "^1.0.6", "nodemailer": "^6.7.0" - }, - "peerDependencies": { - "juejin-helper": "1.6.0" } } From 5a21a8561aa1f9c7de152c6182e9fde53a618f65 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 20:13:23 +0800 Subject: [PATCH 049/131] =?UTF-8?q?build:=20=E7=A7=BB=E9=99=A4ws?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +- workflows/yarn.lock | 173 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 workflows/yarn.lock diff --git a/package.json b/package.json index 0542acec..4597c526 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,7 @@ "version": "1.6.0", "private": true, "author": "Derek Li", - "workspaces": [ - "packages/*", - "workflows" - ], + "workspaces": ["packages/*"], "scripts": { "dev": "cross-env NODE_ENV=development rollup -cw", "build": "cross-env NODE_ENV=production rollup -c", diff --git a/workflows/yarn.lock b/workflows/yarn.lock new file mode 100644 index 00000000..8eb71008 --- /dev/null +++ b/workflows/yarn.lock @@ -0,0 +1,173 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^0.27.2: + version "0.27.2" + resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +fast-astar@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/fast-astar/-/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" + integrity sha512-r23aD+DIl2Y/XdhP/Z3kDyi9dJ4BID6z49gjc+lQo1fLBqi9uEkaevcX4v0bqHGxjwc7GKbt/OPRM/UwTCfiEw== + +follow-redirects@^1.14.9: + version "1.15.1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +juejin-helper@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/juejin-helper/-/juejin-helper-1.6.0.tgz#8275e2fc45dc6ef3c44a450c456240d9d95c9cbc" + integrity sha512-+iX0uBFAeGwjTpILJ9F++bVBFv9IwNtgBB3H9fOKxhbWC1U4lmNvdqeC9+n6SISMln10TgrJ8eF2J9DdageD5Q== + dependencies: + axios "^0.27.2" + jsonwebtoken "^8.5.1" + uuid "^8.3.2" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nodemailer@^6.7.0: + version "6.7.7" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" + integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== From d0704851ed5df51f756055f04be2a4bbbc7d3994 Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 20:24:20 +0800 Subject: [PATCH 050/131] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/workflows/README.md b/workflows/README.md index abf7a5b5..e8eccb0e 100644 --- a/workflows/README.md +++ b/workflows/README.md @@ -14,3 +14,23 @@ yarn yarn checkin yarn seagold ``` + +运行脚本前 配置环境变量 `/workflows/utils/env.js` + +```javascript +module.exports = { + COOKIE: "掘金Cookie" + // ... +}; +``` + +| Name | Value | Required | +| --- | --- | --- | +| COOKIE | 掘金网站Cookie | 是 | +| COOKIE_2 | 多用户, 当需要同时运行多个掘金用户时所需, 支持最多 **5** 名用户(即COOKIE + COOKIE_2 - COOKIE_5) | 否 | +| EMAIL_USER | 发件人邮箱地址(需要开启 SMTP) | 否 | +| EMAIL_PASS | 发件人邮箱密码(SMTP密码) | 否 | +| EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | +| DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | +| PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | + From 5e0d83b57690bca2750a4ff567909c650fb7a6bc Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 9 Aug 2022 21:09:39 +0800 Subject: [PATCH 051/131] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E8=B4=A1?= =?UTF-8?q?=E7=8C=AE=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/PULL_REQUEST_TEMPLATE.md | 7 ++---- CONTRIBUTING.md | 37 ++++++++------------------------ 2 files changed, 11 insertions(+), 33 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 513f4228..a440e899 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,4 @@ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a07b7eba..4bee1971 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,41 +1,22 @@ # 参与贡献 -## 分支介绍 - -- `package` 掘金API发布npm包,供给自动化工作流使用。 -- `workflows` 自动化工作流开发分支。 -- `main` 是 workflows 分支的稳定版。 - -**处理自动化相关逻辑:** -base: `workflows` <- compare `your branch` - -**处理JueJinAPI相关逻辑:** -base: `package` <- compare `your branch` - -## workflows 分支 - -### 安装 +## 项目结构 +- packages 掘金API工程 +- workflows 掘金自动化工作流项目 +### 本地运行 +- node >= 14.17.0 - `yarn` 安装依赖 +- `yarn dev` 启动开发模式 -### 环境变量 - -- `/scripts/utils/env.js` 替换本地测试所需的环境变量 - +### 本地运行工作流项目 +- `cd workflows` +- `/utils/env.js` 替换本地测试所需的环境变量 ```javascript module.exports = { COOKIE: "测试掘金Cookie", // ... }; ``` - -### 本地运行 - - `yarn checkin` 运行掘金签到脚本 - `yarn seagold` 运行海底掘金游戏脚本 - -## package 分支 - -- `yarn` 安装依赖 -- `yarn dev` 启动开发模式 -- `node tests/your-test.js` 测试一个模块 From 67c57bfc70a73a7555084d1d3da5615658f9ca59 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 00:09:39 +0800 Subject: [PATCH 052/131] =?UTF-8?q?chore:=20=E5=AE=8C=E5=96=84=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 11 ++- packages/juejin-helper/package.json | 4 - packages/juejin-helper/tsconfig.json | 20 +---- tsconfig.json | 1 - yarn.lock | 113 ++++++++++++++++++++++++--- 5 files changed, 111 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index 4597c526..ccf84583 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,15 @@ "version": "1.6.0", "private": true, "author": "Derek Li", - "workspaces": ["packages/*"], + "workspaces": [ + "packages/*" + ], "scripts": { "dev": "cross-env NODE_ENV=development rollup -cw", "build": "cross-env NODE_ENV=production rollup -c", - "clean": "rimraf \"packages/*/{build,types}\"" + "clean": "rimraf \"packages/*/{build,types}\"", + "test:login": "ts-node ./packages/juejin-helper/test/test-login.ts", + "test:growth": "ts-node ./packages/juejin-helper/test/test-growth.ts" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", @@ -24,7 +28,8 @@ "rollup": "^2.77.2", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-typescript2": "^0.32.1", - "typescript": ">=3.0.0", + "ts-node": "^10.9.1", + "typescript": "^4.7.4", "workspaces-run": "^1.0.1" }, "engines": { diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 5c6660f6..d38ac35d 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -8,10 +8,6 @@ "main": "build/juejin-helper.c.js", "module": "build/juejin-helper.esm.js", "types": "types/juejin-helper.d.ts", - "scripts": { - "dev": "rollup -c -w", - "build": "rollup -c" - }, "files": [ "build", "types", diff --git a/packages/juejin-helper/tsconfig.json b/packages/juejin-helper/tsconfig.json index bf334c53..57220954 100644 --- a/packages/juejin-helper/tsconfig.json +++ b/packages/juejin-helper/tsconfig.json @@ -1,20 +1,4 @@ { - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "incremental": false, - "experimentalDecorators": true - }, - "include": ["src/*.ts", "src/*.tsx"], - "exclude": ["node_modules"] + "extends": "../../tsconfig", + "include": ["src/**/*", "test/**/*"] } diff --git a/tsconfig.json b/tsconfig.json index 2944a1ab..967dcc61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,6 @@ "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, - "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, diff --git a/yarn.lock b/yarn.lock index 5fbf7541..641a0454 100644 --- a/yarn.lock +++ b/yarn.lock @@ -43,6 +43,13 @@ resolved "https://registry.npmjs.org/@changesets/types/-/types-0.4.0.tgz#3413badb2c3904357a36268cb9f8c7e0afc3a804" integrity sha512-TclHHKDVYQ8rJGZgVeWiF7c91yWzTTWdPagltgutelGu/Psup5PQlUq6svx7S8suj+jXcaE34yEEsfIvzXXB2Q== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@eslint/eslintrc@^1.3.0": version "1.3.0" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f" @@ -77,6 +84,24 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -173,6 +198,26 @@ resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "@types/estree@*": version "1.0.0" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" @@ -284,7 +329,12 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.0: +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: version "8.8.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -331,6 +381,11 @@ any-promise@^1.0.0: resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -680,6 +735,11 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-env@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -785,6 +845,11 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -1166,11 +1231,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fast-astar@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/fast-astar/-/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" - integrity sha512-r23aD+DIl2Y/XdhP/Z3kDyi9dJ4BID6z49gjc+lQo1fLBqi9uEkaevcX4v0bqHGxjwc7GKbt/OPRM/UwTCfiEw== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -2119,6 +2179,11 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -2282,11 +2347,6 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -nodemailer@^6.7.0: - version "6.7.7" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" - integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== - normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -3121,6 +3181,25 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -3175,7 +3254,7 @@ type-fest@^0.8.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typescript@>=3.0.0: +typescript@^4.7.4: version "4.7.4" resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== @@ -3240,6 +3319,11 @@ uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -3336,6 +3420,11 @@ yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From cee9b73b30c346d2f171357286d80e33bd3b4aad Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 00:10:07 +0800 Subject: [PATCH 053/131] =?UTF-8?q?test:=20=E8=A1=A5=E5=85=85=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=92=8C=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/src/growth.ts | 18 +++++++++++++++--- .../test/{test-growth.js => test-growth.ts} | 4 ++-- .../test/{test-login.js => test-login.ts} | 4 ++-- packages/juejin-helper/test/test.js | 9 --------- 4 files changed, 19 insertions(+), 16 deletions(-) rename packages/juejin-helper/test/{test-growth.js => test-growth.ts} (91%) rename packages/juejin-helper/test/{test-login.js => test-login.ts} (61%) delete mode 100644 packages/juejin-helper/test/test.js diff --git a/packages/juejin-helper/src/growth.ts b/packages/juejin-helper/src/growth.ts index 4d9e1ced..446d0f25 100644 --- a/packages/juejin-helper/src/growth.ts +++ b/packages/juejin-helper/src/growth.ts @@ -52,7 +52,10 @@ class Growth { * sum_count 累计签到天数 * } */ - async getCounts() { + async getCounts(): Promise<{ + cont_count: number; + sum_count: number; + }> { return this.http.get("/growth_api/v1/get_counts"); } @@ -101,7 +104,13 @@ class Growth { return this.http.post("/growth_api/v1/check_in"); } - async getLotteriesLuckyUsers(data: { page_no: number; page_size: number }) { + async getLotteriesLuckyUsers(data?: { page_no: number; page_size: number }): Promise<{ + count: number; + lotteries: Array<{ + history_id: number; + [prop: string]: any; + }>; + }> { const { page_no = 1, page_size = 5 } = data || {}; return this.http.post("/growth_api/v1/lottery_history/global_big", { page_no: page_no, @@ -109,7 +118,10 @@ class Growth { }); } - async dipLucky(lottery_history_id: number) { + async dipLucky(lottery_history_id: number): Promise<{ + has_dip: boolean; + dip_value: number; + }> { return this.http.post("/growth_api/v1/lottery_lucky/dip_lucky", { lottery_history_id }); diff --git a/packages/juejin-helper/test/test-growth.js b/packages/juejin-helper/test/test-growth.ts similarity index 91% rename from packages/juejin-helper/test/test-growth.js rename to packages/juejin-helper/test/test-growth.ts index 04b276ed..32c8a171 100644 --- a/packages/juejin-helper/test/test-growth.js +++ b/packages/juejin-helper/test/test-growth.ts @@ -1,11 +1,11 @@ -const JuejinHelper = require(".."); +import JuejinHelper from ".."; const mockCookie = `juejin-cookies`; async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); - console.log(juejin.getUser().user_name); + console.log(juejin.getUser()?.user_name); const growth = juejin.growth(); diff --git a/packages/juejin-helper/test/test-login.js b/packages/juejin-helper/test/test-login.ts similarity index 61% rename from packages/juejin-helper/test/test-login.js rename to packages/juejin-helper/test/test-login.ts index 4f1cf150..67e134ff 100644 --- a/packages/juejin-helper/test/test-login.js +++ b/packages/juejin-helper/test/test-login.ts @@ -1,11 +1,11 @@ -const JuejinHelper = require('..'); +import JuejinHelper from ".."; const mockCookie = `juejin-cookies`; async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); - console.log("user_id", juejin.getUser().user_id); + console.log("user_id", juejin.getUser()?.user_id); } run(); diff --git a/packages/juejin-helper/test/test.js b/packages/juejin-helper/test/test.js deleted file mode 100644 index 0446fb4b..00000000 --- a/packages/juejin-helper/test/test.js +++ /dev/null @@ -1,9 +0,0 @@ -const JuejinHelper = require(".."); - -const mockCookie = `juejin-cookies`; - -async function run() { - console.log(JuejinHelper); -} - -run(); From e7ce5f3712cd5ff7f1e7ab3e76d6a95ae3e1384e Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:10:23 +0800 Subject: [PATCH 054/131] =?UTF-8?q?chore:=20=E8=A1=A5=E5=85=85bugfix?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/src/bugfix.ts | 39 ++++++++++--------- .../test/{test-bugfix.js => test-bugfix.ts} | 4 +- 2 files changed, 22 insertions(+), 21 deletions(-) rename packages/juejin-helper/test/{test-bugfix.js => test-bugfix.ts} (86%) diff --git a/packages/juejin-helper/src/bugfix.ts b/packages/juejin-helper/src/bugfix.ts index 523319a3..5642fdf5 100644 --- a/packages/juejin-helper/src/bugfix.ts +++ b/packages/juejin-helper/src/bugfix.ts @@ -3,10 +3,20 @@ import JuejinHelper from "./index"; import axios, { AxiosInstance } from "axios"; interface Bug { - bug_type: number; - bug_time: number; - bug_show_type: number; - is_first: boolean; + bug_type: number; // 类型位置 + bug_time: number; // 时间戳 + bug_show_type: number; // 显示类型 + is_first: boolean; // 是否第一次 +} + +interface Competition { + competition_id: number; + [prop: string]: any; +} + +interface User { + user_own_bug: number; + [prop: string]: any; } class Bugfix { @@ -54,9 +64,9 @@ class Bugfix { /** * 获取竞赛信息 - * @returns {Promise<*>} + * @returns {Promise} */ - async getCompetition() { + async getCompetition(): Promise { return this.http.post("/user_api/v1/bugfix/competition", { // 必须加个空对象,否则接口提示少了参数 }); @@ -64,10 +74,10 @@ class Bugfix { /** * 获取用户信息 - * @param competition_id - * @returns {Promise<*>} + * @param data + * @returns {Promise} */ - async getUser(data: { competition_id: number }) { + async getUser(data: { competition_id: number }): Promise { const { competition_id } = data; return this.http.post("/user_api/v1/bugfix/user", { competition_id @@ -76,16 +86,7 @@ class Bugfix { /** * 获取未收集的Bug - * @returns {Promise<*>} - * [ - * { - * bug_type: number 类型位置 - * bug_time: number 时间戳 - * bug_show_type: 1 显示类型 - * is_first: boolean 是否第一次 - * } - * ] - * + * @returns {Promise} */ async getNotCollectBugList(): Promise { return this.http.post("/user_api/v1/bugfix/not_collect", { diff --git a/packages/juejin-helper/test/test-bugfix.js b/packages/juejin-helper/test/test-bugfix.ts similarity index 86% rename from packages/juejin-helper/test/test-bugfix.js rename to packages/juejin-helper/test/test-bugfix.ts index 7f60593e..d8901c41 100644 --- a/packages/juejin-helper/test/test-bugfix.js +++ b/packages/juejin-helper/test/test-bugfix.ts @@ -1,11 +1,11 @@ -const JuejinHelper = require(".."); +import JuejinHelper from ".."; const mockCookie = `juejin-cookies`; async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); - console.log(juejin.getUser().user_name); + console.log(juejin.getUser()?.user_name); const bugfix = juejin.bugfix(); From 5326ebc4c51671967687f02426bd813f3914583f Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:10:50 +0800 Subject: [PATCH 055/131] =?UTF-8?q?build:=20=E8=B0=83=E6=95=B4=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rollup.config.js | 14 ++++++-------- tsconfig.json | 3 ++- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index 365e0f9b..1f9f9135 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,7 +4,7 @@ import typescript from "rollup-plugin-typescript2"; import dts from "rollup-plugin-dts"; import workspacesRun from "workspaces-run"; -const isProduction = process.env.NODE_ENV === "production"; +// const isProduction = process.env.NODE_ENV === "production"; async function run() { const compiled = new Date().toUTCString().replace(/GMT/g, "UTC"); @@ -52,13 +52,11 @@ async function run() { } }); - if (isProduction) { - results.push({ - input, - output: [{ banner, file: path.join(basePath, types), format: "esm" }], - plugins: [dts()] - }); - } + results.push({ + input, + output: [{ banner, file: path.join(basePath, types), format: "esm" }], + plugins: [dts()] + }); }); return results; diff --git a/tsconfig.json b/tsconfig.json index 967dcc61..c76a23a9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,7 @@ }, "exclude": [ "node_modules", - "**/build/**" + "**/build/**", + "**/types/**" ] } From 476fa2ce8662769475f102e3ae7fbe30ae17fcc7 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:12:11 +0800 Subject: [PATCH 056/131] =?UTF-8?q?test:=20=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../juejin-helper/test/{test-numpuzz.js => test-numpuzz.ts} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename packages/juejin-helper/test/{test-numpuzz.js => test-numpuzz.ts} (96%) diff --git a/packages/juejin-helper/test/test-numpuzz.js b/packages/juejin-helper/test/test-numpuzz.ts similarity index 96% rename from packages/juejin-helper/test/test-numpuzz.js rename to packages/juejin-helper/test/test-numpuzz.ts index 9b841821..fbe54b6c 100644 --- a/packages/juejin-helper/test/test-numpuzz.js +++ b/packages/juejin-helper/test/test-numpuzz.ts @@ -1,4 +1,4 @@ -const JuejinHelper = require(".."); +import JuejinHelper from ".."; const mockCookie = `juejin-cookies`; From ddb0fde6ceef045f011a998b0a0caed3629a7638 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:12:38 +0800 Subject: [PATCH 057/131] =?UTF-8?q?test:=20=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/test/{test-sdk.js => test-sdk.ts} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename packages/juejin-helper/test/{test-sdk.js => test-sdk.ts} (80%) diff --git a/packages/juejin-helper/test/test-sdk.js b/packages/juejin-helper/test/test-sdk.ts similarity index 80% rename from packages/juejin-helper/test/test-sdk.js rename to packages/juejin-helper/test/test-sdk.ts index eec508e2..c50d7579 100644 --- a/packages/juejin-helper/test/test-sdk.js +++ b/packages/juejin-helper/test/test-sdk.ts @@ -1,11 +1,11 @@ -const JuejinHelper = require(".."); +import JuejinHelper from ".."; const mockCookie = `juejin-cookies`; async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); - console.log("user_id", juejin.getUser().user_id); + console.log("user_id", juejin.getUser()?.user_id); const sdk = juejin.sdk(); console.log("SDK设置", await sdk.slardarSDKSetting()); From 0a0e90d90ac391988fe47c63b3d0410419205396 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:34:24 +0800 Subject: [PATCH 058/131] =?UTF-8?q?chore(seagold):=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/src/seagold.ts | 112 ++++++++++++++---- .../test/{test-seagold.js => test-seagold.ts} | 4 +- 2 files changed, 92 insertions(+), 24 deletions(-) rename packages/juejin-helper/test/{test-seagold.js => test-seagold.ts} (84%) diff --git a/packages/juejin-helper/src/seagold.ts b/packages/juejin-helper/src/seagold.ts index a33f4f68..bbc1ad2d 100644 --- a/packages/juejin-helper/src/seagold.ts +++ b/packages/juejin-helper/src/seagold.ts @@ -2,6 +2,91 @@ import axios, { AxiosInstance } from "axios"; import JuejinHelper from "./index"; import jwt from "jsonwebtoken"; +interface Position { + x: number; + y: number; +} + +interface BlockData { + moveUp: number; + moveDown: number; + moveLeft: number; + moveRight: number; + jump: number; + loop: number; +} + +type MapData = number[]; + +interface GameCommandResult { + appendMapData: MapData; + blockData: BlockData; + curPos: Position; + gameDiamond: number; +} + +interface GameOverResult { + activity: string; + deep: number; + gameDiamond: number; // 当局获取 + originMapData: MapData; + passLine: Position[]; + picoDiamond: number; + realDiamond: number; // 真实获取 + todayDiamond: number; // 今日获取 + todayLimitDiamond: number; // 今日最大获取 +} + +interface GameStartResult { + seed: number; + gameId: string; + curPos: Position; + mapData: MapData; + blockData: BlockData; +} + +interface GameInfoResult { + activity: string; + gameStatus: 0 | 1; + userInfo: { + uid: string; + name: string; + todayDiamond: number; + todayLimitDiamond: number; + maxTodayDiamond: number; + badge: string; + }; + gameInfo: { + gameId: string; + roleId: 1 | 2 | 3; + gameDiamond: number; + isNew: boolean; + addRate: number; + mapData: MapData; + mapDeep: number; + blockData: BlockData; + curPos: Position; + commandList: any[]; + deep: number; + elementData: { pearl: number; jellyfish: number; pico: number; starfish: number; shell: number }; + remainDoubleStep: number; + isGameOver: boolean; + picoNode: unknown[]; + shopPosList: unknown[]; + passLine: string; + activity: string; + picoDiamond: number; + version: string; + } | null; +} + +interface GameLoginResult { + uid: string; + name: string; + isAuth: number; + isNew: number; +} + class Seagold { juejin: JuejinHelper; http: AxiosInstance; @@ -50,49 +135,32 @@ class Seagold { this.http.defaults.headers.Authorization = `Bearer ${token}`; } - async gameLogin() { + async gameLogin(): Promise { this.setToken(await this.juejin.makeToken()); return this.http.post("/sea-gold/user/login", { name: this.juejin.user?.user_name }); } - async gameInfo() { + async gameInfo(): Promise { return this.http.get("/sea-gold/home/info"); } - async gameStart(data: { roleId: 1 | 2 | 3 }) { + async gameStart(data?: { roleId: 1 | 2 | 3 }): Promise { const { roleId = 3 } = data || {}; return this.http.post("/sea-gold/game/start", { roleId }); } - async gameOver(data: { isButton: number }) { + async gameOver(data?: { isButton: number }): Promise { const { isButton = 1 } = data || {}; - // const result = { - // activity: "", - // deep: 3, - // gameDiamond: 34, // 当局获取 - // originMapData: [], - // passLine: [{ x: 0, y: 0 }, { x: 0, y: 1 }], - // picoDiamond: 0, - // realDiamond: 34, // 真实获取 - // todayDiamond: 34, // 今日获取 - // todayLimitDiamond: 1500 // 今日最大获取 - // }; return this.http.post("/sea-gold/game/over", { isButton }); } - async gameCommand(gameId: number, command = []) { - // const result = { - // appendMapData: [], - // blockData: { moveUp: 14, moveDown: 14, moveLeft: 2, moveRight: 5, jump: 3, loop: 3 }, - // curPos: { x: 0, y: 2 }, - // gameDiamond: 34 - // } + async gameCommand(gameId: number, command = []): Promise { const privateKey = "-----BEGIN EC PARAMETERS-----\nBggqhkjOPQMBBw==\n-----END EC PARAMETERS-----\n-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIDB7KMVQd+eeKt7AwDMMUaT7DE3Sl0Mto3LEojnEkRiAoAoGCCqGSM49\nAwEHoUQDQgAEEkViJDU8lYJUenS6IxPlvFJtUCDNF0c/F/cX07KCweC4Q/nOKsoU\nnYJsb4O8lMqNXaI1j16OmXk9CkcQQXbzfg==\n-----END EC PRIVATE KEY-----\n"; const token = jwt.sign( diff --git a/packages/juejin-helper/test/test-seagold.js b/packages/juejin-helper/test/test-seagold.ts similarity index 84% rename from packages/juejin-helper/test/test-seagold.js rename to packages/juejin-helper/test/test-seagold.ts index 2588101c..00b1ceb1 100644 --- a/packages/juejin-helper/test/test-seagold.js +++ b/packages/juejin-helper/test/test-seagold.ts @@ -1,11 +1,11 @@ -const JuejinHelper = require(".."); +import JuejinHelper from ".."; const mockCookie = `juejin-cookies`; async function run() { const juejin = new JuejinHelper(); await juejin.login(mockCookie); - console.log("user_id", juejin.getUser().user_id); + console.log("user_id", juejin.getUser()?.user_id); const seagold = juejin.seagold(); From b72a09c11fe2da1146659e893f8bfef082c280dc Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:36:55 +0800 Subject: [PATCH 059/131] =?UTF-8?q?chore:=20=E8=A1=A5=E5=85=85=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +--- packages/juejin-helper/package.json | 8 ++++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ccf84583..cb8996b3 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,7 @@ "scripts": { "dev": "cross-env NODE_ENV=development rollup -cw", "build": "cross-env NODE_ENV=production rollup -c", - "clean": "rimraf \"packages/*/{build,types}\"", - "test:login": "ts-node ./packages/juejin-helper/test/test-login.ts", - "test:growth": "ts-node ./packages/juejin-helper/test/test-growth.ts" + "clean": "rimraf \"packages/*/{build,types}\"" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index d38ac35d..25983a9f 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -8,6 +8,14 @@ "main": "build/juejin-helper.c.js", "module": "build/juejin-helper.esm.js", "types": "types/juejin-helper.d.ts", + "scripts": { + "test:login": "ts-node ./test/test-login.ts", + "test:growth": "ts-node ./test/test-growth.ts", + "test:seagold": "ts-node ./test/test-seagold.ts", + "test:bugfix": "ts-node ./test/test-bugfix.ts", + "test:numpuzz": "ts-node ./test/test-numpuzz.ts", + "test:sdk": "ts-node ./test/test-sdk.ts" + }, "files": [ "build", "types", From 6f4c77b444e1055493a36c8ce8ec8b18d81f0cbf Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 11:44:23 +0800 Subject: [PATCH 060/131] =?UTF-8?q?build:=20=E4=BF=AE=E6=94=B9=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rollup.config.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/rollup.config.js b/rollup.config.js index 1f9f9135..7fcb304f 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -41,12 +41,7 @@ async function run() { { banner, file: path.join(basePath, main), format: "cjs" }, { banner, file: path.join(basePath, module), format: "esm" } ], - plugins: [ - commonjs(/*{ - defaultIsModuleExports: true - }*/), - typescript() - ], + plugins: [commonjs(), typescript()], watch: { exclude: "node_modules" } From 6ff04920d9edcfd8b0cdf57ed184a779c1d38471 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 13:23:21 +0800 Subject: [PATCH 061/131] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dsdk=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E7=94=A8=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/src/sdk.ts | 13 ++++++++----- packages/juejin-helper/src/services/snssdk.ts | 9 +++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/juejin-helper/src/sdk.ts b/packages/juejin-helper/src/sdk.ts index 1432bdd6..0c7c8ad9 100644 --- a/packages/juejin-helper/src/sdk.ts +++ b/packages/juejin-helper/src/sdk.ts @@ -1,6 +1,7 @@ import { generateUUID, randomRangeNumber } from "./utils/index"; import JuejinHelper from "./index"; import snssdk from "./services/snssdk"; +import axios from "axios"; interface SDKSetting { cookieid: string; @@ -31,7 +32,7 @@ interface SDKEvent { } interface SDKListResult { - e: number; + e: 0 | -1 | -3; // 0 = ok } /** @@ -48,7 +49,10 @@ class Sdk { } async slardarSDKSetting(): Promise { - return snssdk.get("https://i.snssdk.com/slardar/sdk_setting?bid=juejin_web", { + return snssdk.get("https://i.snssdk.com/slardar/sdk_setting", { + params: { + bid: "juejin_web" + }, headers: { cookie: `MONITOR_WEB_ID=${this.juejin.cookie.get("MONITOR_WEB_ID")}` } @@ -104,11 +108,10 @@ class Sdk { } ]; - return snssdk.post("https://mcs.snssdk.com/list", { + return snssdk.post("https://mcs.snssdk.com/list", data, { headers: { host: "mcs.snssdk.com" - }, - data + } }); } diff --git a/packages/juejin-helper/src/services/snssdk.ts b/packages/juejin-helper/src/services/snssdk.ts index bbe703b4..ca18cbad 100644 --- a/packages/juejin-helper/src/services/snssdk.ts +++ b/packages/juejin-helper/src/services/snssdk.ts @@ -3,13 +3,10 @@ import axios from "axios"; const instance = axios.create({ baseURL: "", headers: { - // "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36", referer: "https://juejin.cn/", - origin: "https://juejin.cn", - "Sec-Fetch-Dest": "empty", - "Sec-Fetch-Mode": "cors", - "Sec-Fetch-Site": "cross-site" - } + origin: "https://juejin.cn" + }, + transformRequest: () => {} }); instance.interceptors.request.use( From 155f279a89809586dd48cd175710cc4766a951dd Mon Sep 17 00:00:00 2001 From: ZiuChen <457353192@qq.com> Date: Wed, 10 Aug 2022 14:56:39 +0800 Subject: [PATCH 062/131] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D`node-fetch`?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=87=B3`axios`=E7=9A=84=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/pushplus.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/utils/pushplus.js b/workflows/utils/pushplus.js index 18a68781..65b2be54 100644 --- a/workflows/utils/pushplus.js +++ b/workflows/utils/pushplus.js @@ -21,7 +21,7 @@ async function main({ subject, text, html }) { callbackUrl: "", timestamp: "" }) - .then(res => res.json()) + .then(res => res.data) .then(json => { console.log(`PushPlus推送结果: ` + json.msg); return json; From 6eec2f1b1ebbe897d38f8dce53119dacfb2505c6 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:42:25 +0800 Subject: [PATCH 063/131] Publish - juejin-helper@1.6.1 --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 25983a9f..230d5210 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From c7c32f104a8946fc496912ba5987b85db447e7c2 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:46:13 +0800 Subject: [PATCH 064/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lerna.json | 5 + package.json | 6 +- yarn.lock | 3371 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 3325 insertions(+), 57 deletions(-) create mode 100644 lerna.json diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..06cff9cd --- /dev/null +++ b/lerna.json @@ -0,0 +1,5 @@ +{ + "npmClient": "yarn", + "useWorkspaces": true, + "version": "independent" +} diff --git a/package.json b/package.json index cb8996b3..f21d75fa 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,10 @@ "scripts": { "dev": "cross-env NODE_ENV=development rollup -cw", "build": "cross-env NODE_ENV=production rollup -c", - "clean": "rimraf \"packages/*/{build,types}\"" + "clean": "rimraf \"packages/*/{build,types}\"", + "release:version": "lerna version --exact --force-publish", + "release:build": "yarn clean && yarn build", + "release:publish": "lerna publish from-package" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", @@ -21,6 +24,7 @@ "eslint-config-next": "^12.1.5", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", + "lerna": "^5.4.0", "prettier": "^2.6.2", "rimraf": "^3.0.2", "rollup": "^2.77.2", diff --git a/yarn.lock b/yarn.lock index 641a0454..e8a62c0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -65,6 +65,11 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@gar/promisify@^1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@humanwhocodes/config-array@^0.10.4": version "0.10.4" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" @@ -84,6 +89,16 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@hutson/parse-repository-url@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" + integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" @@ -102,6 +117,689 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@lerna/add@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/add/-/add-5.4.0.tgz#a6182f5c2a5e8615cf19042099152a8a13eaa3e3" + integrity sha512-o4JiZgEzFL7QXC2hhhraSjfhd9y/YB/07KFjVApEUDpsE2g7hRPtmKMulTjVi8vTkzVuhG87t2ZfJ3HOywqvSQ== + dependencies: + "@lerna/bootstrap" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/filter-options" "5.4.0" + "@lerna/npm-conf" "5.4.0" + "@lerna/validation-error" "5.4.0" + dedent "^0.7.0" + npm-package-arg "8.1.1" + p-map "^4.0.0" + pacote "^13.6.1" + semver "^7.3.4" + +"@lerna/bootstrap@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.4.0.tgz#612a3f7d5b3a6e68990946912119180f98d5c642" + integrity sha512-XEusPF14qH0QVRkYwti59N8IG1yS0QvkqhSGxftDT+dbvbL8E3E73cwUVyb7/vgUefwEkw/Ya1yMytsJv3Hj+Q== + dependencies: + "@lerna/command" "5.4.0" + "@lerna/filter-options" "5.4.0" + "@lerna/has-npm-version" "5.4.0" + "@lerna/npm-install" "5.4.0" + "@lerna/package-graph" "5.4.0" + "@lerna/pulse-till-done" "5.4.0" + "@lerna/rimraf-dir" "5.4.0" + "@lerna/run-lifecycle" "5.4.0" + "@lerna/run-topologically" "5.4.0" + "@lerna/symlink-binary" "5.4.0" + "@lerna/symlink-dependencies" "5.4.0" + "@lerna/validation-error" "5.4.0" + "@npmcli/arborist" "5.3.0" + dedent "^0.7.0" + get-port "^5.1.1" + multimatch "^5.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + +"@lerna/changed@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/changed/-/changed-5.4.0.tgz#145b27a91b474f6bfd561cc06ab688c1c36fd659" + integrity sha512-ZxII7biEQFdbZG3scjacOP2/qQOuu0ob3OiPW/+Ci24aEG/j1bFGhBJdoNdfdD0sJ92q8TTums2BRXDib9GvzA== + dependencies: + "@lerna/collect-updates" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/listable" "5.4.0" + "@lerna/output" "5.4.0" + +"@lerna/check-working-tree@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.4.0.tgz#9d0c3cfc3d3e1034b488e987dcb47f06715dde18" + integrity sha512-O3bcNnuZfOK8KHRQcwaSjAp/DHT/GD96sge/a7ZfnqKiKhyO94ZztznrOvCrb5Cuz4NShupD05PpyQe+sBuTLA== + dependencies: + "@lerna/collect-uncommitted" "5.4.0" + "@lerna/describe-ref" "5.4.0" + "@lerna/validation-error" "5.4.0" + +"@lerna/child-process@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.4.0.tgz#25ec73f76f4142845f07bd5fc694b291b94b642a" + integrity sha512-SPjlfuB6LesAG3NCaDalEnpsbrpEDf0RMYGC1Wj6xGmmVEvWai8cenxCNM5xhpixSGjEF6dmLVI1OHFS9JovUQ== + dependencies: + chalk "^4.1.0" + execa "^5.0.0" + strong-log-transformer "^2.1.0" + +"@lerna/clean@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/clean/-/clean-5.4.0.tgz#2ebab8b2980652f302ebd948b0d4bccc64bfad0e" + integrity sha512-prhpUQ4kTkB/uti2DSuqfgRjUA3bz6aBrfdA5VS5QW6oTU8+F69uWjitXNt2ph/cVUJ+js8VZdbU0wkUFQasKg== + dependencies: + "@lerna/command" "5.4.0" + "@lerna/filter-options" "5.4.0" + "@lerna/prompt" "5.4.0" + "@lerna/pulse-till-done" "5.4.0" + "@lerna/rimraf-dir" "5.4.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + p-waterfall "^2.1.1" + +"@lerna/cli@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/cli/-/cli-5.4.0.tgz#c18a2afcb1f03466a96d8116aa28d54e06ede343" + integrity sha512-usvZ3yAaMBzb249UYZuqMRoT6VboBSzWG7iEvXVxZDoFgShHrZ8NJAOMJaStRyVkizci+PTK74FRgpX+hKOEHg== + dependencies: + "@lerna/global-options" "5.4.0" + dedent "^0.7.0" + npmlog "^6.0.2" + yargs "^16.2.0" + +"@lerna/collect-uncommitted@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.4.0.tgz#783324309560133bd1572ca555aff197921f324e" + integrity sha512-uKnL81tsfasSzYxqTCybn0GqehKUid47QzTJkKV1IXzfHpYLd4LBztvkbZFM2QN9Avl+hWYbTntSF5Iecg2fAg== + dependencies: + "@lerna/child-process" "5.4.0" + chalk "^4.1.0" + npmlog "^6.0.2" + +"@lerna/collect-updates@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.4.0.tgz#03725f55099ad61c598e2e2929684e11a1dc3a7d" + integrity sha512-J1YPygeqCJo9IKLg6G2YY0OJPNDz6/n4VgJTrkMQH3B3WyodXdmdSv4xKY1pG9Cy7mXzCsdNuZzvN6qM1OgErg== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/describe-ref" "5.4.0" + minimatch "^3.0.4" + npmlog "^6.0.2" + slash "^3.0.0" + +"@lerna/command@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/command/-/command-5.4.0.tgz#53ee056304b5678b5a70f3cf4976e73c16425082" + integrity sha512-MR9zRWZJnr6wXcOJnuYjXScxiDuFt4jH+yZuqDf3EBQGIhfhSRoujtjVGmfe0/4P4TM4VdTqqangt63lclsLzw== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/package-graph" "5.4.0" + "@lerna/project" "5.4.0" + "@lerna/validation-error" "5.4.0" + "@lerna/write-log-file" "5.4.0" + clone-deep "^4.0.1" + dedent "^0.7.0" + execa "^5.0.0" + is-ci "^2.0.0" + npmlog "^6.0.2" + +"@lerna/conventional-commits@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.4.0.tgz#12e31222b951837c3b8543cbe4c44247ac7b60df" + integrity sha512-rrFFIiKWhkyghDC+aGdfEw1F78MWB+KerpBO1689nRrVpXTTqV9ZKHpn0YeTGhi+T1e/igtdJRlNjRCaXkl79Q== + dependencies: + "@lerna/validation-error" "5.4.0" + conventional-changelog-angular "^5.0.12" + conventional-changelog-core "^4.2.4" + conventional-recommended-bump "^6.1.0" + fs-extra "^9.1.0" + get-stream "^6.0.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + semver "^7.3.4" + +"@lerna/create-symlink@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.4.0.tgz#8b96d4fdada6cf3726353b9fe380720e6e99889f" + integrity sha512-DQuxmDVYL4S/VAXD8x/8zKapvGm4zN2sYB0D9yc2hTFeM5O4P7AXO0lYBE8XayZN7r2rBNPDYttv8Lv2IvN74A== + dependencies: + cmd-shim "^5.0.0" + fs-extra "^9.1.0" + npmlog "^6.0.2" + +"@lerna/create@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/create/-/create-5.4.0.tgz#14dd702727a07ed20d3f7e9b69c8bcdb31da3602" + integrity sha512-yHFP7DQD33xRLojlofqe+qu07BvRpwf+09dTKFHtarXqoPRDRJJ0e2/MRCi3StJmOLJCw7Gut3k0rdnFr3No6g== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/npm-conf" "5.4.0" + "@lerna/validation-error" "5.4.0" + dedent "^0.7.0" + fs-extra "^9.1.0" + globby "^11.0.2" + init-package-json "^3.0.2" + npm-package-arg "8.1.1" + p-reduce "^2.1.0" + pacote "^13.6.1" + pify "^5.0.0" + semver "^7.3.4" + slash "^3.0.0" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + whatwg-url "^8.4.0" + yargs-parser "20.2.4" + +"@lerna/describe-ref@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.4.0.tgz#15bffe6ef0841db82dab795a21a91ba15cb1dc2f" + integrity sha512-OSy3U8bEm8EmPtoeoej4X02cUihqTJlG/JXyiJdEEMdWDwT3DLDLrBxo4/HAfB3hT5bSD96EabGgmM6GrVhiWw== + dependencies: + "@lerna/child-process" "5.4.0" + npmlog "^6.0.2" + +"@lerna/diff@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/diff/-/diff-5.4.0.tgz#54747d1c4ae30505500c35bc38124a1150683127" + integrity sha512-IxJltmhpkLy9Te6EV1fHu5Yx83HLMrNT2v2TIu+k/EdM/fW6wt+Pal34bsROjGEj70LPI64LWj/FKvdaKXe36A== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/validation-error" "5.4.0" + npmlog "^6.0.2" + +"@lerna/exec@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/exec/-/exec-5.4.0.tgz#cee3bb7acaaee5a42aecff0bf6378a60aac09425" + integrity sha512-hgAR5oDMVJUuqN8Fg04ibnzC4cj4YZzIGOfSjYSYjuC/zE53fOSRwEdVDKz3+Yxlnqrz4XyxbOnOlYTFgk6DaA== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/filter-options" "5.4.0" + "@lerna/profiler" "5.4.0" + "@lerna/run-topologically" "5.4.0" + "@lerna/validation-error" "5.4.0" + p-map "^4.0.0" + +"@lerna/filter-options@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.4.0.tgz#c1f53a705c8256d599b7cf72b75b1e0945673ff6" + integrity sha512-qK8863UrVcgKJYoZ0dKs82uXIeHhntMoCcqWXOUa1zHP4Fwuz0nGhVGWIO2q4GC8A4HoeduN6vjrLr2d6rsEdw== + dependencies: + "@lerna/collect-updates" "5.4.0" + "@lerna/filter-packages" "5.4.0" + dedent "^0.7.0" + npmlog "^6.0.2" + +"@lerna/filter-packages@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.4.0.tgz#4eff648b6a31f685593577c36c8b00db1a1e9c56" + integrity sha512-KAERXVJM5QCw0wyZnSQnHerY6u4q8h37r5yft0HJOSqxIMmkambrtrXplOQCpAxOB+CASQG6sfVB7F7wvI0nkQ== + dependencies: + "@lerna/validation-error" "5.4.0" + multimatch "^5.0.0" + npmlog "^6.0.2" + +"@lerna/get-npm-exec-opts@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.4.0.tgz#424946fba5cccf60ca28de4b1991c5405d4029df" + integrity sha512-plBDyetGHaYObxKnL2gsCNRTn7lTXTFsA8/wiJl6VEJNeEwvZ0efFopY1qcwXx+Skfwi4whqmAojWyoLzVoCIA== + dependencies: + npmlog "^6.0.2" + +"@lerna/get-packed@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.4.0.tgz#8d4eabdc4c92f7bf29724146b3af1ff02146841b" + integrity sha512-bgPZGx2hbbjxaY0sRNcmDjWGR8HEoU/ORXrFiPU/YS7Xp4Yuf8GixT5QrYFT/VdZOqDeaBtFxndVPbmtK6qFRA== + dependencies: + fs-extra "^9.1.0" + ssri "^9.0.1" + tar "^6.1.0" + +"@lerna/github-client@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.4.0.tgz#4de39f81c287c6138f1a75d55ede88591e0be846" + integrity sha512-zI/rR5+DHljRwvq1l1LWlola2mJrVkv+0/rIg8wVWfcosIbYQMeuWoJ4zKTZmbOuQqwFpM3vipSHNj8oyik/xA== + dependencies: + "@lerna/child-process" "5.4.0" + "@octokit/plugin-enterprise-rest" "^6.0.1" + "@octokit/rest" "^19.0.3" + git-url-parse "^12.0.0" + npmlog "^6.0.2" + +"@lerna/gitlab-client@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.4.0.tgz#7bd9915e06cfe188828f78a75da4168b9c7c8516" + integrity sha512-OHEnRgzzOfzCtpl+leXlh3jIJZ/mho69vNUEDfSviixTmZMbw4626TYU41FFjZZqmijxl2rYEyJCxIaTdIKdvg== + dependencies: + node-fetch "^2.6.1" + npmlog "^6.0.2" + whatwg-url "^8.4.0" + +"@lerna/global-options@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.4.0.tgz#fd1acc17258b021c966ec7ce1e06311e2f235f60" + integrity sha512-6YjlNNCyk/xjkdBkDkrrk5zBvT1lfyyXP6lyi2b3zcmtP7zMVkSL6Z+NUh857uFJsFYMMQ2SkGczQBmHfSSg7Q== + +"@lerna/has-npm-version@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.4.0.tgz#5e6567386d5c6b6c60e8c4c1f606eaa954604cbb" + integrity sha512-L9TTF82NgOmau8kGBhc0UnMdlyVkbQxlz1IbJEzQzJcc5oYB8ppHe4Wbm25D1p846U7wzZeRMxSC3sWO8ap+FA== + dependencies: + "@lerna/child-process" "5.4.0" + semver "^7.3.4" + +"@lerna/import@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/import/-/import-5.4.0.tgz#a99bc13ead71fe4f123ff7b268645732a57236ae" + integrity sha512-UOwfZWvda+lMTDMt/pZmKBtbLKWnBOjrd0C7s7IPDNIdEYohV+LQEaDTuFFpwwFwRhr8RO2fLicWvlt4YJOccQ== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/prompt" "5.4.0" + "@lerna/pulse-till-done" "5.4.0" + "@lerna/validation-error" "5.4.0" + dedent "^0.7.0" + fs-extra "^9.1.0" + p-map-series "^2.1.0" + +"@lerna/info@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/info/-/info-5.4.0.tgz#0076a05ec8fda31d8dc19b8843b8c2b29d9ce538" + integrity sha512-MoNredUnlDjm12by7h5it3XLeHqqIhSjYnmjfQuIhB9r37L/grxEcZ+YLKVqvz3BGGFX342jEfi8uE3eACQUgg== + dependencies: + "@lerna/command" "5.4.0" + "@lerna/output" "5.4.0" + envinfo "^7.7.4" + +"@lerna/init@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/init/-/init-5.4.0.tgz#13af001a5a13a92c6b761c0aebc511307d61b70f" + integrity sha512-lCfokfqFKL6Iqg8KDIlCSoNtcbvheUZ+AKwd9wHRPHn1xvI3BQRukkai83VcCShpsVqAkx1r8KjCO9f3I74K9Q== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/project" "5.4.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + write-json-file "^4.3.0" + +"@lerna/link@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/link/-/link-5.4.0.tgz#eb92414ac78e3d4571965c1f1be9725eb3886a3b" + integrity sha512-nUdpVIq0WHkQ2bWyjd+Fg/0iAEIZpwqZidpJuvcvS8FhvCVUryF2zRtd4wSSfQpzuoTWxDzGg6Ka2QwKxWOq6w== + dependencies: + "@lerna/command" "5.4.0" + "@lerna/package-graph" "5.4.0" + "@lerna/symlink-dependencies" "5.4.0" + p-map "^4.0.0" + slash "^3.0.0" + +"@lerna/list@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/list/-/list-5.4.0.tgz#86c34925d71fcc87df69c3b3394afb8c8fe8f409" + integrity sha512-w+gqkcl9mSIAnImiGVJJUiJ4sJx2Ovko2heLQpcNzUsc39ilcvb5S1YTnfhneJH735EckbF1eXzG1I5V+znaBw== + dependencies: + "@lerna/command" "5.4.0" + "@lerna/filter-options" "5.4.0" + "@lerna/listable" "5.4.0" + "@lerna/output" "5.4.0" + +"@lerna/listable@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/listable/-/listable-5.4.0.tgz#352cb301e7b7a5e52d32dfa795fab2e2986cacb5" + integrity sha512-ABhInXVY+i9PhCiMxH/4JZnsn5SYriAiCOzyZG+6PX4TSDt7wiE6QWI5tfEyBJmPLEvhxjIeOph0cVvcnxf/gg== + dependencies: + "@lerna/query-graph" "5.4.0" + chalk "^4.1.0" + columnify "^1.6.0" + +"@lerna/log-packed@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.4.0.tgz#bd3cd24c700590286b7248c218139322e607c3df" + integrity sha512-2l9wrDDdG+vL+k8iIsQ+8EgLn3YnLMfAnK1TyHRaEFJyHWWPK+wCYln793s6RdOG0rJmCOdVwGvGoO3Dpp4jiw== + dependencies: + byte-size "^7.0.0" + columnify "^1.6.0" + has-unicode "^2.0.1" + npmlog "^6.0.2" + +"@lerna/npm-conf@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.4.0.tgz#d75896d46586ab10094a3760df9dc348a3918367" + integrity sha512-xCzrg8s8X/SGoELdtstjjVV471r3mF6r1gdQzdQ9Y+Gql78pOp2flGtERyhZlN40fDTsfR+MKpk9mI/3/+Wffg== + dependencies: + config-chain "^1.1.12" + pify "^5.0.0" + +"@lerna/npm-dist-tag@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.4.0.tgz#110dee7e06c6d9a1a477fd00b75777f9cc0bde7f" + integrity sha512-0MXkt6WhEI9pJOtFaQmKlkaBm9IZHx9KK6BtKlC1giwE/czur2ke19PUMmH+b078EtyhnwrsEq8VB4pMidmXpw== + dependencies: + "@lerna/otplease" "5.4.0" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + +"@lerna/npm-install@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.4.0.tgz#1bf4b2c5f9eff7389d58fe21844d6c738efe82a8" + integrity sha512-scYWjKyb67Ov6VMyDFUUPzyGJWuD8vBgOAshzJMG1lGzfcUTOyAA4VJohOpJHVgNaRL3YjJa2AekqTzX42zygQ== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/get-npm-exec-opts" "5.4.0" + fs-extra "^9.1.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + signal-exit "^3.0.3" + write-pkg "^4.0.0" + +"@lerna/npm-publish@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.4.0.tgz#ccf81d1fc4007a6766dcde1cfaddb6a0a157c4ac" + integrity sha512-PQ49FWnHOXEWLwREzD3XYZAUUxssGqHLh/lC9etGC7xGjHreAcUM89GuuG8JiSdCEuNNnUXO6oCYjJKWpfWa5A== + dependencies: + "@lerna/otplease" "5.4.0" + "@lerna/run-lifecycle" "5.4.0" + fs-extra "^9.1.0" + libnpmpublish "^6.0.4" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + pify "^5.0.0" + read-package-json "^5.0.1" + +"@lerna/npm-run-script@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.4.0.tgz#efccba87b1abbca0ab831de3deaa604f3a75d48f" + integrity sha512-VkEmTioVTyzGKpKJ9fD5NYww5eoUAqWwvFeI5lCGN0eRd7AyQrdRu8cnHpg+bRW1qzE7GReDWdB6WKQ9gBxc4w== + dependencies: + "@lerna/child-process" "5.4.0" + "@lerna/get-npm-exec-opts" "5.4.0" + npmlog "^6.0.2" + +"@lerna/otplease@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.4.0.tgz#791942b669f2d6b861fa505dc870fa2f5006b574" + integrity sha512-0chUZ+3CLirEzhXogKFFJ8AftZbrAEr2Fm2EErP77T5ml7eCwuvHgXkQvvHxYJnkO6bJ72cNPmsZeOx+2fhbow== + dependencies: + "@lerna/prompt" "5.4.0" + +"@lerna/output@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/output/-/output-5.4.0.tgz#9aec36e2424d58671c30034b1d932b335f3f8a5e" + integrity sha512-tnVjGDCyugbEvS1XNihwcLdOxGTGbHInnhKg9OtPgDX4dwv40Zliyrk1VyjJGwYiSoblznut9wQb5zXNOOmBQg== + dependencies: + npmlog "^6.0.2" + +"@lerna/pack-directory@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.4.0.tgz#6b07f1bc3e6d695870eacd1908cc7d7ab31ef546" + integrity sha512-Yx9RwPYlfjSynhFBdGqI0KV1orlj8h2W2y+uSWUkdKbBFeHDwO/eJ879i3ZWsY/aU+GhWZWiC+f4jG1wAEs+RQ== + dependencies: + "@lerna/get-packed" "5.4.0" + "@lerna/package" "5.4.0" + "@lerna/run-lifecycle" "5.4.0" + "@lerna/temp-write" "5.4.0" + npm-packlist "^5.1.1" + npmlog "^6.0.2" + tar "^6.1.0" + +"@lerna/package-graph@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.4.0.tgz#dc0fab8456fd9990d9efa606a7ce510806a4e94c" + integrity sha512-oBmwR5BVfjLpXVFQ7z37DbhQpQPWCm+KlrcRv+R1IQl3kaJEwIOx/ww9FPGOx3r1Uu9cEIrjCcWr6bjGLEcejw== + dependencies: + "@lerna/prerelease-id-from-version" "5.4.0" + "@lerna/validation-error" "5.4.0" + npm-package-arg "8.1.1" + npmlog "^6.0.2" + semver "^7.3.4" + +"@lerna/package@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/package/-/package-5.4.0.tgz#98cc92ba74651045ac6ffa8df671eb266ef3241e" + integrity sha512-lfj4AmN7STzWR+ML5FKhVjnG/tBYBmUWFP2D0WP7jaBCtvA4YfhTRX8bnIPTB6QoYrJl72cPx7eTxGD/VO0ZKA== + dependencies: + load-json-file "^6.2.0" + npm-package-arg "8.1.1" + write-pkg "^4.0.0" + +"@lerna/prerelease-id-from-version@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.4.0.tgz#0f7b548254c09a1e79716cac13c6b8ad9457240d" + integrity sha512-sbVnPq4dlY2VC3xKer5eBo9kevsQoddqQvLV4x+skeFkk50+faB9SH7J9n0zHm9PbxfrJX1TtL1EuxzHcFMKTg== + dependencies: + semver "^7.3.4" + +"@lerna/profiler@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.4.0.tgz#c300661a4692be6f3359530054f8ce32a0a0503c" + integrity sha512-0wo43ejOjQHeJ2cEU2Pp4//2lxjsi4ioQamkelu8YISRCC0ojGFB4ra22osj4/jRfstJ0DiaV8edrOht1TXJIA== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + upath "^2.0.1" + +"@lerna/project@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/project/-/project-5.4.0.tgz#bd1bbd5bfce6b05decda1e97e06f27bd098b64f9" + integrity sha512-lr8+EybiRNmS6ecDtFmXzEUNcOepbvku9oxBc47CtvXtCcLdDLG4bI9TXrN4lUO2vJajXTSlhN7sD1LVUkcYdg== + dependencies: + "@lerna/package" "5.4.0" + "@lerna/validation-error" "5.4.0" + cosmiconfig "^7.0.0" + dedent "^0.7.0" + dot-prop "^6.0.1" + glob-parent "^5.1.1" + globby "^11.0.2" + load-json-file "^6.2.0" + npmlog "^6.0.2" + p-map "^4.0.0" + resolve-from "^5.0.0" + write-json-file "^4.3.0" + +"@lerna/prompt@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.4.0.tgz#719fdbcd37ad6adaa974cdaf7f3bad491ae673e0" + integrity sha512-Kuw/YpQLwrbKx9fp/wWXi8jiZ8mqmpE7UUVWcFNed0oSHrlUpIhRXPSSTEHsX983Iepj65YL1O6Zffr3t/vP/Q== + dependencies: + inquirer "^8.2.4" + npmlog "^6.0.2" + +"@lerna/publish@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/publish/-/publish-5.4.0.tgz#bb8d6f68a72fb889050e8043567f67d1fc933723" + integrity sha512-C+p3K6cKLML4L/7xkmPAafmBdPlltjZtsKuUKSKKnt/FrX4giv81Kp0FQ0mAps0JN1A++ni0AOJAxlBowZs1Pg== + dependencies: + "@lerna/check-working-tree" "5.4.0" + "@lerna/child-process" "5.4.0" + "@lerna/collect-updates" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/describe-ref" "5.4.0" + "@lerna/log-packed" "5.4.0" + "@lerna/npm-conf" "5.4.0" + "@lerna/npm-dist-tag" "5.4.0" + "@lerna/npm-publish" "5.4.0" + "@lerna/otplease" "5.4.0" + "@lerna/output" "5.4.0" + "@lerna/pack-directory" "5.4.0" + "@lerna/prerelease-id-from-version" "5.4.0" + "@lerna/prompt" "5.4.0" + "@lerna/pulse-till-done" "5.4.0" + "@lerna/run-lifecycle" "5.4.0" + "@lerna/run-topologically" "5.4.0" + "@lerna/validation-error" "5.4.0" + "@lerna/version" "5.4.0" + fs-extra "^9.1.0" + libnpmaccess "^6.0.3" + npm-package-arg "8.1.1" + npm-registry-fetch "^13.3.0" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + pacote "^13.6.1" + semver "^7.3.4" + +"@lerna/pulse-till-done@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.4.0.tgz#5221927fa1acc25714fcb5c2cd70872770f3ed63" + integrity sha512-d3f8da0J+fZg/EXFVih1cdTfYCn74l1aJ6vEH18CdDlylOLONRgGWliMLnrQMssSVHu6AF1BSte27yfJ6sfOfw== + dependencies: + npmlog "^6.0.2" + +"@lerna/query-graph@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.4.0.tgz#20f7dea4997aac4b685c1336ca731d07da9ccd04" + integrity sha512-CC6wi63C9r/S7mJ1ENsBGz1O76Rog1LRTBqiLUlVsJxVf+X+WboIVcouoESNDeudxJ0Fl0sFdvRVZ5Q2Bt7xKw== + dependencies: + "@lerna/package-graph" "5.4.0" + +"@lerna/resolve-symlink@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.4.0.tgz#ce88674ea1d049cc750755939a5e1303b1beded5" + integrity sha512-shPld+YY4lf7teHkxTBBUjTZ7RNvqALZ8Nc5y1xvuHmrornGqwDeFZGbu2OZgc409HNWUheZHLluSrUIP/mn0Q== + dependencies: + fs-extra "^9.1.0" + npmlog "^6.0.2" + read-cmd-shim "^3.0.0" + +"@lerna/rimraf-dir@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.4.0.tgz#6e81edb5722dd9003d2ef3c9639bc9287234f2d4" + integrity sha512-QGFlQUcdQaUAs3mXMOvbb4WU0tuinTDVoH+1ztIJf5vj/NAHWTH/H0KxPGIJJUODtyuaNCufU7LDXkQMOORGyQ== + dependencies: + "@lerna/child-process" "5.4.0" + npmlog "^6.0.2" + path-exists "^4.0.0" + rimraf "^3.0.2" + +"@lerna/run-lifecycle@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.4.0.tgz#c42bf12c44c4b4df96b20db19b3934e2db6d5abd" + integrity sha512-d+XO8X5Kiuv+w65wrU8thrObJwgODqA12xLW7kCLnh20njTWimOfjq/xsbSbSwRr5es8uHtK7Vqns+nBVSTeEw== + dependencies: + "@lerna/npm-conf" "5.4.0" + "@npmcli/run-script" "^4.1.7" + npmlog "^6.0.2" + p-queue "^6.6.2" + +"@lerna/run-topologically@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.4.0.tgz#f0a3254553022fd8812a16cd25a260e97f211af7" + integrity sha512-wwelSpQT/ZDornu0+idYKfY1q7ggIOMiXrGq9nDshbtgPwme/CMEr5SPur80oR5Z6Pc2Fm7cHtxI2je7YOuqKA== + dependencies: + "@lerna/query-graph" "5.4.0" + p-queue "^6.6.2" + +"@lerna/run@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/run/-/run-5.4.0.tgz#6373fdbe950d24f56305dd89946f9966ab80113b" + integrity sha512-UgdsV3dvdmSLoQIrh9Wxb5kiTbwrQP7dN5MOADfH+DhO+/pktBsp8KtLr1g+y+nNyHc2LRkAL+E/KozLATbKSA== + dependencies: + "@lerna/command" "5.4.0" + "@lerna/filter-options" "5.4.0" + "@lerna/npm-run-script" "5.4.0" + "@lerna/output" "5.4.0" + "@lerna/profiler" "5.4.0" + "@lerna/run-topologically" "5.4.0" + "@lerna/timer" "5.4.0" + "@lerna/validation-error" "5.4.0" + p-map "^4.0.0" + +"@lerna/symlink-binary@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.4.0.tgz#33dfe2ba92ed3295c3a08710c9964dedde493d2a" + integrity sha512-DqwgjBywI8HgBaQYJjHzLkJ6IWspcL8rb8zgo4O/HSC7NJDTq3ir9S1HkzixxszL/G4Zp6mfqj0AGfzLYhjKLA== + dependencies: + "@lerna/create-symlink" "5.4.0" + "@lerna/package" "5.4.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + +"@lerna/symlink-dependencies@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.4.0.tgz#49d616b23750583fb6ffb0b30c07e23397948ba9" + integrity sha512-iKM4dykV0NHCsXEchgEsxtWur1OQ2glLXmJb02QHPsFdqLaAgl0F77+dVPfN16I743lgf52sz2rqIcVo7VeJrg== + dependencies: + "@lerna/create-symlink" "5.4.0" + "@lerna/resolve-symlink" "5.4.0" + "@lerna/symlink-binary" "5.4.0" + fs-extra "^9.1.0" + p-map "^4.0.0" + p-map-series "^2.1.0" + +"@lerna/temp-write@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.4.0.tgz#6aa4db0019e45a74f8d4e8ca06644e2a86d93202" + integrity sha512-dojKAYCWhOmUw4fnJpruGfgBA9RMBW5mVkKJ5HcB2uruJza92ffV9SRADe5bnrIZDu4/mh/6lPU0+rVHvJhWsA== + dependencies: + graceful-fs "^4.1.15" + is-stream "^2.0.0" + make-dir "^3.0.0" + temp-dir "^1.0.0" + uuid "^8.3.2" + +"@lerna/timer@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/timer/-/timer-5.4.0.tgz#0915ec1f22c6b16157fef91c2364b464d41773bb" + integrity sha512-Ow070AbPVIYO5H1m0B85VGrQtYPa47s4cbA9gj9iU6VBVnw/F7tDN0e/QfGhYgb4atwc046WoZmUQYyD7w9l/g== + +"@lerna/validation-error@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.4.0.tgz#ede63fccdb7ef8666fefb47151a475fd976afb34" + integrity sha512-H/CiOgMlZO0QlGbVGk1iVKDbtWKV0gUse9XwP7N15qroCJU2d6u0XUJS5eCTNQ/JrLdFCtEdzg3uPOHbpIOykw== + dependencies: + npmlog "^6.0.2" + +"@lerna/version@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/version/-/version-5.4.0.tgz#61ef5032e5c73ee271f2c97d925503c92d37db73" + integrity sha512-SZZuSYkmMb/QKDCMM2IBxX2O5RN7O18ZWi75SCRQ+MZHXt6Yl4VC/l16TBtM8Nlf3ZmBP20sIWbm5UqD9f3FjQ== + dependencies: + "@lerna/check-working-tree" "5.4.0" + "@lerna/child-process" "5.4.0" + "@lerna/collect-updates" "5.4.0" + "@lerna/command" "5.4.0" + "@lerna/conventional-commits" "5.4.0" + "@lerna/github-client" "5.4.0" + "@lerna/gitlab-client" "5.4.0" + "@lerna/output" "5.4.0" + "@lerna/prerelease-id-from-version" "5.4.0" + "@lerna/prompt" "5.4.0" + "@lerna/run-lifecycle" "5.4.0" + "@lerna/run-topologically" "5.4.0" + "@lerna/temp-write" "5.4.0" + "@lerna/validation-error" "5.4.0" + chalk "^4.1.0" + dedent "^0.7.0" + load-json-file "^6.2.0" + minimatch "^3.0.4" + npmlog "^6.0.2" + p-map "^4.0.0" + p-pipe "^3.1.0" + p-reduce "^2.1.0" + p-waterfall "^2.1.1" + semver "^7.3.4" + slash "^3.0.0" + write-json-file "^4.3.0" + +"@lerna/write-log-file@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.4.0.tgz#cb207187ce86e6c4fb46e971d2ea355c7ca53d20" + integrity sha512-Zj2rRG5HasQNOaVmOaSSAn6wZ4esJSJ/fI/IYK1yCvx9dMq5X0BAiVBWijXW7V1xlwJY0TDeI82p36HS09dFLQ== + dependencies: + npmlog "^6.0.2" + write-file-atomic "^4.0.1" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -143,6 +841,268 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/arborist@5.3.0": + version "5.3.0" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" + integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== + dependencies: + "@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/run-script" "^4.1.3" + bin-links "^3.0.0" + cacache "^16.0.6" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.0" + 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/fs@^2.1.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz#c0c480b03450d8b9fc086816a50cb682668a48bf" + integrity sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.1" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz#049b99b1381a2ddf7dc56ba3e91eaf76ca803a8d" + integrity sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A== + dependencies: + "@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@^1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.3": + version "2.0.4" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" + integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + dependencies: + "@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@^3.0.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" + integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz#417f585016081a0184cef3e38902cd917a9bbd02" + integrity sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/package-json@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": + version "4.2.0" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz#2c25758f80831ba138afe25225d456e89acedac3" + integrity sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA== + dependencies: + "@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" + +"@nrwl/cli@14.5.4": + version "14.5.4" + resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.4.tgz#86ac4fbcd1bf079b67c420376cf696b68fcc1200" + integrity sha512-UYr14hxeYV8p/zt6D6z33hljZJQROJAVxSC+mm72fyVvy88Gt0sQNLfMmOARXur0p/73PSLM0jJ2Sr7Ftsuu+A== + dependencies: + nx "14.5.4" + +"@nrwl/tao@14.5.4": + version "14.5.4" + resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.4.tgz#a67097d424bcbf7073a1944ea1a0209c4f4f859c" + integrity sha512-a2GCuSE8WghjehuU3GVO63KZEnZXXQiqEg137yN/Na+PxwSu68XeaX53SLyzRskTV120YwBBy1YCTNzAZxxsjg== + dependencies: + nx "14.5.4" + +"@octokit/auth-token@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz#6f22c5fc56445c496628488ba6810131558fa4a9" + integrity sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^4.0.0": + version "4.0.4" + resolved "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz#335d9b377691e3264ce57a9e5a1f6cda783e5838" + integrity sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ== + dependencies: + "@octokit/auth-token" "^3.0.0" + "@octokit/graphql" "^5.0.0" + "@octokit/request" "^6.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz#be758a1236d68d6bbb505e686dd50881c327a519" + integrity sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz#2cc6eb3bf8e0278656df1a7d0ca0d7591599e3b3" + integrity sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^12.11.0": + version "12.11.0" + resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" + integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== + +"@octokit/plugin-enterprise-rest@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" + integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== + +"@octokit/plugin-paginate-rest@^3.0.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz#86f8be759ce2d6d7c879a31490fd2f7410b731f0" + integrity sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA== + dependencies: + "@octokit/types" "^6.41.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^6.0.0": + version "6.2.0" + resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz#c06359d2f94436f8c67d345093cb02dedd31d974" + integrity sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw== + dependencies: + "@octokit/types" "^6.41.0" + deprecation "^2.3.1" + +"@octokit/request-error@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz#f527d178f115a3b62d76ce4804dd5bdbc0270a81" + integrity sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.0" + resolved "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz#9c25606df84e6f2ccbcc2c58e1d35438e20b688b" + integrity sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q== + dependencies: + "@octokit/endpoint" "^7.0.0" + "@octokit/request-error" "^3.0.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + +"@octokit/rest@^19.0.3": + version "19.0.3" + resolved "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz#b9a4e8dc8d53e030d611c053153ee6045f080f02" + integrity sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ== + dependencies: + "@octokit/core" "^4.0.0" + "@octokit/plugin-paginate-rest" "^3.0.0" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^6.0.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.41.0": + version "6.41.0" + resolved "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" + integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== + dependencies: + "@octokit/openapi-types" "^12.11.0" + +"@parcel/watcher@2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" + integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== + dependencies: + node-addon-api "^3.2.1" + node-gyp-build "^4.3.0" + "@rollup/plugin-commonjs@^22.0.2": version "22.0.2" resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz#ee8ca8415cda30d383b4096aad5222435b4b69b6" @@ -198,6 +1158,11 @@ resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz#0c8b74c50f29ee44f423f7416829c0bf8bb5eb27" integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -248,7 +1213,7 @@ dependencies: "@types/node" "*" -"@types/minimatch@*": +"@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== @@ -268,6 +1233,11 @@ resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -324,6 +1294,19 @@ "@typescript-eslint/types" "5.33.0" eslint-visitor-keys "^3.3.0" +JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -339,7 +1322,28 @@ acorn@^8.4.1, acorn@^8.8.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== -aggregate-error@^3.0.1: +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0, aggregate-error@^3.0.1: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== @@ -357,6 +1361,18 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -369,7 +1385,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -381,6 +1397,27 @@ any-promise@^1.0.0: resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -414,6 +1451,16 @@ arr-union@^3.1.0: resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + array-includes@^3.0.3, array-includes@^3.1.4, array-includes@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb" @@ -472,6 +1519,16 @@ arrify@^1.0.1: resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -487,6 +1544,11 @@ asynckit@^0.4.0: resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -515,6 +1577,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -528,6 +1595,37 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +bin-links@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz#cc70ffb481988b22c527d3e6e454787876987a49" + integrity sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^1.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3, bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -536,6 +1634,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1: version "2.3.2" resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -552,7 +1657,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -564,11 +1669,65 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== + +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +byte-size@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" + integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== + +cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: + version "16.1.1" + resolved "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz#4e79fb91d3efffe0630d5ad32db55cc1b870669c" + integrity sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg== + dependencies: + "@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 "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -616,6 +1775,14 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -633,7 +1800,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -641,11 +1808,41 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chunkd@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -661,6 +1858,58 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -693,6 +1942,19 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -705,11 +1967,24 @@ commander@^4.0.0: resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -720,6 +1995,111 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +config-chain@^1.1.12: + version "1.1.13" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@^5.0.12: + version "5.0.13" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-core@^4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" + integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^4.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + through2 "^4.0.0" + +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + dependencies: + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" + +conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.0: + version "3.2.4" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +conventional-recommended-bump@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -735,6 +2115,17 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -747,7 +2138,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^7.0.1, cross-spawn@^7.0.2: +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -761,6 +2152,23 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -775,12 +2183,10 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== decamelize-keys@^1.1.0: version "1.1.0" @@ -800,6 +2206,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -810,6 +2221,18 @@ deepmerge@^4.2.2: resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -845,6 +2268,39 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +dezalgo@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + diff@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -878,6 +2334,25 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + duplexer2@~0.0.2: version "0.0.2" resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -885,6 +2360,11 @@ duplexer2@~0.0.2: dependencies: readable-stream "~1.1.9" +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -892,11 +2372,52 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +envinfo@^7.7.4: + version "7.8.1" + resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -949,6 +2470,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1189,6 +2715,26 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -1217,6 +2763,15 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -1241,6 +2796,17 @@ fast-diff@^1.1.2: resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -1281,6 +2847,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +figures@3.2.0, figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1314,7 +2887,7 @@ find-cache-dir@^3.3.2: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== @@ -1345,6 +2918,11 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.1.0: version "3.2.6" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" @@ -1376,7 +2954,12 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fs-extra@^10.0.0: +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -1394,6 +2977,23 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1429,6 +3029,25 @@ functions-have-names@^1.2.2: resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + 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" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.2" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" @@ -1438,6 +3057,26 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.3" +get-pkg-repo@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" + integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== + dependencies: + "@hutson/parse-repository-url" "^3.0.0" + hosted-git-info "^4.0.0" + through2 "^2.0.0" + yargs "^16.2.0" + +get-port@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -1460,6 +3099,55 @@ get-workspaces@^0.5.2: fs-extra "^7.0.1" globby "^9.2.0" +git-raw-commits@^2.0.8: + version "2.0.11" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +git-remote-origin-url@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw== + dependencies: + gitconfiglocal "^1.0.0" + pify "^2.3.0" + +git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== + dependencies: + meow "^8.0.0" + semver "^6.0.0" + +git-up@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz#dbd6e4eee270338be847a0601e6d0763c90b74db" + integrity sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA== + dependencies: + is-ssh "^1.4.0" + parse-url "^7.0.2" + +git-url-parse@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz#4ba70bc1e99138321c57e3765aaf7428e5abb793" + integrity sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q== + dependencies: + git-up "^6.0.0" + +gitconfiglocal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ== + dependencies: + ini "^1.3.2" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -1468,7 +3156,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.2: +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1487,6 +3175,18 @@ glob-to-regexp@^0.3.0: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig== +glob@7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -1511,7 +3211,7 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@^7.1.6, glob@^7.2.0: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1523,6 +3223,17 @@ glob@^7.1.3, glob@^7.1.6, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.0.3" + resolved "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^13.15.0: version "13.17.0" resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" @@ -1530,7 +3241,7 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" -globby@^11.1.0: +globby@^11.0.2, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -1556,7 +3267,7 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1566,6 +3277,18 @@ grapheme-splitter@^1.0.4: resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + hard-rejection@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -1605,6 +3328,11 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + has-value@^0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -1648,12 +3376,93 @@ hosted-git-info@^2.1.4: resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" + integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== + dependencies: + lru-cache "^7.5.1" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + ignore@^4.0.3: version "4.0.6" resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.2.0: +ignore@^5.0.4, ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -1666,6 +3475,14 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1676,6 +3493,11 @@ indent-string@^4.0.0: resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1684,11 +3506,50 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.1: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.2, ini@^1.3.4: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== + dependencies: + 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" + +inquirer@^8.2.4: + version "8.2.4" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" + integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.1" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.21" + mute-stream "0.0.8" + ora "^5.4.1" + run-async "^2.4.0" + rxjs "^7.5.5" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + wrap-ansi "^7.0.0" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -1698,6 +3559,11 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1724,6 +3590,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -1749,7 +3622,14 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-core-module@^2.8.1, is-core-module@^2.9.0: +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== @@ -1795,6 +3675,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -1812,6 +3697,11 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -1819,13 +3709,23 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -1855,11 +3755,21 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-obj@^1.1.0: +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -1867,6 +3777,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-reference@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -1889,6 +3804,18 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" +is-ssh@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" + integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== + dependencies: + protocols "^2.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -1903,6 +3830,23 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -1915,12 +3859,19 @@ is-windows@^1.0.2: resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== @@ -1947,14 +3898,19 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -json-parse-even-better-errors@^2.3.0: +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -1969,6 +3925,16 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -1976,6 +3942,11 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonc-parser@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -1992,6 +3963,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -2016,6 +3992,16 @@ jsonwebtoken@^8.5.1: array-includes "^3.1.5" object.assign "^4.1.3" +just-diff-apply@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" + integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== + +just-diff@^5.0.1: + version "5.1.1" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" + integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== + jwa@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" @@ -2069,6 +4055,31 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" +lerna@^5.4.0: + version "5.4.0" + resolved "https://registry.npmjs.org/lerna/-/lerna-5.4.0.tgz#0b3c2310146fa9480ade9c6978c7693ad5c39fe1" + integrity sha512-y1gRvW5oFo+xumYQCDadDj8r4R4o6fpmuNc94b2h8HRoiCnHZWIlMvym4m+R7kSDh0CuuYRTB2wPjUrHmQXL7w== + dependencies: + "@lerna/add" "5.4.0" + "@lerna/bootstrap" "5.4.0" + "@lerna/changed" "5.4.0" + "@lerna/clean" "5.4.0" + "@lerna/cli" "5.4.0" + "@lerna/create" "5.4.0" + "@lerna/diff" "5.4.0" + "@lerna/exec" "5.4.0" + "@lerna/import" "5.4.0" + "@lerna/info" "5.4.0" + "@lerna/init" "5.4.0" + "@lerna/link" "5.4.0" + "@lerna/list" "5.4.0" + "@lerna/publish" "5.4.0" + "@lerna/run" "5.4.0" + "@lerna/version" "5.4.0" + import-local "^3.0.2" + npmlog "^6.0.2" + nx ">=14.5.4 < 16" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -2077,11 +4088,52 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +libnpmaccess@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" + integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmpublish@^6.0.4: + version "6.0.4" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b" + integrity sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg== + dependencies: + 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" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" + integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== + dependencies: + graceful-fs "^4.1.15" + parse-json "^5.0.0" + strip-bom "^4.0.0" + type-fest "^0.6.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2119,6 +4171,11 @@ lodash.isinteger@^4.0.4: resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + lodash.isnumber@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" @@ -2144,6 +4201,19 @@ lodash.once@^4.0.0: resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -2158,6 +4228,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.13.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz#bb5d3f1deea3f3a7a35c1c44345566a612e09cd0" + integrity sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA== + magic-string@^0.25.7: version "0.25.9" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -2172,7 +4247,15 @@ magic-string@^0.26.1: dependencies: sourcemap-codec "^1.4.8" -make-dir@^3.0.2: +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -2184,6 +4267,28 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6: + version "10.2.0" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz#0bde3914f2f82750b5d48c6d2294d2c74f985e5b" + integrity sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg== + dependencies: + 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" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -2223,6 +4328,28 @@ meow@^6.0.0: type-fest "^0.13.1" yargs-parser "^18.1.3" +meow@^8.0.0: + version "8.1.2" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2267,11 +4394,23 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -2279,7 +4418,14 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimist-options@^4.0.2: +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== @@ -2288,11 +4434,73 @@ minimist-options@^4.0.2: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.0" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz#ca1754a5f857a3be99a9271277246ac0b44c3ff8" + integrity sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg== + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -2301,6 +4509,25 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +modify-values@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -2311,11 +4538,27 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multimatch@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" + integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -2347,7 +4590,57 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -normalize-package-data@^2.5.0: +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.0: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-addon-api@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.3.0: + version "4.5.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" + integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + +node-gyp@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz#c8d8e590678ea1f7b8097511dedf41fc126648f8" + integrity sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g== + dependencies: + 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" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -2357,6 +4650,160 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz#1122d5359af21d4cd08718b92b058a658594177c" + integrity sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g== + dependencies: + hosted-git-info "^5.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-bundled@^1.1.1, npm-bundled@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" + integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^5.1.0, npm-packlist@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" + integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^1.1.2" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@^7.0.0: + version "7.0.1" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" + integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: + version "13.3.0" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz#0ce10fa4a699a1e70685ecf41bbfb4150d74231b" + integrity sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg== + dependencies: + 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-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +nx@14.5.4, "nx@>=14.5.4 < 16": + version "14.5.4" + resolved "https://registry.npmjs.org/nx/-/nx-14.5.4.tgz#58b6e8ee798733a6ab9aff2a19180c371482fa10" + integrity sha512-xv1nTaQP6kqVDE4PXcB1tLlgzNAPUHE/2vlqSLgxjNb6colKf0vrEZhVTjhnbqBeJiTb33gUx50bBXkurCkN5w== + dependencies: + "@nrwl/cli" "14.5.4" + "@nrwl/tao" "14.5.4" + "@parcel/watcher" "2.0.4" + chalk "4.1.0" + chokidar "^3.5.1" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^7.0.2" + dotenv "~10.0.0" + enquirer "~2.3.6" + fast-glob "3.2.7" + figures "3.2.0" + flat "^5.0.2" + fs-extra "^10.1.0" + glob "7.1.4" + ignore "^5.0.4" + js-yaml "4.1.0" + jsonc-parser "3.0.0" + minimatch "3.0.5" + npm-run-path "^4.0.1" + open "^8.4.0" + semver "7.3.4" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^3.9.0" + tslib "^2.3.0" + v8-compile-cache "2.3.0" + yargs "^17.4.0" + yargs-parser "21.0.1" + object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2445,13 +4892,29 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -once@^1.3.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.0" + resolved "https://registry.npmjs.org/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -2464,6 +4927,31 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -2492,19 +4980,56 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map-series@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" + integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-pipe@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" + integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== + +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: - p-limit "^2.2.0" + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== +p-reduce@^2.0.0, p-reduce@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: - p-limit "^3.0.2" + p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" @@ -2516,6 +5041,40 @@ p-try@^2.0.0: resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +p-waterfall@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" + integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== + dependencies: + p-reduce "^2.0.0" + +pacote@^13.0.3, pacote@^13.6.1: + version "13.6.1" + resolved "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz#ac6cbd9032b4c16e5c1e0c60138dfe44e4cc589d" + integrity sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw== + dependencies: + "@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" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2523,6 +5082,23 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-conflict-json@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -2533,6 +5109,23 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz#f933152f3c6d34f4cf36cfc3d07b138ac113649d" + integrity sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A== + dependencies: + protocols "^2.0.0" + +parse-url@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz#d21232417199b8d371c6aec0cedf1406fd6393f0" + integrity sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg== + dependencies: + is-ssh "^1.4.0" + normalize-url "^6.1.0" + parse-path "^5.0.0" + protocols "^2.0.1" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -2558,7 +5151,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -2585,11 +5178,16 @@ physical-cpu-count@^2.0.0: resolved "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660" integrity sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g== -picomatch@^2.2.2, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + pify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -2600,12 +5198,17 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pirates@^4.0.1: version "4.0.5" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -2634,6 +5237,46 @@ prettier@^2.6.2: resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -2643,11 +5286,26 @@ prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -punycode@^2.1.0: +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +protocols@^2.0.0, protocols@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" + integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== + +punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -2663,6 +5321,37 @@ react-is@^16.13.1: resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +read-cmd-shim@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" + integrity sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog== + +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^5.0.0, read-package-json@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" + integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^1.0.1" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -2672,6 +5361,15 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -2682,6 +5380,22 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read@1, read@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~1.0.17: version "1.0.34" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -2702,6 +5416,36 @@ readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + redent@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -2747,11 +5491,28 @@ repeat-string@^1.6.1: resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -2775,17 +5536,30 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -2819,6 +5593,11 @@ rollup@^2.77.2: optionalDependencies: fsevents "~2.3.2" +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -2826,11 +5605,23 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@^5.0.1: +rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -2838,23 +5629,40 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + "semver@2 || 3 || 4 || 5", semver@^5.6.0: version "5.7.1" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.3.4: + version "7.3.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.1, semver@^7.3.7: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -2865,6 +5673,13 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2886,7 +5701,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -2901,6 +5716,11 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -2931,6 +5751,37 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" + integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== + dependencies: + is-plain-obj "^2.0.0" + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -2952,6 +5803,11 @@ source-map@^0.5.6: resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + sourcemap-codec@^1.4.8: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" @@ -2997,6 +5853,27 @@ split2@^0.1.2: dependencies: through2 "~0.4.1" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + dependencies: + minipass "^3.1.1" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -3005,6 +5882,15 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.matchall@^4.0.7: version "4.0.7" resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" @@ -3037,12 +5923,26 @@ string.prototype.trimstart@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== -strip-ansi@^6.0.1: +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -3054,6 +5954,16 @@ strip-bom@^3.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -3066,6 +5976,15 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strong-log-transformer@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== + dependencies: + duplexer "^0.1.1" + minimist "^1.2.0" + through "^2.3.4" + sucrase@^3.20.0: version "3.25.0" resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.25.0.tgz#6dffa34e614b3347877507a4380cc4f022b7b7aa" @@ -3097,6 +6016,29 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + task-graph-runner@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/task-graph-runner/-/task-graph-runner-1.0.3.tgz#73b2cd380cef6f51b8179b0d1da4bb7c356b03bf" @@ -3104,6 +6046,16 @@ task-graph-runner@^1.0.3: dependencies: array-includes "^3.0.3" +temp-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ== + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -3131,6 +6083,21 @@ through2@^0.5.1: readable-stream "~1.0.17" xtend "~3.0.0" +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + through2@~0.4.1: version "0.4.2" resolved "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" @@ -3139,6 +6106,25 @@ through2@~0.4.1: readable-stream "~1.0.17" xtend "~2.1.1" +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -3171,6 +6157,23 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +treeverse@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -3200,7 +6203,7 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.14.1: +tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: version "3.14.1" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== @@ -3215,7 +6218,7 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.0: +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.4.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -3239,11 +6242,26 @@ type-fest@^0.13.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" + integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -3254,11 +6272,28 @@ type-fest@^0.8.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + typescript@^4.7.4: version "4.7.4" resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +uglify-js@^3.1.4: + version "3.16.3" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz#94c7a63337ee31227a18d03b8a3041c210fd1f1d" + integrity sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -3279,6 +6314,25 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -3297,6 +6351,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -3314,6 +6373,11 @@ use@^3.1.0: resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -3324,12 +6388,12 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: +v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -3337,6 +6401,59 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== + dependencies: + builtins "^1.0.3" + +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^8.4.0: + version "8.7.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -3348,18 +6465,30 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + workspaces-run@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/workspaces-run/-/workspaces-run-1.0.1.tgz#dace5df0d45f8770316d254e0cfe7a6c1a3df437" @@ -3381,6 +6510,15 @@ workspaces-run@^1.0.1: trim-newlines "^3.0.0" wrapline "^2.0.1" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrapline@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/wrapline/-/wrapline-2.0.1.tgz#c79908ac15f41d401da6607ff25661d4c91479bb" @@ -3395,6 +6533,66 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +write-json-file@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" + integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.15" + make-dir "^2.1.0" + pify "^4.0.1" + sort-keys "^2.0.0" + write-file-atomic "^2.4.2" + +write-json-file@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" + integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^4.0.0" + write-file-atomic "^3.0.0" + +write-pkg@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" + integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== + dependencies: + sort-keys "^2.0.0" + type-fest "^0.4.1" + write-json-file "^3.2.0" + xtend@~2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" @@ -3407,11 +6605,36 @@ xtend@~3.0.0: resolved "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" integrity sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg== +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@21.0.1: + version "21.0.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -3420,6 +6643,42 @@ yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.0: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.4.0: + version "17.5.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 74e7e3a0d6a8d7a570bf7fd4071b629948137bef Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:49:27 +0800 Subject: [PATCH 065/131] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- packages/juejin-helper/package.json | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index f21d75fa..7444ce22 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "clean": "rimraf \"packages/*/{build,types}\"", "release:version": "lerna version --exact --force-publish", "release:build": "yarn clean && yarn build", - "release:publish": "lerna publish from-package" + "release:publish": "lerna publish from-package --no-private" }, "devDependencies": { "@rollup/plugin-commonjs": "^22.0.2", diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 230d5210..8d85bc56 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.6.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", @@ -43,5 +43,6 @@ "homepage": "https://github.com/iDerekLi/juejin-helper#readme", "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" - } + }, + "gitHead": "c7c32f104a8946fc496912ba5987b85db447e7c2" } From bf4ef104bf7c5b2c3bc1aef49b119188fbed8bbe Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:50:05 +0800 Subject: [PATCH 066/131] Publish - juejin-helper@1.6.1 --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 8d85bc56..a368a41e 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 700b4495d8b96d7a95429c1509e63edc7b93050f Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:52:04 +0800 Subject: [PATCH 067/131] Publish - juejin-helper@1.6.1-alpha.0 --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index a368a41e..391b9b42 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.6.1-alpha.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From c57357ff82c1280402f097cc6b41294b2c2c29cf Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:55:21 +0800 Subject: [PATCH 068/131] build: release 1.6.1-alpha.0 --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 391b9b42..e3e02ec2 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -44,5 +44,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "c7c32f104a8946fc496912ba5987b85db447e7c2" + "gitHead": "700b4495d8b96d7a95429c1509e63edc7b93050f" } From e8a2b989b058af1c4141b52dca4022e1b405c5a5 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:57:22 +0800 Subject: [PATCH 069/131] v1.6.1 --- lerna.json | 2 +- packages/juejin-helper/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 06cff9cd..ccc9ddc3 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "npmClient": "yarn", "useWorkspaces": true, - "version": "independent" + "version": "1.6.1" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index e3e02ec2..6fa348c4 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1-alpha.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 1bd5f57cc0f091984cf63fd98a1ed7d22ddf8a11 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 16:58:57 +0800 Subject: [PATCH 070/131] build: 1.6.1 --- lerna.json | 1 - packages/juejin-helper/package.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index ccc9ddc3..55dec1ea 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,4 @@ { - "npmClient": "yarn", "useWorkspaces": true, "version": "1.6.1" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 6fa348c4..bf5c51be 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -44,5 +44,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "700b4495d8b96d7a95429c1509e63edc7b93050f" + "gitHead": "e8a2b989b058af1c4141b52dca4022e1b405c5a5" } From 1067012adad9613800164fc5d77f0e91ccbf29e2 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:06:24 +0800 Subject: [PATCH 071/131] =?UTF-8?q?chore:=20=E5=AE=8C=E5=96=84=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .npmrc | 2 +- lerna.json | 2 +- package.json | 3 +++ packages/juejin-helper/package.json | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.npmrc b/.npmrc index 0ce6ea03..159d6cc9 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -registry = "https://registry.npmjs.com/" +registry = https://registry.npmjs.com/ diff --git a/lerna.json b/lerna.json index 55dec1ea..3cc227ea 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.6.1" + "version": "1.6.0" } diff --git a/package.json b/package.json index 7444ce22..6fa428d2 100644 --- a/package.json +++ b/package.json @@ -37,5 +37,8 @@ "engines": { "node": ">=14.17.0", "npm": ">=6.14.13" + }, + "publishConfig": { + "registry": "https://registry.npmjs.com/" } } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index bf5c51be..58a0b3f3 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.6.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", @@ -44,5 +44,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "e8a2b989b058af1c4141b52dca4022e1b405c5a5" + "gitHead": "1bd5f57cc0f091984cf63fd98a1ed7d22ddf8a11" } From 47e4067ac4173cf58cf6fd2f840363dcaa547931 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:06:48 +0800 Subject: [PATCH 072/131] v1.6.1 --- lerna.json | 2 +- packages/juejin-helper/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 3cc227ea..55dec1ea 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.6.0" + "version": "1.6.1" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 58a0b3f3..0a837b56 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 39802dc854a82326b439d48c74232a252b0bda62 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:09:04 +0800 Subject: [PATCH 073/131] =?UTF-8?q?chore:=20=E5=AE=8C=E5=96=84=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lerna.json | 2 +- packages/juejin-helper/package.json | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lerna.json b/lerna.json index 55dec1ea..3cc227ea 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.6.1" + "version": "1.6.0" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 0a837b56..25983a9f 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.6.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", @@ -43,6 +43,5 @@ "homepage": "https://github.com/iDerekLi/juejin-helper#readme", "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" - }, - "gitHead": "1bd5f57cc0f091984cf63fd98a1ed7d22ddf8a11" + } } From ed163a79a6bf8fe9cb80f9aaed77968df0fe9b95 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:09:37 +0800 Subject: [PATCH 074/131] v1.6.1 --- lerna.json | 2 +- packages/juejin-helper/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 3cc227ea..55dec1ea 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.6.0" + "version": "1.6.1" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 25983a9f..230d5210 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From e5da20e81099631217f597926e121f1a171c4621 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:10:05 +0800 Subject: [PATCH 075/131] =?UTF-8?q?chore:=20=E5=AE=8C=E5=96=84=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 230d5210..25983a9f 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.6.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From b0dce421194cb1d81d1ee113db710dec00172316 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:10:46 +0800 Subject: [PATCH 076/131] v1.6.1 --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 25983a9f..230d5210 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 1e07aa7b7de8a92c6c6f0b439b78cb7102a559d3 Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:12:36 +0800 Subject: [PATCH 077/131] chore: 1.6.1 --- packages/juejin-helper/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 230d5210..9ca43686 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -43,5 +43,6 @@ "homepage": "https://github.com/iDerekLi/juejin-helper#readme", "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" - } + }, + "gitHead": "b0dce421194cb1d81d1ee113db710dec00172316" } From 7ca642f6158c70bbc9a5bb3e7289148713d36fdf Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:14:27 +0800 Subject: [PATCH 078/131] =?UTF-8?q?build:=20=E5=AE=8C=E5=96=84=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/package.json b/package.json index 6fa428d2..dca7a93f 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build": "cross-env NODE_ENV=production rollup -c", "clean": "rimraf \"packages/*/{build,types}\"", "release:version": "lerna version --exact --force-publish", - "release:build": "yarn clean && yarn build", + "release:build": "npm run clean && npm run build", "release:publish": "lerna publish from-package --no-private" }, "devDependencies": { @@ -37,8 +37,5 @@ "engines": { "node": ">=14.17.0", "npm": ">=6.14.13" - }, - "publishConfig": { - "registry": "https://registry.npmjs.com/" } } From 108b6f748f34effd52d55aa92c8eab6857c35ebf Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:14:40 +0800 Subject: [PATCH 079/131] =?UTF-8?q?build:=20=E5=AE=8C=E5=96=84=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dca7a93f..c54b2cf9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper-monorepo", - "version": "1.6.0", + "version": "1.6.1", "private": true, "author": "Derek Li", "workspaces": [ From e8c2dfc2e1bf4cc443205ff69a2318642a90669b Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:15:51 +0800 Subject: [PATCH 080/131] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/package.json b/workflows/package.json index 0fb2b1c8..bef1e563 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -9,7 +9,7 @@ "seagold": "node seagold.js" }, "dependencies": { - "juejin-helper": "1.6.0", + "juejin-helper": "^1.6.1", "axios": "^0.27.2", "fast-astar": "^1.0.6", "nodemailer": "^6.7.0" From 1748444f6501f727382402338f0e0b822a05de8e Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 17:16:32 +0800 Subject: [PATCH 081/131] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E7=89=88=E6=9C=AC1.6.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/package.json b/workflows/package.json index bef1e563..8ec18f74 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.6.0", + "version": "1.6.1", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", From 7d8d9a336f2d15ebe3be65a3befd4c2c9c9f563f Mon Sep 17 00:00:00 2001 From: derek Date: Wed, 10 Aug 2022 18:08:43 +0800 Subject: [PATCH 082/131] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index f7005dd4..bde29b8d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,13 @@

签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。

+## 如何使用? +使用自动化工作流有两种方式:快速使用(在线) 和 私有化部署(本地) + +- 快速使用自动化:[阅读 使用](#使用) +- 私有化部署自动化:[见 workflows](./workflows/README.md) +- 除上诉两种之外,如您喜欢也可以自定义脚本:[npm juejin-helper](https://www.npmjs.com/package/juejin-helper) + ## 使用 自动化执行任务: 掘金每日签到, 沾喜气, 免费抽奖, 消除Bug, 海底掘金游戏, 最后将结果报告邮件通知订阅人。\ From a4a967ebcd9622a309e99b19cb59a502b48ce2a5 Mon Sep 17 00:00:00 2001 From: derek Date: Thu, 11 Aug 2022 11:01:01 +0800 Subject: [PATCH 083/131] =?UTF-8?q?fix(dingding):=20=E4=BF=AE=E5=A4=8Dnode?= =?UTF-8?q?-fetch=E5=88=87=E6=8D=A2=E8=87=B3axios=E7=9A=84=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/dingding.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/workflows/utils/dingding.js b/workflows/utils/dingding.js index b8dbd234..0506598a 100644 --- a/workflows/utils/dingding.js +++ b/workflows/utils/dingding.js @@ -13,12 +13,11 @@ async function dingding({ subject, text, html }) { }, { headers: { - "Content-Type": "application/json", - Charset: "UTF-8" + "Content-Type": "application/json" } } ) - .then(res => console.log(JSON.stringify(res))); + .then(res => console.log(JSON.stringify(res.data))); } module.exports = dingding; From 98b9fc4b4866e15f9fd3965444aa761f03d4a46b Mon Sep 17 00:00:00 2001 From: sun Date: Wed, 24 Aug 2022 15:55:08 +0800 Subject: [PATCH 084/131] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/env.js | 7 ++++++- workflows/utils/pushMessage.js | 2 ++ workflows/utils/weixinrobot.js | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 workflows/utils/weixinrobot.js diff --git a/workflows/utils/env.js b/workflows/utils/env.js index e49ba69b..8e9b1c12 100644 --- a/workflows/utils/env.js +++ b/workflows/utils/env.js @@ -24,5 +24,10 @@ module.exports = { * PushPlus配置 * http://www.pushplus.plus/doc/guide/openApi.html */ - PUSHPLUS_TOKEN: env.PUSHPLUS_TOKEN + PUSHPLUS_TOKEN: env.PUSHPLUS_TOKEN, + /** + * 企业微信机器人配置 + * https://developer.work.weixin.qq.com/document/path/91770 + */ + WEIXIN_WEBHOOK: env.WEIXIN_WEBHOOK }; diff --git a/workflows/utils/pushMessage.js b/workflows/utils/pushMessage.js index 68c4ca2b..cad649ec 100644 --- a/workflows/utils/pushMessage.js +++ b/workflows/utils/pushMessage.js @@ -2,11 +2,13 @@ const env = require("./env"); const email = require("./email"); const pushplus = require("./pushplus"); const dingding = require("./dingding"); +const weixinrobot = require("./weixinrobot"); async function pushMessage({ subject, text, html }) { env.EMAIL_USER && (await email({ subject, text, html })); env.DINGDING_WEBHOOK && (await dingding({ subject, text, html })); env.PUSHPLUS_TOKEN && (await pushplus({ subject, text, html })); + env.WEIXIN_WEBHOOK && (await weixinrobot({ subject, text, html })); } module.exports = pushMessage; diff --git a/workflows/utils/weixinrobot.js b/workflows/utils/weixinrobot.js new file mode 100644 index 00000000..c185dca0 --- /dev/null +++ b/workflows/utils/weixinrobot.js @@ -0,0 +1,20 @@ +const axios = require('axios'); + +const env = require("./env"); + +async function weixinrobot({ subject, text, html }) { + axios.post(env.WEIXIN_WEBHOOK,{ + "msgtype": "text", + "text": { + "content": `${subject}\n${text || html}` + } + }) + .then(response => { + console.log(response.data); + }) + .catch(error => { + console.log(error) + }) + +} +module.exports = weixinrobot; From 4ca4ca60955eaacba8344ceaa99a15f346bb9b5b Mon Sep 17 00:00:00 2001 From: sun Date: Wed, 24 Aug 2022 16:25:34 +0800 Subject: [PATCH 085/131] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9Eyml?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=92=8C=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BAmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 1 + README.md | 1 + workflows/README.md | 1 + 3 files changed, 3 insertions(+) diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml index 5cbce5ff..6f658d4e 100644 --- a/.github/workflows/auto.yml +++ b/.github/workflows/auto.yml @@ -16,6 +16,7 @@ env: EMAIL_TO: ${{ secrets.EMAIL_TO }} DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} + WEIXIN_WEBHOOK: ${{ secrets.WEIXIN_WEBHOOK }} jobs: CheckIn: diff --git a/README.md b/README.md index bde29b8d..2766f4ab 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | | DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | | PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | + | WEIXIN_WEBHOOK | 企业微信机器人WEBHOOK | 否 | 4. 仓库 -> Actions, 检查Workflows并启用。 diff --git a/workflows/README.md b/workflows/README.md index e8eccb0e..53302c43 100644 --- a/workflows/README.md +++ b/workflows/README.md @@ -33,4 +33,5 @@ module.exports = { | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | | DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | | PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | +| WEIXIN_WEBHOOK | 企业微信机器人WEBHOOK | 否 | From 1b50b931d4e6dea18a1438d70f3c5492cc3f8d17 Mon Sep 17 00:00:00 2001 From: Derek Li <24502299+iDerekLi@users.noreply.github.com> Date: Mon, 12 Dec 2022 15:08:21 +0800 Subject: [PATCH 086/131] =?UTF-8?q?=E5=87=8F=E5=B0=91=E6=8E=98=E9=87=91?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8502=E6=A6=82=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/seagold.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/seagold.js b/workflows/seagold.js index 86770b69..a1db259d 100644 --- a/workflows/seagold.js +++ b/workflows/seagold.js @@ -341,7 +341,7 @@ class Seagold { await this.gameStart(); while (await this.executeGameCommand()) { - await utils.wait(utils.randomRangeNumber(1000, 1500)); + await utils.wait(utils.randomRangeNumber(3000, 5000)); // 等待 3-5s 降低掘金服务器502概率 if (runTime >= runEndTime) { throw Error(`掘金游戏异常: 服务运行时间过长.`); @@ -372,7 +372,7 @@ class Seagold { throw new Error("掘金游戏异常: 您 0 矿石游戏对局次数过多."); } - await utils.wait(utils.randomRangeNumber(1000, 5000)); + await utils.wait(utils.randomRangeNumber(5000, 10000)); // 等待 5-10s 降低掘金服务器502概率 const gameOverInfo = await runGame(); if (gameOverInfo.gameDiamond === 0) { @@ -410,7 +410,7 @@ async function run(args) { for (let cookie of cookies) { const seaGold = new Seagold(cookie); - await utils.wait(utils.randomRangeNumber(1000, 5000)); // 初始等待1-5s + await utils.wait(utils.randomRangeNumber(3000, 5000)); // 初始等待3-5s await seaGold.run(); const content = seaGold.toString(); From d1cfac036bdd29d1595620bf60ad8b26b9d1b049 Mon Sep 17 00:00:00 2001 From: lidy Date: Thu, 12 Jan 2023 17:21:57 +0800 Subject: [PATCH 087/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E7=94=A8=E6=88=B7=E6=B4=BB=E8=B7=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 9 + workflows/package.json | 7 +- workflows/utils/browser.js | 21 ++ workflows/yarn.lock | 517 ++++++++++++++++++++++++++++++++++++- 4 files changed, 546 insertions(+), 8 deletions(-) create mode 100644 workflows/utils/browser.js diff --git a/workflows/checkin.js b/workflows/checkin.js index accb0611..e012be2a 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -2,6 +2,7 @@ const JuejinHelper = require("juejin-helper"); const utils = require("./utils/utils"); const pushMessage = require("./utils/pushMessage"); const env = require("./utils/env"); +const browser = require("./utils/browser"); class CheckIn { username = ""; @@ -28,6 +29,8 @@ class CheckIn { calledTrackGrowthEvent = false; calledTrackOnloadEvent = false; + pageSnapshot = null; + constructor(cookie) { this.cookie = cookie; } @@ -160,6 +163,12 @@ class CheckIn { console.log(`SDK状态: ${this.calledSdkSetting ? "加载成功" : "加载失败"}`); console.log(`成长API事件埋点: ${this.calledTrackGrowthEvent ? "调用成功" : "调用失败"}`); console.log(`OnLoad事件埋点: ${this.calledTrackOnloadEvent ? "调用成功" : "调用失败"}`); + try { + await browser.visitJuejinPage("/user/center/signin", this.cookie); + console.log("掘金每日签到:页面访问成功"); + } catch (e) { + console.log("掘金每日签到:页面访问失败"); + } console.log("-------------------------"); await juejin.logout(); diff --git a/workflows/package.json b/workflows/package.json index 8ec18f74..6bcdbfd7 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.6.1", + "version": "1.7.0", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", @@ -9,9 +9,10 @@ "seagold": "node seagold.js" }, "dependencies": { - "juejin-helper": "^1.6.1", "axios": "^0.27.2", "fast-astar": "^1.0.6", - "nodemailer": "^6.7.0" + "juejin-helper": "^1.6.1", + "nodemailer": "^6.7.0", + "puppeteer": "^19.5.2" } } diff --git a/workflows/utils/browser.js b/workflows/utils/browser.js new file mode 100644 index 00000000..9995b076 --- /dev/null +++ b/workflows/utils/browser.js @@ -0,0 +1,21 @@ +const puppeteer = require("puppeteer"); + +async function visitJuejinPage(path = "", cookiesString = "") { + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + + await page.setViewport({ width: 414, height: 820 }); + + const cookiesArray = cookiesString.split(/;\W+/).map(item => item.split("=")); + const cookies = cookiesArray.map(([name, value]) => ({ name, value, domain: ".juejin.cn" })); + await page.setCookie(...cookies); + await page.goto("https://juejin.cn" + path); + + await new Promise(resolve => setTimeout(resolve, 5000)); + + const screenshot = await page.screenshot(); + await browser.close(); + return screenshot; +} + +module.exports = { visitJuejinPage }; diff --git a/workflows/yarn.lock b/workflows/yarn.lock index 8eb71008..36dfbf9e 100644 --- a/workflows/yarn.lock +++ b/workflows/yarn.lock @@ -2,6 +2,58 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@types/node@*": + version "18.11.18" + resolved "https://registry.npmmirror.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" + integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -15,11 +67,82 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== +buffer@^5.2.1, buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -27,11 +150,45 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cosmiconfig@8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" + integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + +cross-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +debug@4, debug@4.3.4, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +devtools-protocol@0.0.1068969: + version "0.0.1068969" + resolved "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz#8b9a4bc48aed1453bed08d62b07481f9abf4d6d8" + integrity sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -39,11 +196,48 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + fast-astar@^1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/fast-astar/-/fast-astar-1.0.6.tgz#e4cae258839bc6406c49df1eaa80077eda74723c" integrity sha512-r23aD+DIl2Y/XdhP/Z3kDyi9dJ4BID6z49gjc+lQo1fLBqi9uEkaevcX4v0bqHGxjwc7GKbt/OPRM/UwTCfiEw== +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + follow-redirects@^1.14.9: version "1.15.1" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" @@ -58,6 +252,96 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + 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" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +https-proxy-agent@5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" @@ -74,10 +358,10 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -juejin-helper@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/juejin-helper/-/juejin-helper-1.6.0.tgz#8275e2fc45dc6ef3c44a450c456240d9d95c9cbc" - integrity sha512-+iX0uBFAeGwjTpILJ9F++bVBFv9IwNtgBB3H9fOKxhbWC1U4lmNvdqeC9+n6SISMln10TgrJ8eF2J9DdageD5Q== +juejin-helper@^1.6.1: + version "1.6.1" + resolved "https://registry.npmmirror.com/juejin-helper/-/juejin-helper-1.6.1.tgz#4abe25cfad763d4e16c199f0450c01ed866a7254" + integrity sha512-twF0qbKZy6wyQhfCxx6/oUvwurD5DnXkXv57lctDH6g62iloaOdUJFzMN7TIfeSkeO3qdXtpWaO/7QE6krbjxg== dependencies: axios "^0.27.2" jsonwebtoken "^8.5.1" @@ -100,6 +384,11 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" @@ -147,17 +436,146 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + ms@^2.1.1: version "2.1.3" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + nodemailer@^6.7.0: version "6.7.7" resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== -safe-buffer@^5.0.1: +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +progress@2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proxy-from-env@1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +puppeteer-core@19.5.2: + version "19.5.2" + resolved "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-19.5.2.tgz#9b454b0ef89d3f07e20158dd4ced6ebd85d4dadb" + integrity sha512-Rqk+3kqM+Z2deooTYqcYt8lRtGffJdifWa9td9nbJSjhANWsFouk8kLBNUKycewCCFHM8TZUKS0x28OllavW2A== + dependencies: + cross-fetch "3.1.5" + debug "4.3.4" + devtools-protocol "0.0.1068969" + extract-zip "2.0.1" + https-proxy-agent "5.0.1" + proxy-from-env "1.1.0" + rimraf "3.0.2" + tar-fs "2.1.1" + unbzip2-stream "1.4.3" + ws "8.11.0" + +puppeteer@^19.5.2: + version "19.5.2" + resolved "https://registry.npmmirror.com/puppeteer/-/puppeteer-19.5.2.tgz#f09ed55d5263cacaac4c5818d0d884b1e1d938b0" + integrity sha512-xlqRyrhXhVH114l79Y0XqYXUVG+Yfw4sKlvN55t8Y9DxtA5fzI1uqF8SVXbWK5DUMbD6Jo4lpixTZCTTZGD05g== + dependencies: + cosmiconfig "8.0.0" + https-proxy-agent "5.0.1" + progress "2.0.3" + proxy-from-env "1.1.0" + puppeteer-core "19.5.2" + +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +rimraf@3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -167,7 +585,96 @@ semver@^5.6.0: resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tar-fs@2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +unbzip2-stream@1.4.3: + version "1.4.3" + resolved "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@8.11.0: + version "8.11.0" + resolved "https://registry.npmmirror.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" From 8072f9e8770139caaee2860318ddea815b402249 Mon Sep 17 00:00:00 2001 From: lidy Date: Thu, 12 Jan 2023 17:24:05 +0800 Subject: [PATCH 088/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E7=94=A8=E6=88=B7=E6=B4=BB=E8=B7=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workflows/checkin.js b/workflows/checkin.js index e012be2a..0bed5fa6 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -163,6 +163,9 @@ class CheckIn { console.log(`SDK状态: ${this.calledSdkSetting ? "加载成功" : "加载失败"}`); console.log(`成长API事件埋点: ${this.calledTrackGrowthEvent ? "调用成功" : "调用失败"}`); console.log(`OnLoad事件埋点: ${this.calledTrackOnloadEvent ? "调用成功" : "调用失败"}`); + console.log("-------------------------"); + + console.log("------浏览器模拟访问-------"); try { await browser.visitJuejinPage("/user/center/signin", this.cookie); console.log("掘金每日签到:页面访问成功"); From 3faea4c4e0928a813ee9547d3871f2449a717907 Mon Sep 17 00:00:00 2001 From: lidy Date: Thu, 12 Jan 2023 17:25:23 +0800 Subject: [PATCH 089/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E7=94=A8=E6=88=B7=E6=B4=BB=E8=B7=83=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/checkin.js b/workflows/checkin.js index 0bed5fa6..eac6b389 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -165,7 +165,7 @@ class CheckIn { console.log(`OnLoad事件埋点: ${this.calledTrackOnloadEvent ? "调用成功" : "调用失败"}`); console.log("-------------------------"); - console.log("------浏览器模拟访问-------"); + console.log("------模拟访问-------"); try { await browser.visitJuejinPage("/user/center/signin", this.cookie); console.log("掘金每日签到:页面访问成功"); From d76cc3ec24ca49a0d6d5dedb8979bf4aaae0b575 Mon Sep 17 00:00:00 2001 From: lidy Date: Thu, 12 Jan 2023 17:27:57 +0800 Subject: [PATCH 090/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/workflows/checkin.js b/workflows/checkin.js index eac6b389..61b245eb 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -166,6 +166,12 @@ class CheckIn { console.log("-------------------------"); console.log("------模拟访问-------"); + try { + await browser.visitJuejinPage("/", this.cookie); + console.log("掘金首页:页面访问成功"); + } catch (e) { + console.log("掘金首页:页面访问失败"); + } try { await browser.visitJuejinPage("/user/center/signin", this.cookie); console.log("掘金每日签到:页面访问成功"); From f56737ad0ef1bde38a2098ffeeb30004903d0ccd Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 09:59:35 +0800 Subject: [PATCH 091/131] v1.7.0 --- lerna.json | 2 +- packages/juejin-helper/package.json | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lerna.json b/lerna.json index 55dec1ea..cf80a1e3 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.6.1" + "version": "1.7.0" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 9ca43686..9c2ef816 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.7.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", @@ -14,7 +14,8 @@ "test:seagold": "ts-node ./test/test-seagold.ts", "test:bugfix": "ts-node ./test/test-bugfix.ts", "test:numpuzz": "ts-node ./test/test-numpuzz.ts", - "test:sdk": "ts-node ./test/test-sdk.ts" + "test:sdk": "ts-node ./test/test-sdk.ts", + "test:browser": "ts-node ./test/test-browser.ts" }, "files": [ "build", @@ -30,6 +31,7 @@ "dependencies": { "axios": "^0.27.2", "jsonwebtoken": "^8.5.1", + "puppeteer": "^19.5.2", "uuid": "^8.3.2" }, "devDependencies": { From de90cc7874aea473c062ec5bb65e39aa40a168f6 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:05:32 +0800 Subject: [PATCH 092/131] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=99=A8api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/juejin-helper/README.md | 33 ++++ packages/juejin-helper/package.json | 2 +- packages/juejin-helper/src/index.ts | 5 + packages/juejin-helper/src/utils/browser.ts | 48 ++++++ packages/juejin-helper/test/test-browser.ts | 33 ++++ yarn.lock | 168 ++++++++++++++++++-- 6 files changed, 279 insertions(+), 10 deletions(-) create mode 100644 packages/juejin-helper/src/utils/browser.ts create mode 100644 packages/juejin-helper/test/test-browser.ts diff --git a/packages/juejin-helper/README.md b/packages/juejin-helper/README.md index e406ab9a..acfc7d00 100644 --- a/packages/juejin-helper/README.md +++ b/packages/juejin-helper/README.md @@ -124,6 +124,39 @@ async function run() { run(); ``` +### Browser 浏览器访问示例 +```javascript +const JuejinHelper = require("juejin-helper"); + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login("你的掘金Cookie"); + + const browser = juejin.browser(); + + await browser.open(); + + try { + await browser.visitPage("/"); + console.log("掘金首页:页面访问成功"); + } catch (e) { + console.log("掘金首页:页面访问失败"); + } + + try { + await browser.visitPage("/user/center/signin"); + console.log("掘金每日签到:页面访问成功"); + } catch (e) { + console.log("掘金每日签到:页面访问失败"); + } + + // const page = await browser.visitPage("/"); + // const screenshotBuffer = await page.screenshot(); // 获取页面快照 + + await browser.close(); +} +``` + ## 问题 ### 如何获取Cookie diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 9c2ef816..a98928c4 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.7.0", + "version": "1.6.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", diff --git a/packages/juejin-helper/src/index.ts b/packages/juejin-helper/src/index.ts index c1310beb..f9fa6213 100644 --- a/packages/juejin-helper/src/index.ts +++ b/packages/juejin-helper/src/index.ts @@ -6,6 +6,7 @@ import Growth from "./growth"; import SeaGold from "./seagold"; import NumPuzz from "./numpuzz"; import Bugfix from "./bugfix"; +import JuejinBrowser from "./utils/browser"; type JuejinUserProps = { user_id: string; @@ -76,6 +77,10 @@ class JuejinHelper { bugfix() { return new Bugfix(this); } + + browser() { + return new JuejinBrowser(this); + } } export default JuejinHelper; diff --git a/packages/juejin-helper/src/utils/browser.ts b/packages/juejin-helper/src/utils/browser.ts new file mode 100644 index 00000000..2b94ed73 --- /dev/null +++ b/packages/juejin-helper/src/utils/browser.ts @@ -0,0 +1,48 @@ +import puppeteer, { Browser, PuppeteerLaunchOptions, Page } from "puppeteer"; +import JuejinHelper from "../index"; + +export default class JuejinBrowser { + juejin: JuejinHelper; + browser: Browser | null = null; + + constructor(juejin: JuejinHelper) { + this.juejin = juejin; + } + + async open(options?: PuppeteerLaunchOptions) { + if (this.browser) { + await this.close(); + } + this.browser = await puppeteer.launch(options); + return this.browser; + } + + async close() { + if (this.browser) { + await this.browser.close(); + this.browser = null; + } + } + + async visitPage(path: string = "", options = {}): Promise { + const opts = Object.assign( + { + viewport: { width: 414, height: 820 } + }, + options + ); + + const browser = this.browser as Browser; + const page = await browser.newPage(); + + await page.setViewport(opts.viewport); + + const cookiesString = this.juejin.cookie.toString(); + const cookiesArray = cookiesString.split(/;\W+/).map(item => item.split("=")); + const cookies = cookiesArray.map(([name, value]) => ({ name, value, domain: ".juejin.cn" })); + await page.setCookie(...cookies); + await page.goto("https://juejin.cn" + path); + + return page; + } +} diff --git a/packages/juejin-helper/test/test-browser.ts b/packages/juejin-helper/test/test-browser.ts new file mode 100644 index 00000000..76ce6dd9 --- /dev/null +++ b/packages/juejin-helper/test/test-browser.ts @@ -0,0 +1,33 @@ +import JuejinHelper from ".."; + +const mockCookie = `juejin-cookies`; + +async function run() { + const juejin = new JuejinHelper(); + await juejin.login(mockCookie); + + const browser = juejin.browser(); + + await browser.open(); + + try { + await browser.visitPage("/"); + console.log("掘金首页:页面访问成功"); + } catch (e) { + console.log("掘金首页:页面访问失败"); + } + + try { + await browser.visitPage("/user/center/signin"); + console.log("掘金每日签到:页面访问成功"); + } catch (e) { + console.log("掘金每日签到:页面访问失败"); + } + + // const page = await browser.visitPage("/user/center/signin"); + // const screenshotBuffer = await page.screenshot(); // 获取页面快照 + + await browser.close(); +} + +run(); diff --git a/yarn.lock b/yarn.lock index e8a62c0a..72c746ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1250,6 +1250,13 @@ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + "@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.32.0": version "5.33.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" @@ -1664,6 +1671,11 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -1674,7 +1686,7 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: +buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -1828,6 +1840,11 @@ chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -2115,6 +2132,16 @@ core-util-is@~1.0.0: resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cosmiconfig@8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" + integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + cosmiconfig@^7.0.0: version "7.0.1" resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" @@ -2138,6 +2165,13 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" +cross-fetch@3.1.5: + version "3.1.5" + resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2162,7 +2196,7 @@ dateformat@^3.0.0: resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2293,6 +2327,11 @@ detect-indent@^6.0.0: resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== +devtools-protocol@0.0.1068969: + version "0.0.1068969" + resolved "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz#8b9a4bc48aed1453bed08d62b07481f9abf4d6d8" + integrity sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ== + dezalgo@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" @@ -2389,7 +2428,7 @@ encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -2786,6 +2825,17 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -2847,6 +2897,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -3072,6 +3129,13 @@ get-port@^5.1.1: resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -3411,7 +3475,7 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^5.0.0: +https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -4509,6 +4573,11 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" @@ -4605,7 +4674,7 @@ node-addon-api@^3.2.1: resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== -node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -4892,7 +4961,7 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -once@^1.3.0, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -5173,6 +5242,11 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + physical-cpu-count@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660" @@ -5247,6 +5321,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +progress@2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise-all-reject-late@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" @@ -5296,11 +5375,51 @@ protocols@^2.0.0, protocols@^2.0.1: resolved "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +proxy-from-env@1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +puppeteer-core@19.5.2: + version "19.5.2" + resolved "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-19.5.2.tgz#9b454b0ef89d3f07e20158dd4ced6ebd85d4dadb" + integrity sha512-Rqk+3kqM+Z2deooTYqcYt8lRtGffJdifWa9td9nbJSjhANWsFouk8kLBNUKycewCCFHM8TZUKS0x28OllavW2A== + dependencies: + cross-fetch "3.1.5" + debug "4.3.4" + devtools-protocol "0.0.1068969" + extract-zip "2.0.1" + https-proxy-agent "5.0.1" + proxy-from-env "1.1.0" + rimraf "3.0.2" + tar-fs "2.1.1" + unbzip2-stream "1.4.3" + ws "8.11.0" + +puppeteer@^19.5.2: + version "19.5.2" + resolved "https://registry.npmmirror.com/puppeteer/-/puppeteer-19.5.2.tgz#f09ed55d5263cacaac4c5818d0d884b1e1d938b0" + integrity sha512-xlqRyrhXhVH114l79Y0XqYXUVG+Yfw4sKlvN55t8Y9DxtA5fzI1uqF8SVXbWK5DUMbD6Jo4lpixTZCTTZGD05g== + dependencies: + cosmiconfig "8.0.0" + https-proxy-agent "5.0.1" + progress "2.0.3" + proxy-from-env "1.1.0" + puppeteer-core "19.5.2" + q@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -5559,7 +5678,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -6016,7 +6135,17 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tar-stream@~2.2.0: +tar-fs@2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4, tar-stream@~2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -6106,7 +6235,7 @@ through2@~0.4.1: readable-stream "~1.0.17" xtend "~2.1.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -6304,6 +6433,14 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unbzip2-stream@1.4.3: + version "1.4.3" + resolved "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -6593,6 +6730,11 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" +ws@8.11.0: + version "8.11.0" + resolved "https://registry.npmmirror.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + xtend@~2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" @@ -6679,6 +6821,14 @@ yargs@^17.4.0: y18n "^5.0.5" yargs-parser "^21.0.0" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 95e0813e48a04d9c8db205b04c74c15c0b211a2c Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:06:27 +0800 Subject: [PATCH 093/131] v1.7.0 --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index a98928c4..9c2ef816 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.6.1", + "version": "1.7.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 81dec6aa7108d3a78610771e90e99670c2347b44 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:09:36 +0800 Subject: [PATCH 094/131] v1.7.1-alpha.0 --- lerna.json | 2 +- packages/juejin-helper/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index cf80a1e3..4309492f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.7.0" + "version": "1.7.1-alpha.0" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 9c2ef816..82a5621e 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.7.0", + "version": "1.7.1-alpha.0", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 26cbc8eeaa31b041bba11cf66567dca4bf5cd721 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:11:39 +0800 Subject: [PATCH 095/131] build: git head --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 82a5621e..4ee70196 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -46,5 +46,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "b0dce421194cb1d81d1ee113db710dec00172316" + "gitHead": "81dec6aa7108d3a78610771e90e99670c2347b44" } From 24dcf41043e5c16b82870967aa6e67ebea17eb23 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:13:51 +0800 Subject: [PATCH 096/131] build: git head --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 4ee70196..d0718d41 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -46,5 +46,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "81dec6aa7108d3a78610771e90e99670c2347b44" + "gitHead": "26cbc8eeaa31b041bba11cf66567dca4bf5cd721" } From 00d4e093b02321d5a8ab45e0c07778195660dc73 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:14:27 +0800 Subject: [PATCH 097/131] build: git head --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index d0718d41..4431455d 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -46,5 +46,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "26cbc8eeaa31b041bba11cf66567dca4bf5cd721" + "gitHead": "24dcf41043e5c16b82870967aa6e67ebea17eb23" } From 215f29cb2d3521eb3504b3901ea59d8f5630f147 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:15:33 +0800 Subject: [PATCH 098/131] build: git head --- packages/juejin-helper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 4431455d..081f3d49 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -46,5 +46,5 @@ "bugs": { "url": "https://github.com/iDerekLi/juejin-helper/issues" }, - "gitHead": "24dcf41043e5c16b82870967aa6e67ebea17eb23" + "gitHead": "00d4e093b02321d5a8ab45e0c07778195660dc73" } From 63819db93c22f255cb1bc803caaba2260873193c Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:16:58 +0800 Subject: [PATCH 099/131] build: 1.7.1-alpha.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c54b2cf9..2af49e00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper-monorepo", - "version": "1.6.1", + "version": "1.7.1-alpha.0", "private": true, "author": "Derek Li", "workspaces": [ From 9073cb2fe232db1224dae280e2c2d831c71a8fd8 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:20:23 +0800 Subject: [PATCH 100/131] v1.7.1 --- lerna.json | 2 +- packages/juejin-helper/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index 4309492f..d72ee2d6 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.7.1-alpha.0" + "version": "1.7.1" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 081f3d49..05513e57 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.7.1-alpha.0", + "version": "1.7.1", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 59de8ed6968caf9f132222f23d581d459b2a0cde Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:21:02 +0800 Subject: [PATCH 101/131] build: 1.7.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2af49e00..f83f7280 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper-monorepo", - "version": "1.7.1-alpha.0", + "version": "1.7.1", "private": true, "author": "Derek Li", "workspaces": [ From 85737c65fe29af2cd3dd51a338e321684ac8d6cb Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 10:42:27 +0800 Subject: [PATCH 102/131] chore: 1.7.1 --- workflows/checkin.js | 30 +++++++++++++++++++----------- workflows/package.json | 7 +++---- workflows/utils/browser.js | 21 --------------------- workflows/yarn.lock | 9 +++++---- 4 files changed, 27 insertions(+), 40 deletions(-) delete mode 100644 workflows/utils/browser.js diff --git a/workflows/checkin.js b/workflows/checkin.js index 61b245eb..5a0d5717 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -2,7 +2,6 @@ const JuejinHelper = require("juejin-helper"); const utils = require("./utils/utils"); const pushMessage = require("./utils/pushMessage"); const env = require("./utils/env"); -const browser = require("./utils/browser"); class CheckIn { username = ""; @@ -167,16 +166,25 @@ class CheckIn { console.log("------模拟访问-------"); try { - await browser.visitJuejinPage("/", this.cookie); - console.log("掘金首页:页面访问成功"); - } catch (e) { - console.log("掘金首页:页面访问失败"); - } - try { - await browser.visitJuejinPage("/user/center/signin", this.cookie); - console.log("掘金每日签到:页面访问成功"); - } catch (e) { - console.log("掘金每日签到:页面访问失败"); + const browser = juejin.browser(); + await browser.open(); + try { + await browser.visitPage("/"); + console.log("掘金首页:页面访问成功"); + } catch (e) { + console.log("掘金首页:页面访问失败"); + } + await utils.wait(utils.randomRangeNumber(2000, 5000)); + try { + await browser.visitPage("/user/center/signin"); + console.log("掘金每日签到:页面访问成功"); + } catch (e) { + console.log("掘金每日签到:页面访问失败"); + } + await utils.wait(utils.randomRangeNumber(2000, 5000)); + await browser.close(); + } catch { + console.log("浏览器API异常"); } console.log("-------------------------"); diff --git a/workflows/package.json b/workflows/package.json index 6bcdbfd7..b987e188 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.7.0", + "version": "1.7.1", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", @@ -11,8 +11,7 @@ "dependencies": { "axios": "^0.27.2", "fast-astar": "^1.0.6", - "juejin-helper": "^1.6.1", - "nodemailer": "^6.7.0", - "puppeteer": "^19.5.2" + "juejin-helper": "^1.7.1", + "nodemailer": "^6.7.0" } } diff --git a/workflows/utils/browser.js b/workflows/utils/browser.js deleted file mode 100644 index 9995b076..00000000 --- a/workflows/utils/browser.js +++ /dev/null @@ -1,21 +0,0 @@ -const puppeteer = require("puppeteer"); - -async function visitJuejinPage(path = "", cookiesString = "") { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - - await page.setViewport({ width: 414, height: 820 }); - - const cookiesArray = cookiesString.split(/;\W+/).map(item => item.split("=")); - const cookies = cookiesArray.map(([name, value]) => ({ name, value, domain: ".juejin.cn" })); - await page.setCookie(...cookies); - await page.goto("https://juejin.cn" + path); - - await new Promise(resolve => setTimeout(resolve, 5000)); - - const screenshot = await page.screenshot(); - await browser.close(); - return screenshot; -} - -module.exports = { visitJuejinPage }; diff --git a/workflows/yarn.lock b/workflows/yarn.lock index 36dfbf9e..dab849ba 100644 --- a/workflows/yarn.lock +++ b/workflows/yarn.lock @@ -358,13 +358,14 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -juejin-helper@^1.6.1: - version "1.6.1" - resolved "https://registry.npmmirror.com/juejin-helper/-/juejin-helper-1.6.1.tgz#4abe25cfad763d4e16c199f0450c01ed866a7254" - integrity sha512-twF0qbKZy6wyQhfCxx6/oUvwurD5DnXkXv57lctDH6g62iloaOdUJFzMN7TIfeSkeO3qdXtpWaO/7QE6krbjxg== +juejin-helper@^1.7.1: + version "1.7.1" + resolved "https://registry.npmjs.org/juejin-helper/-/juejin-helper-1.7.1.tgz#cc4678ef06f31d459ac8b5d1e9823ccb7f45517c" + integrity sha512-lAdJGj1/EvOnJbU6koEvVsDFm8lWheBUr/ODne/WfrIBjeAmA6ufVrOJre1ET8vKpvXPRqJePDS5ndHA9lcXOg== dependencies: axios "^0.27.2" jsonwebtoken "^8.5.1" + puppeteer "^19.5.2" uuid "^8.3.2" jwa@^1.4.1: From 2f9247e7a9dea5921d3f84576ced0143b9c4cfe3 Mon Sep 17 00:00:00 2001 From: lidy Date: Fri, 13 Jan 2023 17:51:55 +0800 Subject: [PATCH 103/131] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E7=AD=BE?= =?UTF-8?q?=E5=88=B0=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 241 +++++++++++++++++++++++++++++-------------- workflows/yarn.lock | 162 ++++++++++++++--------------- 2 files changed, 244 insertions(+), 159 deletions(-) diff --git a/workflows/checkin.js b/workflows/checkin.js index 5a0d5717..8aee9405 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -3,49 +3,31 @@ const utils = require("./utils/utils"); const pushMessage = require("./utils/pushMessage"); const env = require("./utils/env"); -class CheckIn { - username = ""; - cookie = ""; - todayStatus = 0; // 未签到 - incrPoint = 0; - sumPoint = 0; // 当前矿石数 - contCount = 0; // 连续签到天数 - sumCount = 0; // 累计签到天数 - dipStatus = 0; - dipValue = 0; // 沾喜气 - luckyValue = 0; - lottery = []; // 奖池 - pointCost = 0; // 一次抽奖消耗 - freeCount = 0; // 免费抽奖次数 - drawLotteryHistory = {}; - lotteryCount = 0; - luckyValueProbability = 0; - bugStatus = 0; - collectBugCount = 0; - userOwnBug = 0; +class Task { + constructor(juejin) { + this.juejin = juejin; + } - calledSdkSetting = false; - calledTrackGrowthEvent = false; - calledTrackOnloadEvent = false; + taskName = ""; - pageSnapshot = null; + async run() {} - constructor(cookie) { - this.cookie = cookie; + toString() { + return `[${this.taskName}]`; } +} - async run() { - const juejin = new JuejinHelper(); - try { - await juejin.login(this.cookie); - } catch (e) { - console.error(e); - throw new Error("登录失败, 请尝试更新Cookies!"); - } +class GrowthTask extends Task { + taskName = "成长任务"; - this.username = juejin.getUser().user_name; + todayStatus = 0; // 未签到 + incrPoint = 0; + sumPoint = 0; // 当前矿石数 + contCount = 0; // 连续签到天数 + sumCount = 0; // 累计签到天数 - const growth = juejin.growth(); + async run() { + const growth = this.juejin.growth(); const todayStatus = await growth.getTodayStatus(); if (!todayStatus) { @@ -61,6 +43,18 @@ class CheckIn { const counts = await growth.getCounts(); this.contCount = counts.cont_count; this.sumCount = counts.sum_count; + } +} + +class DipLuckyTask extends Task { + taskName = "沾喜气"; + + dipStatus = 0; + dipValue = 0; + luckyValue = 0; + + async run() { + const growth = this.juejin.growth(); const luckyusersResult = await growth.getLotteriesLuckyUsers(); if (luckyusersResult.count > 0) { @@ -76,6 +70,47 @@ class CheckIn { const luckyResult = await growth.getMyLucky(); this.luckyValue = luckyResult.total_value; + } +} + +class BugfixTask extends Task { + taskName = "Bugfix"; + + bugStatus = 0; + collectBugCount = 0; + userOwnBug = 0; + + async run() { + const bugfix = this.juejin.bugfix(); + + const competition = await bugfix.getCompetition(); + const bugfixInfo = await bugfix.getUser(competition); + this.userOwnBug = bugfixInfo.user_own_bug; + + try { + const notCollectBugList = await bugfix.getNotCollectBugList(); + await bugfix.collectBugBatch(notCollectBugList); + this.bugStatus = 1; + this.collectBugCount = notCollectBugList.length; + this.userOwnBug += this.collectBugCount; + } catch (e) { + this.bugStatus = 2; + } + } +} + +class LotteriesTask extends Task { + taskName = "抽奖"; + + lottery = []; // 奖池 + pointCost = 0; // 一次抽奖消耗 + freeCount = 0; // 免费抽奖次数 + drawLotteryHistory = {}; + lotteryCount = 0; + luckyValueProbability = 0; + + async run(growthTask, dipLuckyTask) { + const growth = this.juejin.growth(); const lotteryConfig = await growth.getLotteryConfig(); this.lottery = lotteryConfig.lottery; @@ -87,13 +122,13 @@ class CheckIn { while (freeCount > 0) { const result = await growth.drawLottery(); this.drawLotteryHistory[result.lottery_id] = (this.drawLotteryHistory[result.lottery_id] || 0) + 1; - this.luckyValue = result.total_lucky_value; + dipLuckyTask.luckyValue = result.total_lucky_value; freeCount--; this.lotteryCount++; await utils.wait(utils.randomRangeNumber(300, 1000)); } - this.sumPoint = await growth.getCurrentPoint(); + growthTask.sumPoint = await growth.getCurrentPoint(); const getProbabilityOfWinning = sumPoint => { const pointCost = this.pointCost; @@ -103,31 +138,25 @@ class CheckIn { for (let i = 0, length = Math.floor(totalDrawsNumber * 0.65); i < length; i++) { supplyPoint += Math.ceil(Math.random() * 100); } - const luckyValue = ((sumPoint + supplyPoint) / pointCost) * luckyValueCost + this.luckyValue; + const luckyValue = ((sumPoint + supplyPoint) / pointCost) * luckyValueCost + dipLuckyTask.luckyValue; return luckyValue / 6000; }; - this.luckyValueProbability = getProbabilityOfWinning(this.sumPoint); + this.luckyValueProbability = getProbabilityOfWinning(growthTask.sumPoint); + } +} - // 收集bug - const bugfix = juejin.bugfix(); +class SdkTask extends Task { + taskName = "埋点"; - const competition = await bugfix.getCompetition(); - const bugfixInfo = await bugfix.getUser(competition); - this.userOwnBug = bugfixInfo.user_own_bug; + calledSdkSetting = false; + calledTrackGrowthEvent = false; + calledTrackOnloadEvent = false; - try { - const notCollectBugList = await bugfix.getNotCollectBugList(); - await bugfix.collectBugBatch(notCollectBugList); - this.bugStatus = 1; - this.collectBugCount = notCollectBugList.length; - this.userOwnBug += this.collectBugCount; - } catch (e) { - this.bugStatus = 2; - } + async run() { + console.log("------事件埋点追踪-------"); - // 调用埋点 - const sdk = juejin.sdk(); + const sdk = this.juejin.sdk(); try { await sdk.slardarSDKSetting(); @@ -135,6 +164,7 @@ class CheckIn { } catch { this.calledSdkSetting = false; } + console.log(`SDK状态: ${this.calledSdkSetting ? "加载成功" : "加载失败"}`); try { const result = await sdk.mockTrackGrowthEvent(); @@ -146,6 +176,7 @@ class CheckIn { } catch { this.calledTrackGrowthEvent = false; } + console.log(`成长API事件埋点: ${this.calledTrackGrowthEvent ? "调用成功" : "调用失败"}`); try { const result = await sdk.mockTrackOnloadEvent(); @@ -157,16 +188,19 @@ class CheckIn { } catch { this.calledTrackOnloadEvent = false; } - - console.log("------事件埋点追踪-------"); - console.log(`SDK状态: ${this.calledSdkSetting ? "加载成功" : "加载失败"}`); - console.log(`成长API事件埋点: ${this.calledTrackGrowthEvent ? "调用成功" : "调用失败"}`); console.log(`OnLoad事件埋点: ${this.calledTrackOnloadEvent ? "调用成功" : "调用失败"}`); + console.log("-------------------------"); + } +} - console.log("------模拟访问-------"); +class MockVisitTask extends Task { + taskName = "模拟访问"; + + async run() { + console.log("--------模拟访问---------"); try { - const browser = juejin.browser(); + const browser = this.juejin.browser(); await browser.open(); try { await browser.visitPage("/"); @@ -187,14 +221,53 @@ class CheckIn { console.log("浏览器API异常"); } console.log("-------------------------"); + } +} + +class CheckIn { + cookie = ""; + username = ""; + + constructor(cookie) { + this.cookie = cookie; + } + async run() { + const juejin = new JuejinHelper(); + try { + await juejin.login(this.cookie); + } catch (e) { + console.error(e.message); + throw new Error("登录失败, 请尝试更新Cookies!"); + } + + this.username = juejin.getUser().user_name; + + this.growthTask = new GrowthTask(juejin); + this.dipLuckyTask = new DipLuckyTask(juejin); + this.lotteriesTask = new LotteriesTask(juejin); + this.bugfixTask = new BugfixTask(juejin); + this.sdkTask = new SdkTask(juejin); + this.mockVisitTask = new MockVisitTask(juejin); + + await this.mockVisitTask.run(); + await this.sdkTask.run(); + console.log(`运行 ${this.growthTask.taskName}`); + await this.growthTask.run(); + console.log(`运行 ${this.dipLuckyTask.taskName}`); + await this.dipLuckyTask.run(); + console.log(`运行 ${this.lotteriesTask.taskName}`); + await this.lotteriesTask.run(this.growthTask, this.dipLuckyTask); + console.log(`运行 ${this.bugfixTask.taskName}`); + await this.bugfixTask.run(); await juejin.logout(); + console.log("-------------------------"); } toString() { - const drawLotteryHistory = Object.entries(this.drawLotteryHistory) + const drawLotteryHistory = Object.entries(this.lotteriesTask.drawLotteryHistory) .map(([lottery_id, count]) => { - const lotteryItem = this.lottery.find(item => item.lottery_id === lottery_id); + const lotteryItem = this.lotteriesTask.lottery.find(item => item.lottery_id === lottery_id); if (lotteryItem) { return `${lotteryItem.lottery_name}: ${count}`; } @@ -204,24 +277,36 @@ class CheckIn { return ` 掘友: ${this.username} -${this.todayStatus === 1 ? `签到成功 +${this.incrPoint} 矿石` : this.todayStatus === 2 ? "今日已完成签到" : "签到失败"} -${this.dipStatus === 1 ? `沾喜气 +${this.dipValue} 幸运值` : this.dipStatus === 2 ? "今日已经沾过喜气" : "沾喜气失败"} ${ - this.bugStatus === 1 - ? this.collectBugCount > 0 - ? `收集Bug +${this.collectBugCount}` + { + 0: "签到失败", + 1: `签到成功 +${this.growthTask.incrPoint} 矿石`, + 2: "今日已完成签到" + }[this.growthTask.todayStatus] +} +${ + { + 0: "沾喜气失败", + 1: `沾喜气 +${this.dipLuckyTask.dipValue} 幸运值`, + 2: "今日已经沾过喜气" + }[this.dipLuckyTask.dipStatus] +} +${ + this.bugfixTask.bugStatus === 1 + ? this.bugfixTask.collectBugCount > 0 + ? `收集Bug +${this.bugfixTask.collectBugCount}` : "没有可收集Bug" : "收集Bug失败" } -连续签到天数 ${this.contCount} -累计签到天数 ${this.sumCount} -当前矿石数 ${this.sumPoint} -当前未消除Bug数量 ${this.userOwnBug} -当前幸运值 ${this.luckyValue}/6000 -预测All In矿石累计幸运值比率 ${(this.luckyValueProbability * 100).toFixed(2) + "%"} -抽奖总次数 ${this.lotteryCount} -免费抽奖次数 ${this.freeCount} -${this.lotteryCount > 0 ? "==============\n" + drawLotteryHistory + "\n==============" : ""} +连续签到天数 ${this.growthTask.contCount} +累计签到天数 ${this.growthTask.sumCount} +当前矿石数 ${this.growthTask.sumPoint} +当前未消除Bug数量 ${this.bugfixTask.userOwnBug} +当前幸运值 ${this.dipLuckyTask.luckyValue}/6000 +预测All In矿石累计幸运值比率 ${(this.lotteriesTask.luckyValueProbability * 100).toFixed(2) + "%"} +抽奖总次数 ${this.lotteriesTask.lotteryCount} +免费抽奖次数 ${this.lotteriesTask.freeCount} +${this.lotteriesTask.lotteryCount > 0 ? "==============\n" + drawLotteryHistory + "\n==============" : ""} `.trim(); } } diff --git a/workflows/yarn.lock b/workflows/yarn.lock index dab849ba..49aefa9e 100644 --- a/workflows/yarn.lock +++ b/workflows/yarn.lock @@ -4,19 +4,19 @@ "@babel/code-frame@^7.0.0": version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" "@babel/helper-validator-identifier@^7.18.6": version "7.19.1" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -25,33 +25,33 @@ "@types/node@*": version "18.11.18" - resolved "https://registry.npmmirror.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== "@types/yauzl@^2.9.1": version "2.10.0" - resolved "https://registry.npmmirror.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: "@types/node" "*" agent-base@6: version "6.0.2" - resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== asynckit@^0.4.0: @@ -69,17 +69,17 @@ axios@^0.27.2: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bl@^4.0.3: version "4.1.0" - resolved "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -88,7 +88,7 @@ bl@^4.0.3: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -96,7 +96,7 @@ brace-expansion@^1.1.7: buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-equal-constant-time@1.0.1: @@ -106,7 +106,7 @@ buffer-equal-constant-time@1.0.1: buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -114,12 +114,12 @@ buffer@^5.2.1, buffer@^5.5.0: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== chalk@^2.0.0: version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -128,19 +128,19 @@ chalk@^2.0.0: chownr@^1.1.1: version "1.1.4" - resolved "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== combined-stream@^1.0.8: @@ -152,12 +152,12 @@ combined-stream@^1.0.8: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== cosmiconfig@8.0.0: version "8.0.0" - resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== dependencies: import-fresh "^3.2.1" @@ -167,14 +167,14 @@ cosmiconfig@8.0.0: cross-fetch@3.1.5: version "3.1.5" - resolved "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== dependencies: node-fetch "2.6.7" debug@4, debug@4.3.4, debug@^4.1.1: version "4.3.4" - resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" @@ -186,7 +186,7 @@ delayed-stream@~1.0.0: devtools-protocol@0.0.1068969: version "0.0.1068969" - resolved "https://registry.npmmirror.com/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz#8b9a4bc48aed1453bed08d62b07481f9abf4d6d8" + resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz#8b9a4bc48aed1453bed08d62b07481f9abf4d6d8" integrity sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ== ecdsa-sig-formatter@1.0.11: @@ -198,26 +198,26 @@ ecdsa-sig-formatter@1.0.11: end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== extract-zip@2.0.1: version "2.0.1" - resolved "https://registry.npmmirror.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: debug "^4.1.1" @@ -233,15 +233,15 @@ fast-astar@^1.0.6: fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" follow-redirects@^1.14.9: - version "1.15.1" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== form-data@^4.0.0: version "4.0.0" @@ -254,24 +254,24 @@ form-data@^4.0.0: fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" glob@^7.1.3: version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -283,12 +283,12 @@ glob@^7.1.3: has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== https-proxy-agent@5.0.1: version "5.0.1" - resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -296,12 +296,12 @@ https-proxy-agent@5.0.1: ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -309,7 +309,7 @@ import-fresh@^3.2.1: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -317,29 +317,29 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== jsonwebtoken@^8.5.1: @@ -387,7 +387,7 @@ jws@^3.2.2: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lodash.includes@^4.3.0: @@ -439,19 +439,19 @@ mime-types@^2.1.12: minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" mkdirp-classic@^0.5.2: version "0.5.3" - resolved "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== ms@2.1.2: version "2.1.2" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: @@ -461,33 +461,33 @@ ms@^2.1.1: node-fetch@2.6.7: version "2.6.7" - resolved "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" nodemailer@^6.7.0: - version "6.7.7" - resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz#e522fbd7507b81c51446d3f79c4603bf00083ddd" - integrity sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA== + version "6.9.0" + resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.0.tgz#a17488ff470ff9edf1bb31d9ec23079bc94f7dd3" + integrity sha512-jFaCEGTeT3E/m/5R2MHWiyQH3pSARECRUDM+1hokOYc3lQAAG7ASuy+2jIsYVf+RVa9zePopSQwKNVFH8DKUpA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -497,32 +497,32 @@ parse-json@^5.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pend@~1.2.0: version "1.2.0" - resolved "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== progress@2.0.3: version "2.0.3" - resolved "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== proxy-from-env@1.1.0: version "1.1.0" - resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -530,7 +530,7 @@ pump@^3.0.0: puppeteer-core@19.5.2: version "19.5.2" - resolved "https://registry.npmmirror.com/puppeteer-core/-/puppeteer-core-19.5.2.tgz#9b454b0ef89d3f07e20158dd4ced6ebd85d4dadb" + resolved "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.5.2.tgz#9b454b0ef89d3f07e20158dd4ced6ebd85d4dadb" integrity sha512-Rqk+3kqM+Z2deooTYqcYt8lRtGffJdifWa9td9nbJSjhANWsFouk8kLBNUKycewCCFHM8TZUKS0x28OllavW2A== dependencies: cross-fetch "3.1.5" @@ -546,7 +546,7 @@ puppeteer-core@19.5.2: puppeteer@^19.5.2: version "19.5.2" - resolved "https://registry.npmmirror.com/puppeteer/-/puppeteer-19.5.2.tgz#f09ed55d5263cacaac4c5818d0d884b1e1d938b0" + resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-19.5.2.tgz#f09ed55d5263cacaac4c5818d0d884b1e1d938b0" integrity sha512-xlqRyrhXhVH114l79Y0XqYXUVG+Yfw4sKlvN55t8Y9DxtA5fzI1uqF8SVXbWK5DUMbD6Jo4lpixTZCTTZGD05g== dependencies: cosmiconfig "8.0.0" @@ -557,7 +557,7 @@ puppeteer@^19.5.2: readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" - resolved "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" @@ -566,12 +566,12 @@ readable-stream@^3.1.1, readable-stream@^3.4.0: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== rimraf@3.0.2: version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -588,21 +588,21 @@ semver@^5.6.0: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" tar-fs@2.1.1: version "2.1.1" - resolved "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -612,7 +612,7 @@ tar-fs@2.1.1: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -623,17 +623,17 @@ tar-stream@^2.1.4: through@^2.3.8: version "2.3.8" - resolved "https://registry.npmmirror.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== unbzip2-stream@1.4.3: version "1.4.3" - resolved "https://registry.npmmirror.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== dependencies: buffer "^5.2.1" @@ -641,7 +641,7 @@ unbzip2-stream@1.4.3: util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^8.3.2: @@ -651,12 +651,12 @@ uuid@^8.3.2: webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -664,17 +664,17 @@ whatwg-url@^5.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@8.11.0: version "8.11.0" - resolved "https://registry.npmmirror.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + resolved "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== yauzl@^2.10.0: version "2.10.0" - resolved "https://registry.npmmirror.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" From b2cc5fc0e9740304f09dd7991484e07ad6645094 Mon Sep 17 00:00:00 2001 From: derek Date: Sat, 14 Jan 2023 15:24:39 +0800 Subject: [PATCH 104/131] =?UTF-8?q?style:=20=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/seagold.js | 58 +++++++++++++++------------------- workflows/utils/utils.js | 2 +- workflows/utils/weixinrobot.js | 26 +++++++-------- 3 files changed, 40 insertions(+), 46 deletions(-) diff --git a/workflows/seagold.js b/workflows/seagold.js index a1db259d..ea3c86d5 100644 --- a/workflows/seagold.js +++ b/workflows/seagold.js @@ -1,6 +1,6 @@ const JuejinHelper = require("juejin-helper"); const utils = require("./utils/utils"); -const {Grid, Astar} = require("fast-astar"); +const { Grid, Astar } = require("fast-astar"); const pushMessage = require("./utils/pushMessage"); const env = require("./utils/env"); @@ -13,18 +13,18 @@ class Seagold { } nodeRules = [ - {code: 0, hasBounty: false, isWall: false, name: "空地"}, - {code: 2, hasBounty: true, isWall: false, name: "矿石", isBest: true}, - {code: 3, hasBounty: false, isWall: false, name: "星星"}, - {code: 4, hasBounty: false, isWall: true, name: "贝壳"}, - {code: 5, hasBounty: false, isWall: true, name: "水母"}, - {code: 6, hasBounty: false, isWall: true, name: "石头"}, - {code: 10, hasBounty: true, isWall: false, name: "上指令"}, - {code: 11, hasBounty: true, isWall: false, name: "下指令"}, - {code: 12, hasBounty: true, isWall: false, name: "左指令"}, - {code: 13, hasBounty: true, isWall: false, name: "右指令"}, - {code: 14, hasBounty: true, isWall: false, name: "跳跃指令"}, - {code: 15, hasBounty: true, isWall: false, name: "循环指令"} + { code: 0, hasBounty: false, isWall: false, name: "空地" }, + { code: 2, hasBounty: true, isWall: false, name: "矿石", isBest: true }, + { code: 3, hasBounty: false, isWall: false, name: "星星" }, + { code: 4, hasBounty: false, isWall: true, name: "贝壳" }, + { code: 5, hasBounty: false, isWall: true, name: "水母" }, + { code: 6, hasBounty: false, isWall: true, name: "石头" }, + { code: 10, hasBounty: true, isWall: false, name: "上指令" }, + { code: 11, hasBounty: true, isWall: false, name: "下指令" }, + { code: 12, hasBounty: true, isWall: false, name: "左指令" }, + { code: 13, hasBounty: true, isWall: false, name: "右指令" }, + { code: 14, hasBounty: true, isWall: false, name: "跳跃指令" }, + { code: 15, hasBounty: true, isWall: false, name: "循环指令" } ]; debug = false; @@ -39,7 +39,7 @@ class Seagold { gameInfo = { gameId: "", mapData: [], - curPos: {x: 0, y: 0}, + curPos: { x: 0, y: 0 }, blockData: { moveUp: 0, moveDown: 0, @@ -61,7 +61,7 @@ class Seagold { this.gameInfo = { gameId: "", mapData: [], - curPos: {x: 0, y: 0}, + curPos: { x: 0, y: 0 }, blockData: { moveUp: 0, moveDown: 0, @@ -87,7 +87,7 @@ class Seagold { async gameStart() { if (this.isGaming) return; const roleId = Math.ceil(Math.random() * 3); - const gameInfo = await this.gameApi.gameStart({roleId}); + const gameInfo = await this.gameApi.gameStart({ roleId }); this.gameInfo = { roleId, @@ -124,9 +124,7 @@ class Seagold { const bestNode = this.getBestNode(bmmap); const path = this.getRoutePath(bmmap, curNode, bestNode); if (!Array.isArray(path)) { - throw new Error( - `路径 ${JSON.stringify(path)} 无法在地图 ${JSON.stringify(this.getMaze(bmmap))} 行进.` - ); + throw new Error(`路径 ${JSON.stringify(path)} 无法在地图 ${JSON.stringify(this.getMaze(bmmap))} 行进.`); } const commands = this.getCommands(path); if (commands.length <= 0) { @@ -173,11 +171,11 @@ class Seagold { for (let x = 0; x < list.length; x++) { const cNode = list[x]; if (cNode === node) { - return {x, y}; + return { x, y }; } } } - return {x: 0, y: 0}; + return { x: 0, y: 0 }; } getRoutePath(map, startNode, endNode) { @@ -227,7 +225,7 @@ class Seagold { // 获取范围地图 getBMMap() { - const {mapData, blockData, curPos} = this.gameInfo; + const { mapData, blockData, curPos } = this.gameInfo; const minX = Math.max(curPos.x - blockData.moveLeft, 0); const maxX = Math.min(curPos.x + blockData.moveRight, mapData[0].length - 1); const minY = Math.max(curPos.y - blockData.moveUp, 0); @@ -251,8 +249,8 @@ class Seagold { getBestNode(map) { let bestNode = null; - map.forEach((row) => { - row.forEach((node) => { + map.forEach(row => { + row.forEach(node => { if (node.isBest && bestNode === null) { bestNode = node; } else if (node.isBest && node.bounty > bestNode.bounty) { @@ -294,7 +292,7 @@ class Seagold { } getNodeRule(secret) { - return this.nodeRules.find((rule) => { + return this.nodeRules.find(rule => { const reg = new RegExp(`^${rule.code}`); return reg.test(secret); }); @@ -388,17 +386,13 @@ class Seagold { toString() { const userInfo = this.userInfo; const gameLives = this.history - .map((game) => `${game.gameId}\n 挖取 ${game.gameDiamond}\n 获得 ${game.realDiamond}`) + .map(game => `${game.gameId}\n 挖取 ${game.gameDiamond}\n 获得 ${game.realDiamond}`) .join("\n"); return ` 掘友: ${userInfo.name} 今日限制矿石数 ${userInfo.todayLimitDiamond} -${ - userInfo.todayDiamond < userInfo.todayLimitDiamond - ? `今日获取矿石数 ${userInfo.todayDiamond}` - : "今日获取已达上限" -} +${userInfo.todayDiamond < userInfo.todayLimitDiamond ? `今日获取矿石数 ${userInfo.todayDiamond}` : "今日获取已达上限"} ${this.history.length ? `\n游戏记录\n${gameLives}` : ""} `.trim(); } @@ -426,7 +420,7 @@ async function run(args) { }); } -run(process.argv.splice(2)).catch((error) => { +run(process.argv.splice(2)).catch(error => { pushMessage({ subject: "海底掘金游戏", html: ` diff --git a/workflows/utils/utils.js b/workflows/utils/utils.js index 62b8d950..61a108e9 100644 --- a/workflows/utils/utils.js +++ b/workflows/utils/utils.js @@ -1,6 +1,6 @@ module.exports = { async wait(time = 0) { - return new Promise((resolve) => setTimeout(resolve, time)); + return new Promise(resolve => setTimeout(resolve, time)); }, randomRangeNumber(start = 500, end = 1000) { return (Math.random() * (end - start) + start) >> 0; diff --git a/workflows/utils/weixinrobot.js b/workflows/utils/weixinrobot.js index c185dca0..af6e15c0 100644 --- a/workflows/utils/weixinrobot.js +++ b/workflows/utils/weixinrobot.js @@ -1,20 +1,20 @@ -const axios = require('axios'); +const axios = require("axios"); const env = require("./env"); async function weixinrobot({ subject, text, html }) { - axios.post(env.WEIXIN_WEBHOOK,{ - "msgtype": "text", - "text": { - "content": `${subject}\n${text || html}` - } + axios + .post(env.WEIXIN_WEBHOOK, { + msgtype: "text", + text: { + content: `${subject}\n${text || html}` + } }) - .then(response => { - console.log(response.data); - }) - .catch(error => { - console.log(error) - }) - + .then(response => { + console.log(response.data); + }) + .catch(error => { + console.log(error); + }); } module.exports = weixinrobot; From 5edec85af615102885ea21cf0253b32bcb4a1d86 Mon Sep 17 00:00:00 2001 From: derek Date: Sat, 14 Jan 2023 17:05:57 +0800 Subject: [PATCH 105/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=8E=A8=E9=80=81=E5=A5=97=E4=BB=B6=E5=92=8Cts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 16 +-- workflows/package.json | 7 +- workflows/resources/logo.svg | 16 +++ workflows/tsconfig.json | 19 ++++ workflows/utils/notification-kit.ts | 162 ++++++++++++++++++++++++++++ workflows/yarn.lock | 111 +++++++++++++++++++ 6 files changed, 323 insertions(+), 8 deletions(-) create mode 100644 workflows/resources/logo.svg create mode 100644 workflows/tsconfig.json create mode 100644 workflows/utils/notification-kit.ts diff --git a/workflows/checkin.js b/workflows/checkin.js index 8aee9405..19e15993 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -1,6 +1,6 @@ +import notification from "./utils/notification-kit"; const JuejinHelper = require("juejin-helper"); const utils = require("./utils/utils"); -const pushMessage = require("./utils/pushMessage"); const env = require("./utils/env"); class Task { @@ -327,16 +327,18 @@ async function run(args) { } const message = messageList.join(`\n${"-".repeat(15)}\n`); - pushMessage({ - subject: "掘金每日签到", - text: message + notification.pushMessage({ + title: "掘金每日签到", + content: message, + msgtype: "text" }); } run(process.argv.splice(2)).catch(error => { - pushMessage({ - subject: "掘金每日签到", - html: `Error
${error.message}
` + notification.pushMessage({ + title: "掘金每日签到", + content: `Error
${error.message}
`, + msgtype: "html" }); throw error; diff --git a/workflows/package.json b/workflows/package.json index b987e188..352eca86 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -5,7 +5,8 @@ "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", "scripts": { - "checkin": "node checkin.js", + "test": "ts-node ./utils/notification-kit.ts", + "checkin": "ts-node checkin.js", "seagold": "node seagold.js" }, "dependencies": { @@ -13,5 +14,9 @@ "fast-astar": "^1.0.6", "juejin-helper": "^1.7.1", "nodemailer": "^6.7.0" + }, + "devDependencies": { + "@types/nodemailer": "^6.4.7", + "ts-node": "^10.9.1" } } diff --git a/workflows/resources/logo.svg b/workflows/resources/logo.svg new file mode 100644 index 00000000..d6841e98 --- /dev/null +++ b/workflows/resources/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/workflows/tsconfig.json b/workflows/tsconfig.json new file mode 100644 index 00000000..eeb538a4 --- /dev/null +++ b/workflows/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "incremental": false, + "experimentalDecorators": true + }, + "exclude": ["node_modules"], + "include": ["src/**/*"] +} diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts new file mode 100644 index 00000000..b8e2e669 --- /dev/null +++ b/workflows/utils/notification-kit.ts @@ -0,0 +1,162 @@ +import path from "path"; +import nodemailer from "nodemailer"; +import axios from "axios"; +import env from "./env"; + +interface NotificationOptions { + title: string; + content: string; + msgtype?: "text" | "html"; +} + +interface EmailOptions extends NotificationOptions {} +interface DingTalkOptions extends NotificationOptions {} +interface PushPlusOptions extends NotificationOptions {} +interface WeComOptions extends NotificationOptions {} +interface WeiXinOptions extends WeComOptions {} + +export class NotificationKit { + /** + * 邮件推送 + * @param options + */ + async email(options: EmailOptions) { + const auth: { user: string | undefined; pass: string | undefined } = { + user: env.EMAIL_USER, // generated ethereal user + pass: env.EMAIL_PASS // generated ethereal password + }; + + if (!auth.user || !auth.pass) { + throw new Error("邮箱功能不可用, 请先配置邮箱用户和密码。"); + } + + const transporter = nodemailer.createTransport({ + host: "smtp." + (auth.user as any).match(/@(.*)/)[1], + secure: true, + port: 465, + auth, + tls: { + // do not fail on invalid certs + rejectUnauthorized: false + } + }); + + const template = ` +
+
+ 稀土掘金 +
+
+ ${options.msgtype === "html" ? options.content : `
${options.content}
`} +
+
+ 稀土掘金助手 | + Copyright © ${new Date().getFullYear()} Derek Li. +
+
+`.trim(); + + await transporter.sendMail({ + from: `稀土掘金助手 <${auth.user}>`, // sender address('"Fred Foo 👻" ') + to: env.EMAIL_TO, // list of receivers + subject: options.title, // Subject line + // text, // plain text body + html: template, // html body + attachments: [ + { + filename: "logo.svg", + path: path.resolve(__dirname, "../resources/logo.svg"), + cid: "logo.svg" //same cid value as in the html img src + } + ] + }); + } + + /** + * PushPlus推送 + * @param options + */ + async pushplus(options: PushPlusOptions) { + const token: string | undefined = env.PUSHPLUS_TOKEN; + if (typeof token !== "string") { + throw new Error("未配置PushPlus Token。"); + } + + const config = { + token, + title: options.title, + content: options.content, + topic: "", + template: "html", + channel: "wechat", + webhook: "", + callbackUrl: "", + timestamp: "" + }; + + return axios.post("http://www.pushplus.plus/send", config, { + headers: { + "Content-Type": "application/json" + } + }); + } + + /** + * 钉钉Webhook + * @param options + */ + async dingtalkWebhook(options: DingTalkOptions) { + const url: string | undefined = env.DINGDING_WEBHOOK; + if (typeof url !== "string") { + throw new Error("未配置钉钉Webhook。"); + } + + return axios.post(url, { + msgtype: "text", + text: { + content: `${options.title}\n${options.content}` + } + }); + // .then(res => console.log(JSON.stringify(res.data))); + } + + /** + * 企业微信Webhook + * @param options + */ + async wecomWebhook(options: WeComOptions) { + const url: string | undefined = env.WEIXIN_WEBHOOK; + if (typeof url !== "string") { + throw new Error("未配置企业微信Webhook。"); + } + + return axios.post(url, { + msgtype: "text", + text: { + content: `${options.title}\n${options.content}` + } + }); + } + + async weixinWebhook(options: WeiXinOptions) { + return this.wecomWebhook(options); + } + + async pushMessage(options: NotificationOptions) { + const trycatch = async (name: string, fn: Function) => { + try { + await fn(options); + console.log(`[${name}]: 消息推送成功!`); + } catch (e: any) { + console.log(`[${name}]: 消息推送失败! 原因: ${e.message}`); + } + }; + + await trycatch("邮件", this.email.bind(this)); + await trycatch("PushPlus", this.pushplus.bind(this)); + await trycatch("钉钉", this.dingtalkWebhook.bind(this)); + await trycatch("微信", this.wecomWebhook.bind(this)); + } +} + +export default new NotificationKit(); diff --git a/workflows/yarn.lock b/workflows/yarn.lock index 49aefa9e..a7eb19d4 100644 --- a/workflows/yarn.lock +++ b/workflows/yarn.lock @@ -23,11 +23,63 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "@types/node@*": version "18.11.18" resolved "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== +"@types/nodemailer@^6.4.7": + version "6.4.7" + resolved "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.7.tgz#658f4bca47c1a895b1d7e054b3b54030a5e1f5e0" + integrity sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg== + dependencies: + "@types/node" "*" + "@types/yauzl@^2.9.1": version "2.10.0" resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" @@ -35,6 +87,16 @@ dependencies: "@types/node" "*" +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.8.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== + agent-base@6: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -49,6 +111,11 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -165,6 +232,11 @@ cosmiconfig@8.0.0: parse-json "^5.0.0" path-type "^4.0.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-fetch@3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -189,6 +261,11 @@ devtools-protocol@0.0.1068969: resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1068969.tgz#8b9a4bc48aed1453bed08d62b07481f9abf4d6d8" integrity sha512-ATFTrPbY1dKYhPPvpjtwWKSK2mIwGmRwX54UASn9THEuIZCe2n9k3vVuMmt6jWeL+e5QaaguEv/pMyR+JQB7VQ== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -425,6 +502,11 @@ lodash.once@^4.0.0: resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -631,6 +713,25 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + unbzip2-stream@1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -649,6 +750,11 @@ uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -679,3 +785,8 @@ yauzl@^2.10.0: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 233251f57e50e27009236a5e6fbd0c143b722e3c Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 13:54:07 +0800 Subject: [PATCH 106/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=8E=A8=E9=80=81=E5=A5=97=E4=BB=B6=E5=92=8Cts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/package.json | 7 ++-- workflows/seagold.js | 20 +++++----- workflows/utils/notification-kit.ts | 61 ++++++++++++++++++++++++++--- 3 files changed, 69 insertions(+), 19 deletions(-) diff --git a/workflows/package.json b/workflows/package.json index 352eca86..535c20b8 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -5,9 +5,8 @@ "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", "scripts": { - "test": "ts-node ./utils/notification-kit.ts", "checkin": "ts-node checkin.js", - "seagold": "node seagold.js" + "seagold": "ts-node seagold.js" }, "dependencies": { "axios": "^0.27.2", @@ -18,5 +17,7 @@ "devDependencies": { "@types/nodemailer": "^6.4.7", "ts-node": "^10.9.1" - } + }, + "homepage": "https://github.com/iDerekLi/juejin-helper", + "releases_url": "https://api.github.com/repos/iDerekLi/juejin-helper/releases" } diff --git a/workflows/seagold.js b/workflows/seagold.js index ea3c86d5..8a2846c1 100644 --- a/workflows/seagold.js +++ b/workflows/seagold.js @@ -1,7 +1,7 @@ +import notification from "./utils/notification-kit"; const JuejinHelper = require("juejin-helper"); const utils = require("./utils/utils"); const { Grid, Astar } = require("fast-astar"); -const pushMessage = require("./utils/pushMessage"); const env = require("./utils/env"); class Seagold { @@ -414,20 +414,18 @@ async function run(args) { } const message = messageList.join(`\n${"-".repeat(15)}\n`); - pushMessage({ - subject: "海底掘金游戏", - text: message + notification.pushMessage({ + title: "海底掘金游戏", + content: message, + msgtype: "text" }); } run(process.argv.splice(2)).catch(error => { - pushMessage({ - subject: "海底掘金游戏", - html: ` -Error -
${error.message}
-
如果版本过低请前往升级: juejin-helper
-`.trim() + notification.pushMessage({ + title: "海底掘金游戏", + content: `Error
${error.message}
`, + msgtype: "html" }); throw error; diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index b8e2e669..9cab0700 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -2,6 +2,7 @@ import path from "path"; import nodemailer from "nodemailer"; import axios from "axios"; import env from "./env"; +import pkg from "../package.json"; interface NotificationOptions { title: string; @@ -42,15 +43,45 @@ export class NotificationKit { }); const template = ` +
-
+
稀土掘金
-
+ ${ + this.newVersion.has + ? `稀土掘金助手 ${this.newVersion.name} 现在可用 ›` + : "" + } +
${options.msgtype === "html" ? options.content : `
${options.content}
`}
-
- 稀土掘金助手 | +
+ 稀土掘金助手v${pkg.version} | Copyright © ${new Date().getFullYear()} Derek Li.
@@ -142,6 +173,21 @@ export class NotificationKit { return this.wecomWebhook(options); } + newVersion = { + has: false, + name: pkg.version, + url: pkg.homepage + }; + + async checkupdate() { + try { + const result = await axios.get(pkg.releases_url); + const data = result.data[0]; + this.newVersion.has = pkg.version < data.tag_name.replace(/^v/, ""); + this.newVersion.name = data.tag_name; + } catch (e) {} + } + async pushMessage(options: NotificationOptions) { const trycatch = async (name: string, fn: Function) => { try { @@ -152,10 +198,15 @@ export class NotificationKit { } }; + await this.checkupdate(); + if (this.newVersion.has) { + console.log(`稀土掘金助手 ${this.newVersion.name} 现在可用`); + } + await trycatch("邮件", this.email.bind(this)); - await trycatch("PushPlus", this.pushplus.bind(this)); await trycatch("钉钉", this.dingtalkWebhook.bind(this)); await trycatch("微信", this.wecomWebhook.bind(this)); + await trycatch("PushPlus", this.pushplus.bind(this)); } } From ed68481299ccce599c38c7b67229f028b0422c46 Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 13:57:55 +0800 Subject: [PATCH 107/131] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/package.json | 3 ++- workflows/yarn.lock | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/workflows/package.json b/workflows/package.json index 535c20b8..e05d3434 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -12,7 +12,8 @@ "axios": "^0.27.2", "fast-astar": "^1.0.6", "juejin-helper": "^1.7.1", - "nodemailer": "^6.7.0" + "nodemailer": "^6.7.0", + "typescript": "^4.7.4" }, "devDependencies": { "@types/nodemailer": "^6.4.7", diff --git a/workflows/yarn.lock b/workflows/yarn.lock index a7eb19d4..a2335c40 100644 --- a/workflows/yarn.lock +++ b/workflows/yarn.lock @@ -732,6 +732,11 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +typescript@^4.7.4: + version "4.9.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== + unbzip2-stream@1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" From d9f49f4c83d1f9c9a87bf99500eda225d77f4cc8 Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 14:05:24 +0800 Subject: [PATCH 108/131] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=8E=A8=E9=80=81=E5=A5=97=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/notification-kit.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 9cab0700..df6c30a7 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -108,8 +108,8 @@ export class NotificationKit { * @param options */ async pushplus(options: PushPlusOptions) { - const token: string | undefined = env.PUSHPLUS_TOKEN; - if (typeof token !== "string") { + const token: string | unknown = env.PUSHPLUS_TOKEN; + if (token) { throw new Error("未配置PushPlus Token。"); } @@ -137,12 +137,12 @@ export class NotificationKit { * @param options */ async dingtalkWebhook(options: DingTalkOptions) { - const url: string | undefined = env.DINGDING_WEBHOOK; - if (typeof url !== "string") { + const url: string | unknown = env.DINGDING_WEBHOOK; + if (url) { throw new Error("未配置钉钉Webhook。"); } - return axios.post(url, { + return axios.post(url as string, { msgtype: "text", text: { content: `${options.title}\n${options.content}` @@ -156,12 +156,12 @@ export class NotificationKit { * @param options */ async wecomWebhook(options: WeComOptions) { - const url: string | undefined = env.WEIXIN_WEBHOOK; - if (typeof url !== "string") { + const url: string | unknown = env.WEIXIN_WEBHOOK; + if (url) { throw new Error("未配置企业微信Webhook。"); } - return axios.post(url, { + return axios.post(url as string, { msgtype: "text", text: { content: `${options.title}\n${options.content}` From 5a1b7b9d6c23ff77c79a7147507f501b96311fb2 Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 14:10:38 +0800 Subject: [PATCH 109/131] =?UTF-8?q?test:=20=E6=B5=8B=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/notification-kit.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index df6c30a7..03489a23 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -109,6 +109,8 @@ export class NotificationKit { */ async pushplus(options: PushPlusOptions) { const token: string | unknown = env.PUSHPLUS_TOKEN; + console.log("pushplus", token); + if (token) { throw new Error("未配置PushPlus Token。"); } @@ -138,6 +140,7 @@ export class NotificationKit { */ async dingtalkWebhook(options: DingTalkOptions) { const url: string | unknown = env.DINGDING_WEBHOOK; + console.log("钉钉", url); if (url) { throw new Error("未配置钉钉Webhook。"); } @@ -157,6 +160,7 @@ export class NotificationKit { */ async wecomWebhook(options: WeComOptions) { const url: string | unknown = env.WEIXIN_WEBHOOK; + console.log("微信", url); if (url) { throw new Error("未配置企业微信Webhook。"); } From aad75fc5f12d1aa66b2327643ee7322ea3b7761a Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 14:16:19 +0800 Subject: [PATCH 110/131] =?UTF-8?q?test:=20=E6=B5=8B=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/notification-kit.ts | 37 ++++++++++++++++++----------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 03489a23..6f241d90 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -27,7 +27,7 @@ export class NotificationKit { pass: env.EMAIL_PASS // generated ethereal password }; - if (!auth.user || !auth.pass) { + if (!auth.user || !auth.pass || auth.user === "" || auth.pass === "") { throw new Error("邮箱功能不可用, 请先配置邮箱用户和密码。"); } @@ -109,9 +109,9 @@ export class NotificationKit { */ async pushplus(options: PushPlusOptions) { const token: string | unknown = env.PUSHPLUS_TOKEN; - console.log("pushplus", token); + console.log("pushplus", !token || token === "", typeof token); - if (token) { + if (!token || token === "") { throw new Error("未配置PushPlus Token。"); } @@ -140,18 +140,27 @@ export class NotificationKit { */ async dingtalkWebhook(options: DingTalkOptions) { const url: string | unknown = env.DINGDING_WEBHOOK; - console.log("钉钉", url); - if (url) { + console.log("钉钉", !url || url === "", typeof url); + if (!url || url === "") { throw new Error("未配置钉钉Webhook。"); } - return axios.post(url as string, { - msgtype: "text", - text: { - content: `${options.title}\n${options.content}` - } - }); - // .then(res => console.log(JSON.stringify(res.data))); + return axios + .post( + url as string, + { + msgtype: "text", + text: { + content: `${options.title}\n${options.content}` + } + }, + { + headers: { + "Content-Type": "application/json" + } + } + ) + .then(res => JSON.stringify(res.data)); } /** @@ -160,8 +169,8 @@ export class NotificationKit { */ async wecomWebhook(options: WeComOptions) { const url: string | unknown = env.WEIXIN_WEBHOOK; - console.log("微信", url); - if (url) { + console.log("微信", !url || url === "", typeof url); + if (!url || url === "") { throw new Error("未配置企业微信Webhook。"); } From d2fc7dd5c7b87d3c5961e0b1b01961ccd331869c Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 14:20:26 +0800 Subject: [PATCH 111/131] =?UTF-8?q?chore:=20=E7=A7=BB=E9=99=A4=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/notification-kit.ts | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 6f241d90..3ee6fbdb 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -109,8 +109,6 @@ export class NotificationKit { */ async pushplus(options: PushPlusOptions) { const token: string | unknown = env.PUSHPLUS_TOKEN; - console.log("pushplus", !token || token === "", typeof token); - if (!token || token === "") { throw new Error("未配置PushPlus Token。"); } @@ -140,27 +138,16 @@ export class NotificationKit { */ async dingtalkWebhook(options: DingTalkOptions) { const url: string | unknown = env.DINGDING_WEBHOOK; - console.log("钉钉", !url || url === "", typeof url); if (!url || url === "") { throw new Error("未配置钉钉Webhook。"); } - return axios - .post( - url as string, - { - msgtype: "text", - text: { - content: `${options.title}\n${options.content}` - } - }, - { - headers: { - "Content-Type": "application/json" - } - } - ) - .then(res => JSON.stringify(res.data)); + return axios.post(url as string, { + msgtype: "text", + text: { + content: `${options.title}\n${options.content}` + } + }); } /** @@ -169,7 +156,6 @@ export class NotificationKit { */ async wecomWebhook(options: WeComOptions) { const url: string | unknown = env.WEIXIN_WEBHOOK; - console.log("微信", !url || url === "", typeof url); if (!url || url === "") { throw new Error("未配置企业微信Webhook。"); } From 80e5f7ee4f4afa96c27ad3e73c57d697040bbd74 Mon Sep 17 00:00:00 2001 From: derek Date: Sun, 15 Jan 2023 14:42:32 +0800 Subject: [PATCH 112/131] =?UTF-8?q?perf:=20=E7=A7=BB=E9=99=A4=E5=86=97?= =?UTF-8?q?=E4=BD=99=E6=9D=82=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/dingding.js | 23 ------------- workflows/utils/email.js | 63 ---------------------------------- workflows/utils/pushMessage.js | 14 -------- workflows/utils/pushplus.js | 41 ---------------------- workflows/utils/weixinrobot.js | 20 ----------- 5 files changed, 161 deletions(-) delete mode 100644 workflows/utils/dingding.js delete mode 100644 workflows/utils/email.js delete mode 100644 workflows/utils/pushMessage.js delete mode 100644 workflows/utils/pushplus.js delete mode 100644 workflows/utils/weixinrobot.js diff --git a/workflows/utils/dingding.js b/workflows/utils/dingding.js deleted file mode 100644 index 0506598a..00000000 --- a/workflows/utils/dingding.js +++ /dev/null @@ -1,23 +0,0 @@ -const axios = require("axios"); - -const env = require("./env"); -async function dingding({ subject, text, html }) { - return axios - .post( - env.DINGDING_WEBHOOK, - { - msgtype: "text", - text: { - content: `${subject}\n${text || html}` - } - }, - { - headers: { - "Content-Type": "application/json" - } - } - ) - .then(res => console.log(JSON.stringify(res.data))); -} - -module.exports = dingding; diff --git a/workflows/utils/email.js b/workflows/utils/email.js deleted file mode 100644 index 34a74951..00000000 --- a/workflows/utils/email.js +++ /dev/null @@ -1,63 +0,0 @@ -const nodemailer = require("nodemailer"); -const path = require("path"); - -async function main({ subject, text, html }) { - const env = require("./env"); - - const auth = { - user: env.EMAIL_USER, // generated ethereal user - pass: env.EMAIL_PASS // generated ethereal password - }; - - if (!auth.user || !auth.pass) { - console.warn("邮箱功能不可用, 请先配置邮箱用户和密码"); - return; - } - - const transporter = nodemailer.createTransport({ - host: "smtp." + auth.user.match(/@(.*)/)[1], - secure: true, - port: 465, - auth, - tls: { - // do not fail on invalid certs - rejectUnauthorized: false - } - }); - - const template = ` -
-
- 稀土掘金 -
-
- ${html ? html : `
${text}
`} -
-
- 稀土掘金助手 | - Copyright © ${new Date().getFullYear()} Derek Li. -
-
- `.trim(); - - await transporter.sendMail({ - from: `稀土掘金助手 <${auth.user}>`, // sender address('"Fred Foo 👻" ') - to: env.EMAIL_TO, // list of receivers - subject, // Subject line - // text, // plain text body - html: template, // html body - attachments: [ - { - filename: "logo.svg", - path: path.resolve(__dirname, "../../resources/logo.svg"), - cid: "logo.svg" //same cid value as in the html img src - } - ] - }); - - console.log("已通知订阅人!"); -} - -module.exports = main; - -// main().catch(console.error); diff --git a/workflows/utils/pushMessage.js b/workflows/utils/pushMessage.js deleted file mode 100644 index cad649ec..00000000 --- a/workflows/utils/pushMessage.js +++ /dev/null @@ -1,14 +0,0 @@ -const env = require("./env"); -const email = require("./email"); -const pushplus = require("./pushplus"); -const dingding = require("./dingding"); -const weixinrobot = require("./weixinrobot"); - -async function pushMessage({ subject, text, html }) { - env.EMAIL_USER && (await email({ subject, text, html })); - env.DINGDING_WEBHOOK && (await dingding({ subject, text, html })); - env.PUSHPLUS_TOKEN && (await pushplus({ subject, text, html })); - env.WEIXIN_WEBHOOK && (await weixinrobot({ subject, text, html })); -} - -module.exports = pushMessage; diff --git a/workflows/utils/pushplus.js b/workflows/utils/pushplus.js deleted file mode 100644 index 65b2be54..00000000 --- a/workflows/utils/pushplus.js +++ /dev/null @@ -1,41 +0,0 @@ -const axios = require("axios"); -const env = require("./env"); -const userConfig = { - url: "http://www.pushplus.plus/send", - token: env.PUSHPLUS_TOKEN -}; - -async function main({ subject, text, html }) { - if (!userConfig.token) { - console.warn("未配置PushPlus之Token, 请先配置PushPlus"); - return; - } - return await postMessage({ - token: userConfig.token, - title: subject, - content: text || html, - topic: "", - template: "html", - channel: "wechat", - webhook: "", - callbackUrl: "", - timestamp: "" - }) - .then(res => res.data) - .then(json => { - console.log(`PushPlus推送结果: ` + json.msg); - return json; - }); -} - -async function postMessage(message) { - return await axios - .post(userConfig.url, message, { - headers: { - "Content-Type": "application/json" - } - }) - .catch(err => console.log(err)); -} - -module.exports = main; diff --git a/workflows/utils/weixinrobot.js b/workflows/utils/weixinrobot.js deleted file mode 100644 index af6e15c0..00000000 --- a/workflows/utils/weixinrobot.js +++ /dev/null @@ -1,20 +0,0 @@ -const axios = require("axios"); - -const env = require("./env"); - -async function weixinrobot({ subject, text, html }) { - axios - .post(env.WEIXIN_WEBHOOK, { - msgtype: "text", - text: { - content: `${subject}\n${text || html}` - } - }) - .then(response => { - console.log(response.data); - }) - .catch(error => { - console.log(error); - }); -} -module.exports = weixinrobot; From b1ff08a33907ea1fe503af12948358cb8257563d Mon Sep 17 00:00:00 2001 From: ZiuChen <457353192@qq.com> Date: Thu, 9 Feb 2023 11:34:34 +0800 Subject: [PATCH 113/131] =?UTF-8?q?fix:=20=E6=94=AF=E6=8C=81=E4=BB=8E?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E8=AE=BE=E7=BD=AEPage=E7=9A=84=E8=B6=85?= =?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4timeout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - puppeteer 默认超时时间为 30s - 网络环境较差时 访问超时时间过短 - 出现访问超时报错: `TimeoutError: Navigation timeout of 30000 ms exceeded` - Page未提供统一设置options的方法 通过`setDefaultTimeout`设置超时时间 --- packages/juejin-helper/src/utils/browser.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/juejin-helper/src/utils/browser.ts b/packages/juejin-helper/src/utils/browser.ts index 2b94ed73..f8772249 100644 --- a/packages/juejin-helper/src/utils/browser.ts +++ b/packages/juejin-helper/src/utils/browser.ts @@ -27,7 +27,8 @@ export default class JuejinBrowser { async visitPage(path: string = "", options = {}): Promise { const opts = Object.assign( { - viewport: { width: 414, height: 820 } + viewport: { width: 414, height: 820 }, + timeout: 30000 }, options ); @@ -36,6 +37,7 @@ export default class JuejinBrowser { const page = await browser.newPage(); await page.setViewport(opts.viewport); + page.setDefaultTimeout(opts.timeout); const cookiesString = this.juejin.cookie.toString(); const cookiesArray = cookiesString.split(/;\W+/).map(item => item.split("=")); From 95450d204f77d4aec8f15203b3a7f33af7f90f8f Mon Sep 17 00:00:00 2001 From: lidy Date: Mon, 13 Feb 2023 09:34:26 +0800 Subject: [PATCH 114/131] v1.7.2 --- lerna.json | 2 +- packages/juejin-helper/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lerna.json b/lerna.json index d72ee2d6..aec26db0 100644 --- a/lerna.json +++ b/lerna.json @@ -1,4 +1,4 @@ { "useWorkspaces": true, - "version": "1.7.1" + "version": "1.7.2" } diff --git a/packages/juejin-helper/package.json b/packages/juejin-helper/package.json index 05513e57..f3c65111 100644 --- a/packages/juejin-helper/package.json +++ b/packages/juejin-helper/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper", - "version": "1.7.1", + "version": "1.7.2", "description": "稀土掘金助手:签到、抽奖、沾喜气、海底淘金、BugFix、自动化工作流。", "author": "Derek Li", "license": "Apache-2.0", From 97deb40aaab98da7065ddc92fc635181dd961705 Mon Sep 17 00:00:00 2001 From: lidy Date: Mon, 13 Feb 2023 09:40:44 +0800 Subject: [PATCH 115/131] =?UTF-8?q?chore:=20=E8=B0=83=E6=95=B4=E9=82=AE?= =?UTF-8?q?=E7=AE=B1=E9=80=9A=E7=9F=A5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/notification-kit.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 3ee6fbdb..6af4543d 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -28,7 +28,7 @@ export class NotificationKit { }; if (!auth.user || !auth.pass || auth.user === "" || auth.pass === "") { - throw new Error("邮箱功能不可用, 请先配置邮箱用户和密码。"); + throw new Error("未配置邮箱。"); } const transporter = nodemailer.createTransport({ From 60c920ca3da54fde64fd341752ba9130b7a41430 Mon Sep 17 00:00:00 2001 From: lidy Date: Mon, 13 Feb 2023 09:41:06 +0800 Subject: [PATCH 116/131] feat: 1.7.2 --- workflows/package.json | 4 ++-- workflows/yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/workflows/package.json b/workflows/package.json index e05d3434..acf15b3b 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.7.1", + "version": "1.7.2", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", @@ -11,7 +11,7 @@ "dependencies": { "axios": "^0.27.2", "fast-astar": "^1.0.6", - "juejin-helper": "^1.7.1", + "juejin-helper": "^1.7.2", "nodemailer": "^6.7.0", "typescript": "^4.7.4" }, diff --git a/workflows/yarn.lock b/workflows/yarn.lock index a2335c40..e64270e9 100644 --- a/workflows/yarn.lock +++ b/workflows/yarn.lock @@ -435,10 +435,10 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" -juejin-helper@^1.7.1: - version "1.7.1" - resolved "https://registry.npmjs.org/juejin-helper/-/juejin-helper-1.7.1.tgz#cc4678ef06f31d459ac8b5d1e9823ccb7f45517c" - integrity sha512-lAdJGj1/EvOnJbU6koEvVsDFm8lWheBUr/ODne/WfrIBjeAmA6ufVrOJre1ET8vKpvXPRqJePDS5ndHA9lcXOg== +juejin-helper@^1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/juejin-helper/-/juejin-helper-1.7.2.tgz#902a27102389f650c2cd91210571592215edfc1e" + integrity sha512-9zS2vwoAcfk/zeUM5s0qisdekv3pq3MffTdfvFjQuO898249humSF1tFW+pliU9hkrFTnXxXNsORlEZfWAP24Q== dependencies: axios "^0.27.2" jsonwebtoken "^8.5.1" From 1b749757d7c8519502633bd21b51c5ce1285860a Mon Sep 17 00:00:00 2001 From: lidy Date: Mon, 13 Feb 2023 09:41:36 +0800 Subject: [PATCH 117/131] feat: 1.7.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f83f7280..03878451 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper-monorepo", - "version": "1.7.1", + "version": "1.7.2", "private": true, "author": "Derek Li", "workspaces": [ From 24ee3899230de339a8b7a02f0e887081cb5e8b73 Mon Sep 17 00:00:00 2001 From: lidy Date: Mon, 27 Mar 2023 11:23:11 +0800 Subject: [PATCH 118/131] =?UTF-8?q?feat(=E6=B5=B7=E5=BA=95=E6=8E=98?= =?UTF-8?q?=E9=87=91):=20=E6=B8=B8=E6=88=8F=E5=B7=B2=E4=B8=8B=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 22 +++++++++++----------- package.json | 2 +- workflows/package.json | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml index 6f658d4e..288b7067 100644 --- a/.github/workflows/auto.yml +++ b/.github/workflows/auto.yml @@ -29,14 +29,14 @@ jobs: cd workflows yarn yarn checkin - SeaGold: - needs: CheckIn - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - - name: Run Project - run: | - cd workflows - yarn - yarn seagold +# SeaGold: +# needs: CheckIn +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 +# - uses: actions/setup-node@v2 +# - name: Run Project +# run: | +# cd workflows +# yarn +# yarn seagold diff --git a/package.json b/package.json index 03878451..d78989db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "juejin-helper-monorepo", - "version": "1.7.2", + "version": "1.7.3", "private": true, "author": "Derek Li", "workspaces": [ diff --git a/workflows/package.json b/workflows/package.json index acf15b3b..705716c9 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.7.2", + "version": "1.7.3", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", From 2d39f4bb765bf30ec27bc4e37fbe0f34b9cbb454 Mon Sep 17 00:00:00 2001 From: lidy Date: Mon, 27 Mar 2023 11:38:51 +0800 Subject: [PATCH 119/131] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ workflows/README.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 2766f4ab..6ad429b9 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,9 @@

签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。

+## 通知 +🔈 海底掘金游戏官方已下线 `juejin-helper >= 1.7.3` + ## 如何使用? 使用自动化工作流有两种方式:快速使用(在线) 和 私有化部署(本地) diff --git a/workflows/README.md b/workflows/README.md index 53302c43..efe266a6 100644 --- a/workflows/README.md +++ b/workflows/README.md @@ -1,5 +1,8 @@ # Juejin Workflows 掘金工作流 +## 通知 +🔈 海底掘金游戏官方已下线 `juejin-helper >= 1.7.3` + ## 开始使用 下载项目 或 [ clone the repo:](https://github.com/iDerekLi/juejin-helper) From 58077b02e0b518cb09a492e573f0f28baf27dcff Mon Sep 17 00:00:00 2001 From: wangluping Date: Fri, 16 Jun 2023 14:32:11 +0800 Subject: [PATCH 120/131] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81Server?= =?UTF-8?q?=E9=85=B1=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 1 + README.md | 1 + workflows/utils/env.js | 7 ++++++- workflows/utils/notification-kit.ts | 25 +++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml index 288b7067..e4f9ca54 100644 --- a/.github/workflows/auto.yml +++ b/.github/workflows/auto.yml @@ -17,6 +17,7 @@ env: DINGDING_WEBHOOK: ${{ secrets.DINGDING_WEBHOOK }} PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} WEIXIN_WEBHOOK: ${{ secrets.WEIXIN_WEBHOOK }} + SERVERPUSHKEY: ${{ secrets.SERVERPUSHKEY }} jobs: CheckIn: diff --git a/README.md b/README.md index 6ad429b9..22505a90 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | | DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | | PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | + | SERVERPUSHKEY | [Server酱](https://sct.ftqq.com//) 官网申请,支持微信消息推送 | 否 | | WEIXIN_WEBHOOK | 企业微信机器人WEBHOOK | 否 | 4. 仓库 -> Actions, 检查Workflows并启用。 diff --git a/workflows/utils/env.js b/workflows/utils/env.js index 8e9b1c12..4665ebcc 100644 --- a/workflows/utils/env.js +++ b/workflows/utils/env.js @@ -29,5 +29,10 @@ module.exports = { * 企业微信机器人配置 * https://developer.work.weixin.qq.com/document/path/91770 */ - WEIXIN_WEBHOOK: env.WEIXIN_WEBHOOK + WEIXIN_WEBHOOK: env.WEIXIN_WEBHOOK, + /** + * server酱推送key + * https://sct.ftqq.com/sendkey + */ + SERVERPUSHKEY: env.SERVERPUSHKEY, }; diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 6af4543d..8791f637 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -132,6 +132,30 @@ export class NotificationKit { }); } + /** + * serverPush推送 + * @param options + */ + async serverPush(options: PushPlusOptions) { + const token: string | unknown = env.SERVERPUSHKEY; + if (!token || token === "") { + throw new Error("未配置server酱 key。"); + } + + const config = { + title: options.title, + desp: options.content, + short: "签到成功", + channel: "9", + }; + + return axios.post(`https://sctapi.ftqq.com/${token}.send`, config, { + headers: { + "Content-Type": "application/json" + } + }); + } + /** * 钉钉Webhook * @param options @@ -206,6 +230,7 @@ export class NotificationKit { await trycatch("钉钉", this.dingtalkWebhook.bind(this)); await trycatch("微信", this.wecomWebhook.bind(this)); await trycatch("PushPlus", this.pushplus.bind(this)); + await trycatch("server酱", this.serverPush.bind(this)); } } From a1dce0f6c876f0ba54ddde26dd369b14e8394820 Mon Sep 17 00:00:00 2001 From: wangluping Date: Fri, 16 Jun 2023 15:41:54 +0800 Subject: [PATCH 121/131] =?UTF-8?q?feat=20title=E5=A2=9E=E5=8A=A0=E7=AD=BE?= =?UTF-8?q?=E5=88=B0=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 4 ++-- workflows/utils/notification-kit.ts | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/workflows/checkin.js b/workflows/checkin.js index 19e15993..1bd7538c 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -328,7 +328,7 @@ async function run(args) { const message = messageList.join(`\n${"-".repeat(15)}\n`); notification.pushMessage({ - title: "掘金每日签到", + title: `掘金每日签到[${this.growthTask.todayStatus == 0 ? 'fail' : 'success'}]`, content: message, msgtype: "text" }); @@ -336,7 +336,7 @@ async function run(args) { run(process.argv.splice(2)).catch(error => { notification.pushMessage({ - title: "掘金每日签到", + title: "掘金每日签到[fail]", content: `Error
${error.message}
`, msgtype: "html" }); diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 8791f637..3f38d4a2 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -145,7 +145,6 @@ export class NotificationKit { const config = { title: options.title, desp: options.content, - short: "签到成功", channel: "9", }; From 3944916e50ba26081c86f184c56d97f2f296d26d Mon Sep 17 00:00:00 2001 From: lupingW <50098740+lupingW@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:37:41 +0800 Subject: [PATCH 122/131] Update checkin.js --- workflows/checkin.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workflows/checkin.js b/workflows/checkin.js index 1bd7538c..d2e05052 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -262,6 +262,8 @@ class CheckIn { await this.bugfixTask.run(); await juejin.logout(); console.log("-------------------------"); + + return this.growthTask.todayStatus } toString() { @@ -314,11 +316,12 @@ ${this.lotteriesTask.lotteryCount > 0 ? "==============\n" + drawLotteryHistory async function run(args) { const cookies = utils.getUsersCookie(env); let messageList = []; + let todayStatus = 0 for (let cookie of cookies) { const checkin = new CheckIn(cookie); await utils.wait(utils.randomRangeNumber(1000, 5000)); // 初始等待1-5s - await checkin.run(); // 执行 + todayStatus = await checkin.run(); // 执行 const content = checkin.toString(); console.log(content); // 打印结果 @@ -328,7 +331,7 @@ async function run(args) { const message = messageList.join(`\n${"-".repeat(15)}\n`); notification.pushMessage({ - title: `掘金每日签到[${this.growthTask.todayStatus == 0 ? 'fail' : 'success'}]`, + title: `掘金每日签到[${todayStatus == 0 ? 'fail' : 'success'}]`, content: message, msgtype: "text" }); From b553995702167d04b561971b8fe1dbd8d46b3881 Mon Sep 17 00:00:00 2001 From: Derek Li <24502299+iDerekLi@users.noreply.github.com> Date: Mon, 19 Jun 2023 10:21:22 +0800 Subject: [PATCH 123/131] Update checkin.js --- workflows/checkin.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/workflows/checkin.js b/workflows/checkin.js index d2e05052..ffcd6e00 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -316,12 +316,11 @@ ${this.lotteriesTask.lotteryCount > 0 ? "==============\n" + drawLotteryHistory async function run(args) { const cookies = utils.getUsersCookie(env); let messageList = []; - let todayStatus = 0 for (let cookie of cookies) { const checkin = new CheckIn(cookie); await utils.wait(utils.randomRangeNumber(1000, 5000)); // 初始等待1-5s - todayStatus = await checkin.run(); // 执行 + await checkin.run(); // 执行 const content = checkin.toString(); console.log(content); // 打印结果 @@ -331,7 +330,7 @@ async function run(args) { const message = messageList.join(`\n${"-".repeat(15)}\n`); notification.pushMessage({ - title: `掘金每日签到[${todayStatus == 0 ? 'fail' : 'success'}]`, + title: "掘金每日签到", content: message, msgtype: "text" }); @@ -339,7 +338,7 @@ async function run(args) { run(process.argv.splice(2)).catch(error => { notification.pushMessage({ - title: "掘金每日签到[fail]", + title: "掘金每日签到", content: `Error
${error.message}
`, msgtype: "html" }); From 6c9ee948b56f0cadcc4570af403c0527167cc0bc Mon Sep 17 00:00:00 2001 From: Derek Li <24502299+iDerekLi@users.noreply.github.com> Date: Mon, 19 Jun 2023 10:23:23 +0800 Subject: [PATCH 124/131] Update notification-kit.ts --- workflows/utils/notification-kit.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 3f38d4a2..24c58800 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -139,7 +139,7 @@ export class NotificationKit { async serverPush(options: PushPlusOptions) { const token: string | unknown = env.SERVERPUSHKEY; if (!token || token === "") { - throw new Error("未配置server酱 key。"); + throw new Error("未配置Server酱 key。"); } const config = { @@ -229,7 +229,7 @@ export class NotificationKit { await trycatch("钉钉", this.dingtalkWebhook.bind(this)); await trycatch("微信", this.wecomWebhook.bind(this)); await trycatch("PushPlus", this.pushplus.bind(this)); - await trycatch("server酱", this.serverPush.bind(this)); + await trycatch("Server酱", this.serverPush.bind(this)); } } From 356512cd5eab99c2cbc0d373afd71d8d429ca634 Mon Sep 17 00:00:00 2001 From: Auxior Date: Fri, 5 Jan 2024 10:33:21 +0800 Subject: [PATCH 125/131] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E9=A3=9E=E4=B9=A6=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/utils/env.js | 4 ++++ workflows/utils/notification-kit.ts | 37 +++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/workflows/utils/env.js b/workflows/utils/env.js index 4665ebcc..369c2aff 100644 --- a/workflows/utils/env.js +++ b/workflows/utils/env.js @@ -35,4 +35,8 @@ module.exports = { * https://sct.ftqq.com/sendkey */ SERVERPUSHKEY: env.SERVERPUSHKEY, + /** + * 飞书配置 + */ + FEISHU_WEBHOOK: env.FEISHU_WEBHOOK }; diff --git a/workflows/utils/notification-kit.ts b/workflows/utils/notification-kit.ts index 24c58800..7615728b 100644 --- a/workflows/utils/notification-kit.ts +++ b/workflows/utils/notification-kit.ts @@ -15,6 +15,7 @@ interface DingTalkOptions extends NotificationOptions {} interface PushPlusOptions extends NotificationOptions {} interface WeComOptions extends NotificationOptions {} interface WeiXinOptions extends WeComOptions {} +interface FeiShuOptions extends NotificationOptions {} export class NotificationKit { /** @@ -145,10 +146,10 @@ export class NotificationKit { const config = { title: options.title, desp: options.content, - channel: "9", + channel: "9" }; - return axios.post(`https://sctapi.ftqq.com/${token}.send`, config, { + return axios.post(`https://sctapi.ftqq.com/${token}.send`, config, { headers: { "Content-Type": "application/json" } @@ -173,6 +174,37 @@ export class NotificationKit { }); } + /** + * 飞书Webhook + * @param options + */ + async feishuWebhook(options: FeiShuOptions) { + const url: string | unknown = env.FEISHU_WEBHOOK; + if (!url || url === "") { + throw new Error("未配置飞书Webhook。"); + } + + return axios.post(url as string, { + msg_type: "interactive", + card: { + elements: [ + { + tag: "markdown", + content: options.content, + text_align: "left" + } + ], + header: { + template: "blue", + title: { + content: options.title, + tag: "plain_text" + } + } + } + }); + } + /** * 企业微信Webhook * @param options @@ -230,6 +262,7 @@ export class NotificationKit { await trycatch("微信", this.wecomWebhook.bind(this)); await trycatch("PushPlus", this.pushplus.bind(this)); await trycatch("Server酱", this.serverPush.bind(this)); + await trycatch("飞书", this.feishuWebhook.bind(this)); } } From 0a3b6d747e52224ee7e26dea1fab601c2da147a1 Mon Sep 17 00:00:00 2001 From: Auxior Date: Fri, 5 Jan 2024 10:38:04 +0800 Subject: [PATCH 126/131] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=A3=9E=E4=B9=A6Secrets=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/auto.yml b/.github/workflows/auto.yml index e4f9ca54..10a2e6d9 100644 --- a/.github/workflows/auto.yml +++ b/.github/workflows/auto.yml @@ -18,6 +18,7 @@ env: PUSHPLUS_TOKEN: ${{ secrets.PUSHPLUS_TOKEN }} WEIXIN_WEBHOOK: ${{ secrets.WEIXIN_WEBHOOK }} SERVERPUSHKEY: ${{ secrets.SERVERPUSHKEY }} + FEISHU_WEBHOOK: ${{ secrets.FEISHU_WEBHOOK }} jobs: CheckIn: @@ -30,6 +31,7 @@ jobs: cd workflows yarn yarn checkin + # SeaGold: # needs: CheckIn # runs-on: ubuntu-latest From 44dfde8cf51b5abe96a8c642611bf929067b3ed0 Mon Sep 17 00:00:00 2001 From: Auxior Date: Fri, 5 Jan 2024 10:49:01 +0800 Subject: [PATCH 127/131] =?UTF-8?q?=F0=9F=93=83=20docs:=20README=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=A3=9E=E4=B9=A6=E6=8E=A8=E9=80=81=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 22505a90..a22023a2 100644 --- a/README.md +++ b/README.md @@ -27,17 +27,18 @@ 2. 仓库 -> Settings -> Secrets -> New repository secret, 添加Secrets变量如下: - | Name | Value | Required | - | --- | --- | --- | - | COOKIE | 掘金网站Cookie | 是 | - | COOKIE_2 | 多用户, 当需要同时运行多个掘金用户时所需, 支持最多 **5** 名用户(即COOKIE + COOKIE_2 - COOKIE_5) | 否 | - | EMAIL_USER | 发件人邮箱地址(需要开启 SMTP) | 否 | - | EMAIL_PASS | 发件人邮箱密码(SMTP密码) | 否 | - | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | - | DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | - | PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | - | SERVERPUSHKEY | [Server酱](https://sct.ftqq.com//) 官网申请,支持微信消息推送 | 否 | + | Name | Value | Required | + | --- | --- | --- | + | COOKIE | 掘金网站Cookie | 是 | + | COOKIE_2 | 多用户, 当需要同时运行多个掘金用户时所需, 支持最多 **5** 名用户(即COOKIE + COOKIE_2 - COOKIE_5) | 否 | + | EMAIL_USER | 发件人邮箱地址(需要开启 SMTP) | 否 | + | EMAIL_PASS | 发件人邮箱密码(SMTP密码) | 否 | + | EMAIL_TO | 订阅人邮箱地址(收件人). 如需多人订阅使用 `, ` 分割, 例如: `a@163.com, b@qq.com` | 否 | + | DINGDING_WEBHOOK | 钉钉机器人WEBHOOK | 否 | + | PUSHPLUS_TOKEN | [Pushplus](http://www.pushplus.plus/) 官网申请,支持微信消息推送 | 否 | + | SERVERPUSHKEY | [Server酱](https://sct.ftqq.com//) 官网申请,支持微信消息推送 | 否 | | WEIXIN_WEBHOOK | 企业微信机器人WEBHOOK | 否 | + | FEISHU_WEBHOOK | 飞书机器人WEBHOOK | 否 | 4. 仓库 -> Actions, 检查Workflows并启用。 From 3cd83dac89cbbb9fc0257267afaad27463580357 Mon Sep 17 00:00:00 2001 From: Derek Li <24502299+iDerekLi@users.noreply.github.com> Date: Tue, 16 Jan 2024 11:47:43 +0800 Subject: [PATCH 128/131] v1.7.4 --- workflows/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/package.json b/workflows/package.json index 705716c9..2bff28d2 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.7.3", + "version": "1.7.4", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li", From 5ddb19cac479d2c88b46c5ae28c2a05ef7724b7d Mon Sep 17 00:00:00 2001 From: Derek Li <24502299+iDerekLi@users.noreply.github.com> Date: Tue, 16 Jan 2024 11:58:09 +0800 Subject: [PATCH 129/131] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a22023a2..666876e3 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@

签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。

## 通知 +✨ 自动化工作流,新增飞书推送。 \ 🔈 海底掘金游戏官方已下线 `juejin-helper >= 1.7.3` ## 如何使用? From 6a41be179005ee90b843726ede51ccbf5ea2f91e Mon Sep 17 00:00:00 2001 From: lidy Date: Tue, 12 Mar 2024 19:02:03 +0800 Subject: [PATCH 130/131] =?UTF-8?q?chore:=20=E5=90=8C=E6=AD=A5=E6=8E=98?= =?UTF-8?q?=E9=87=91=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=81=9C=E7=94=A8=E6=B2=BE?= =?UTF-8?q?=E5=96=9C=E6=B0=94=E3=80=81=E6=94=B6=E9=9B=86Bugfix=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- workflows/checkin.js | 77 +++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/workflows/checkin.js b/workflows/checkin.js index ffcd6e00..c89e02f2 100644 --- a/workflows/checkin.js +++ b/workflows/checkin.js @@ -49,24 +49,25 @@ class GrowthTask extends Task { class DipLuckyTask extends Task { taskName = "沾喜气"; - dipStatus = 0; + dipStatus = -1; dipValue = 0; luckyValue = 0; async run() { const growth = this.juejin.growth(); - const luckyusersResult = await growth.getLotteriesLuckyUsers(); - if (luckyusersResult.count > 0) { - const no1LuckyUser = luckyusersResult.lotteries[0]; - const dipLuckyResult = await growth.dipLucky(no1LuckyUser.history_id); - if (dipLuckyResult.has_dip) { - this.dipStatus = 2; - } else { - this.dipStatus = 1; - this.dipValue = dipLuckyResult.dip_value; - } - } + // 掘金沾喜气功能以停用! + // const luckyusersResult = await growth.getLotteriesLuckyUsers(); + // if (luckyusersResult.count > 0) { + // const no1LuckyUser = luckyusersResult.lotteries[0]; + // const dipLuckyResult = await growth.dipLucky(no1LuckyUser.history_id); + // if (dipLuckyResult.has_dip) { + // this.dipStatus = 2; + // } else { + // this.dipStatus = 1; + // this.dipValue = dipLuckyResult.dip_value; + // } + // } const luckyResult = await growth.getMyLucky(); this.luckyValue = luckyResult.total_value; @@ -76,7 +77,7 @@ class DipLuckyTask extends Task { class BugfixTask extends Task { taskName = "Bugfix"; - bugStatus = 0; + bugStatus = -1; collectBugCount = 0; userOwnBug = 0; @@ -87,15 +88,16 @@ class BugfixTask extends Task { const bugfixInfo = await bugfix.getUser(competition); this.userOwnBug = bugfixInfo.user_own_bug; - try { - const notCollectBugList = await bugfix.getNotCollectBugList(); - await bugfix.collectBugBatch(notCollectBugList); - this.bugStatus = 1; - this.collectBugCount = notCollectBugList.length; - this.userOwnBug += this.collectBugCount; - } catch (e) { - this.bugStatus = 2; - } + // 掘金Bugfix功能已停用。 + // try { + // const notCollectBugList = await bugfix.getNotCollectBugList(); + // await bugfix.collectBugBatch(notCollectBugList); + // this.bugStatus = 1; + // this.collectBugCount = notCollectBugList.length; + // this.userOwnBug += this.collectBugCount; + // } catch (e) { + // this.bugStatus = 2; + // } } } @@ -263,7 +265,7 @@ class CheckIn { await juejin.logout(); console.log("-------------------------"); - return this.growthTask.todayStatus + return this.growthTask.todayStatus; } toString() { @@ -285,20 +287,21 @@ ${ 1: `签到成功 +${this.growthTask.incrPoint} 矿石`, 2: "今日已完成签到" }[this.growthTask.todayStatus] -} -${ - { - 0: "沾喜气失败", - 1: `沾喜气 +${this.dipLuckyTask.dipValue} 幸运值`, - 2: "今日已经沾过喜气" - }[this.dipLuckyTask.dipStatus] -} -${ - this.bugfixTask.bugStatus === 1 - ? this.bugfixTask.collectBugCount > 0 - ? `收集Bug +${this.bugfixTask.collectBugCount}` - : "没有可收集Bug" - : "收集Bug失败" + // ${ + // { + // "-1": "沾喜气已停用", + // 0: "沾喜气失败", + // 1: `沾喜气 +${this.dipLuckyTask.dipValue} 幸运值`, + // 2: "今日已经沾过喜气" + // }[this.dipLuckyTask.dipStatus] + // } + // ${ + // this.bugfixTask.bugStatus === 1 + // ? this.bugfixTask.collectBugCount > 0 + // ? `收集Bug +${this.bugfixTask.collectBugCount}` + // : "没有可收集Bug" + // : "收集Bug失败" + // } } 连续签到天数 ${this.growthTask.contCount} 累计签到天数 ${this.growthTask.sumCount} From 494734a7148f0219661016a56ee0cb9a144d7383 Mon Sep 17 00:00:00 2001 From: lidy Date: Tue, 12 Mar 2024 19:02:56 +0800 Subject: [PATCH 131/131] feat: 1.8.0 --- workflows/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/package.json b/workflows/package.json index 2bff28d2..5eb7df08 100644 --- a/workflows/package.json +++ b/workflows/package.json @@ -1,6 +1,6 @@ { "name": "workflows", - "version": "1.7.4", + "version": "1.8.0", "private": true, "description": "稀土掘金助手:签到、抽奖、沾喜气、消除Bug、海底掘金游戏、自动化工作流。", "author": "Derek Li",