From 6ee0d238924f2482bc353e18f456cec31110bb2f Mon Sep 17 00:00:00 2001 From: Felix Hsu Date: Wed, 28 Sep 2022 12:39:06 +0800 Subject: [PATCH 01/30] fix(route): ccdi cookie should be called in await style (#10927) * try to minic the js cookie behavior and bypass the anti spider * add more selector for diff article * regex polished * fix(route): cookie setting should be called in await --- lib/v2/gov/ccdi/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/v2/gov/ccdi/utils.js b/lib/v2/gov/ccdi/utils.js index caee722d5b..1e23ec1210 100644 --- a/lib/v2/gov/ccdi/utils.js +++ b/lib/v2/gov/ccdi/utils.js @@ -20,7 +20,7 @@ const parseCookie = async (body) => { const parseNewsList = async (url, selector, ctx) => { const response = await got(url, { cookieJar }); const data = response.data; - parseCookie(data); + await parseCookie(data); const $ = cheerio.load(data); const list = $(selector) @@ -44,7 +44,7 @@ const parseArticle = async (item, ctx) => await ctx.cache.tryGet(item.link, async () => { const response = await got(item.link, { cookieJar }); const data = response.data; - parseCookie(data); + await parseCookie(data); const $ = cheerio.load(data); const title = $('.daty, .source-box').text().trim(); From b175d5e1c3a73fc4e96609f20df9b57274f58055 Mon Sep 17 00:00:00 2001 From: ToffeeNeko <53738915+ToffeeNeko@users.noreply.github.com> Date: Wed, 28 Sep 2022 04:30:09 -0500 Subject: [PATCH 02/30] Fix wrong image display for tieba forum feeds (#10933) --- lib/v2/baidu/tieba/forum.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/v2/baidu/tieba/forum.js b/lib/v2/baidu/tieba/forum.js index 622e8df254..1ed79fb62b 100644 --- a/lib/v2/baidu/tieba/forum.js +++ b/lib/v2/baidu/tieba/forum.js @@ -39,7 +39,7 @@ module.exports = async (ctx) => { .toArray() .map((element) => { const item = $(element); - return ``; + return ``; }) .join(''); From 6fdd85e0fed0afa1cf3af25f0966e0904216235c Mon Sep 17 00:00:00 2001 From: cyx20080216 <63776734+cyx20080216@users.noreply.github.com> Date: Wed, 28 Sep 2022 22:11:07 +0800 Subject: [PATCH 03/30] =?UTF-8?q?fix(route):=20Anti-Anti-Spider=20?= =?UTF-8?q?=E5=93=94=E5=93=A9=E5=93=94=E5=93=A9=20(#10886)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(route): Anti-Anti-Reptilian 哔哩哔哩 * fix(route): Anti-Anti-Reptilian 哔哩哔哩 * fix(route): Remove debugging statement * fix(route): Comply with code specifications by adding a semicolon. * fix(route): Resolve the requested changes Use normative key Use cache.tryGet Use more simplified got request Remove unnecessary template Use default UA * fix(route): Remove unnecessary await * fix(route): Use simplified got request. * fix(route): Use default UA * fix(route): Remove unnecessary require Co-authored-by: cyx20080216 --- lib/v2/bilibili/cache.js | 41 ++++++++++++++++++++++++++++-------- lib/v2/bilibili/video-all.js | 34 +++++++++++++++++++++++------- lib/v2/bilibili/video.js | 12 ++++++++--- 3 files changed, 67 insertions(+), 20 deletions(-) diff --git a/lib/v2/bilibili/cache.js b/lib/v2/bilibili/cache.js index 7f233d8ede..8669042727 100644 --- a/lib/v2/bilibili/cache.js +++ b/lib/v2/bilibili/cache.js @@ -1,30 +1,53 @@ const got = require('@/utils/got'); module.exports = { + getCookie: (ctx) => { + const key = 'bili-cookie'; + return ctx.cache.tryGet(key, async () => { + const response = await got(`https://www.bilibili.com/`); + return response.headers['set-cookie']; + }); + }, getUsernameFromUID: (ctx, uid) => { const key = 'bili-username-from-uid-' + uid; return ctx.cache.tryGet(key, async () => { - const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&jsonp=jsonp`, { + const cookie = await module.exports.getCookie(ctx); + await got(`https://space.bilibili.com/${uid}/`, { headers: { - Referer: `https://space.bilibili.com/${uid}`, - }, + Referer: 'https://www.bilibili.com/', + Cookie: cookie + } + }); + const {data: nameResponse} = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/`, + Cookie: cookie + } }); return nameResponse.data.name; }); }, getUsernameAndFaceFromUID: async (ctx, uid) => { + const cookie = await module.exports.getCookie(ctx); const nameKey = 'bili-username-from-uid-' + uid; const faceKey = 'bili-userface-from-uid-' + uid; let name = await ctx.cache.get(nameKey); let face = await ctx.cache.get(faceKey); - if (!name) { - const nameResponse = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&jsonp=jsonp`, { + if (!name || !face) { + await got(`https://space.bilibili.com/${uid}/`, { headers: { - Referer: `https://space.bilibili.com/${uid}`, - }, + Referer: `https://www.bilibili.com/`, + Cookie: cookie + } }); - name = nameResponse.data.data.name; - face = nameResponse.data.data.face; + const {data: nameResponse} = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/`, + Cookie: cookie + } + }); + name = nameResponse.data.name; + face = nameResponse.data.face; ctx.cache.set(nameKey, name); ctx.cache.set(faceKey, face); } diff --git a/lib/v2/bilibili/video-all.js b/lib/v2/bilibili/video-all.js index f025119edd..b1a1a73f19 100644 --- a/lib/v2/bilibili/video-all.js +++ b/lib/v2/bilibili/video-all.js @@ -6,27 +6,45 @@ const { parseDate } = require('@/utils/parse-date'); module.exports = async (ctx) => { const uid = ctx.params.uid; const disableEmbed = ctx.params.disableEmbed; + const cookie = await cache.getCookie(ctx); const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid); - const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { + await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, + Cookie: cookie + }, + }); + const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, + Cookie: cookie }, }); const vlist = [...response.data.data.list.vlist]; const pageTotal = Math.ceil(response.data.data.page.count / response.data.data.page.ps); + + const getPage = async (pageId) => { + await got(`https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/`, + Cookie: cookie + }, + }); + return await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${pageId}&keyword=&order=pubdate&jsonp=jsonp`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, + Cookie: cookie + }, + }); + }; + const promises = []; if (pageTotal > 1) { for (let i = 2; i <= pageTotal; i++) { - promises.push( - got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${i}&keyword=&order=pubdate&jsonp=jsonp`, { - headers: { - Referer: `https://space.bilibili.com/${uid}/`, - }, - }) - ); + promises.push(getPage(i)); } const rets = await Promise.all(promises); rets.forEach((ret) => { diff --git a/lib/v2/bilibili/video.js b/lib/v2/bilibili/video.js index ec0b77117a..f10855fad7 100644 --- a/lib/v2/bilibili/video.js +++ b/lib/v2/bilibili/video.js @@ -5,13 +5,19 @@ const utils = require('./utils'); module.exports = async (ctx) => { const uid = ctx.params.uid; const disableEmbed = ctx.params.disableEmbed; + const cookie = await cache.getCookie(ctx); const [name, face] = await cache.getUsernameAndFaceFromUID(ctx, uid); - const response = await got({ - method: 'get', - url: `https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=10&tid=0&pn=1&order=pubdate&jsonp=jsonp`, + await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, + Cookie: cookie + }, + }); + const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { + headers: { + Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, + Cookie: cookie }, }); const data = response.data; From 5f157b02a1d2ae9053256a3dff0cbe40d331b0d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 14:13:46 +0000 Subject: [PATCH 04/30] style: auto format --- lib/v2/bilibili/cache.js | 20 ++++++++++---------- lib/v2/bilibili/video-all.js | 8 ++++---- lib/v2/bilibili/video.js | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/v2/bilibili/cache.js b/lib/v2/bilibili/cache.js index 8669042727..9dedad9c16 100644 --- a/lib/v2/bilibili/cache.js +++ b/lib/v2/bilibili/cache.js @@ -15,14 +15,14 @@ module.exports = { await got(`https://space.bilibili.com/${uid}/`, { headers: { Referer: 'https://www.bilibili.com/', - Cookie: cookie - } + Cookie: cookie, + }, }); - const {data: nameResponse} = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { + const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie - } + Cookie: cookie, + }, }); return nameResponse.data.name; }); @@ -37,14 +37,14 @@ module.exports = { await got(`https://space.bilibili.com/${uid}/`, { headers: { Referer: `https://www.bilibili.com/`, - Cookie: cookie - } + Cookie: cookie, + }, }); - const {data: nameResponse} = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { + const { data: nameResponse } = await got(`https://api.bilibili.com/x/space/acc/info?mid=${uid}&token=&platform=web&jsonp=jsonp`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie - } + Cookie: cookie, + }, }); name = nameResponse.data.name; face = nameResponse.data.face; diff --git a/lib/v2/bilibili/video-all.js b/lib/v2/bilibili/video-all.js index b1a1a73f19..2cf71c68cc 100644 --- a/lib/v2/bilibili/video-all.js +++ b/lib/v2/bilibili/video-all.js @@ -12,13 +12,13 @@ module.exports = async (ctx) => { await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie + Cookie: cookie, }, }); const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { headers: { Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, - Cookie: cookie + Cookie: cookie, }, }); @@ -29,13 +29,13 @@ module.exports = async (ctx) => { await got(`https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie + Cookie: cookie, }, }); return await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=${pageId}&keyword=&order=pubdate&jsonp=jsonp`, { headers: { Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=${pageId}&keyword=&order=pubdate`, - Cookie: cookie + Cookie: cookie, }, }); }; diff --git a/lib/v2/bilibili/video.js b/lib/v2/bilibili/video.js index f10855fad7..d55ed7582e 100644 --- a/lib/v2/bilibili/video.js +++ b/lib/v2/bilibili/video.js @@ -11,13 +11,13 @@ module.exports = async (ctx) => { await got(`https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, { headers: { Referer: `https://space.bilibili.com/${uid}/`, - Cookie: cookie + Cookie: cookie, }, }); const response = await got(`https://api.bilibili.com/x/space/arc/search?mid=${uid}&ps=30&tid=0&pn=1&keyword=&order=pubdate&jsonp=jsonp`, { headers: { Referer: `https://space.bilibili.com/${uid}/video?tid=0&page=1&keyword=&order=pubdate`, - Cookie: cookie + Cookie: cookie, }, }); const data = response.data; From 7cdc9ff577fd5831e2eb93d745a1e5a5e55e382b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 22:33:29 +0000 Subject: [PATCH 05/30] chore(deps-dev): bump jest from 29.0.3 to 29.1.1 (#10941) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 29.0.3 to 29.1.1. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.1.1/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 581 ++++++++++++++++++++++++++------------------------- 2 files changed, 292 insertions(+), 291 deletions(-) diff --git a/package.json b/package.json index d513f6875e..b3f9ac0f02 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "eslint-plugin-prettier": "4.2.1", "eslint-plugin-yml": "1.2.0", "fs-extra": "10.1.0", - "jest": "29.0.3", + "jest": "29.1.1", "meilisearch": "0.27.0", "mockdate": "3.0.5", "nock": "13.2.9", diff --git a/yarn.lock b/yarn.lock index bd1880110d..6bbf4ecb77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1085,28 +1085,28 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.0.3.tgz#a222ab87e399317a89db88a58eaec289519e807a" - integrity sha512-cGg0r+klVHSYnfE977S9wmpuQ9L+iYuYgL+5bPXiUlUynLLYunRxswEmhBzvrSKGof5AKiHuTTmUKAqRcDY9dg== +"@jest/console@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.0.tgz#3b8e9e86aef28af15fcadfd8df7321ed1327c3e7" + integrity sha512-yNoFMuAsXTP8OyweaMaIoa6Px6rJkbbG7HtgYKGP3CY7lE7ADRA0Fn5ad9O+KefKcaf6W9rywKpCWOw21WMsAw== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.0.3" - jest-util "^29.0.3" + jest-message-util "^29.1.0" + jest-util "^29.1.0" slash "^3.0.0" -"@jest/core@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.0.3.tgz#ba22a9cbd0c7ba36e04292e2093c547bf53ec1fd" - integrity sha512-1d0hLbOrM1qQE3eP3DtakeMbKTcXiXP3afWxqz103xPyddS2NhnNghS7MaXx1dcDt4/6p4nlhmeILo2ofgi8cQ== +"@jest/core@^29.1.1": + version "29.1.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.1.tgz#a7e5f86dd29fa9da1ca84752237735dc7bcda3d8" + integrity sha512-ppym+PLiuSmvU9ufXVb/8OtHUPcjW+bBlb8CLh6oMATgJtCE3fjDYrzJi5u1uX8q9jbmtQ7VADKJKIlp68zi3A== dependencies: - "@jest/console" "^29.0.3" - "@jest/reporters" "^29.0.3" - "@jest/test-result" "^29.0.3" - "@jest/transform" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/console" "^29.1.0" + "@jest/reporters" "^29.1.0" + "@jest/test-result" "^29.1.0" + "@jest/transform" "^29.1.0" + "@jest/types" "^29.1.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" @@ -1114,80 +1114,80 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^29.0.0" - jest-config "^29.0.3" - jest-haste-map "^29.0.3" - jest-message-util "^29.0.3" + jest-config "^29.1.1" + jest-haste-map "^29.1.0" + jest-message-util "^29.1.0" jest-regex-util "^29.0.0" - jest-resolve "^29.0.3" - jest-resolve-dependencies "^29.0.3" - jest-runner "^29.0.3" - jest-runtime "^29.0.3" - jest-snapshot "^29.0.3" - jest-util "^29.0.3" - jest-validate "^29.0.3" - jest-watcher "^29.0.3" + jest-resolve "^29.1.0" + jest-resolve-dependencies "^29.1.1" + jest-runner "^29.1.1" + jest-runtime "^29.1.1" + jest-snapshot "^29.1.0" + jest-util "^29.1.0" + jest-validate "^29.1.0" + jest-watcher "^29.1.0" micromatch "^4.0.4" - pretty-format "^29.0.3" + pretty-format "^29.1.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.0.3.tgz#7745ec30a954e828e8cc6df6a13280d3b51d8f35" - integrity sha512-iKl272NKxYNQNqXMQandAIwjhQaGw5uJfGXduu8dS9llHi8jV2ChWrtOAVPnMbaaoDhnI3wgUGNDvZgHeEJQCA== +"@jest/environment@^29.1.1": + version "29.1.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.1.tgz#afeb66563d8d366a329908087b6697c3bfaed3cb" + integrity sha512-69WULhTD38UcjvLGRAnnwC5hDt35ZC91ZwnvWipNOAOSaQNT32uKYL/TVCT3tncB9L1D++LOmBbYhTYP4TLuuQ== dependencies: - "@jest/fake-timers" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/fake-timers" "^29.1.1" + "@jest/types" "^29.1.0" "@types/node" "*" - jest-mock "^29.0.3" + jest-mock "^29.1.1" -"@jest/expect-utils@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.3.tgz#f5bb86f5565bf2dacfca31ccbd887684936045b2" - integrity sha512-i1xUkau7K/63MpdwiRqaxgZOjxYs4f0WMTGJnYwUKubsNRZSeQbLorS7+I4uXVF9KQ5r61BUPAUMZ7Lf66l64Q== +"@jest/expect-utils@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.0.tgz#598cc7fea83b1bf84249b3b98683575cee888894" + integrity sha512-YcD5CF2beqfoB07WqejPzWq1/l+zT3SgGwcqqIaPPG1DHFn/ea8MWWXeqV3KKMhTaOM1rZjlYplj1GQxR0XxKA== dependencies: jest-get-type "^29.0.0" -"@jest/expect@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.0.3.tgz#9dc7c46354eeb7a348d73881fba6402f5fdb2c30" - integrity sha512-6W7K+fsI23FQ01H/BWccPyDZFrnU9QlzDcKOjrNVU5L8yUORFAJJIpmyxWPW70+X624KUNqzZwPThPMX28aXEQ== +"@jest/expect@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.0.tgz#58956d38c22f42a2ec7ecf7adb9e0ddd9a9082a3" + integrity sha512-qWQttxE5rEwzvDW9G3f0o8chu1EKvIfsMQDeRlXMLCtsDS94ckcqEMNgbKKz0NYlZ45xrIoy+/pngt3ZFr/2zw== dependencies: - expect "^29.0.3" - jest-snapshot "^29.0.3" + expect "^29.1.0" + jest-snapshot "^29.1.0" -"@jest/fake-timers@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.0.3.tgz#ad5432639b715d45a86a75c47fd75019bc36b22c" - integrity sha512-tmbUIo03x0TdtcZCESQ0oQSakPCpo7+s6+9mU19dd71MptkP4zCwoeZqna23//pgbhtT1Wq02VmA9Z9cNtvtCQ== +"@jest/fake-timers@^29.1.1": + version "29.1.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.1.tgz#ae345e5ca51e9f72e0d861e17c65d9cb558f407b" + integrity sha512-5wTGObRfL/OjzEz0v2ShXlzeJFJw8mO6ByMBwmPLd6+vkdPcmIpCvASG/PR/g8DpchSIEeDXCxQADojHxuhX8g== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^29.0.3" - jest-mock "^29.0.3" - jest-util "^29.0.3" + jest-message-util "^29.1.0" + jest-mock "^29.1.1" + jest-util "^29.1.0" -"@jest/globals@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.0.3.tgz#681950c430fdc13ff9aa89b2d8d572ac0e4a1bf5" - integrity sha512-YqGHT65rFY2siPIHHFjuCGUsbzRjdqkwbat+Of6DmYRg5shIXXrLdZoVE/+TJ9O1dsKsFmYhU58JvIbZRU1Z9w== +"@jest/globals@^29.1.1": + version "29.1.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.1.tgz#017cffa0e79b35e7197b229d852c9ad35ed4be5c" + integrity sha512-yTiusxeEHjXwmo3guWlN31a1harU8zekLBMlZpOZ+84rfO3HDrkNZLTfd/YaHF8CrwlNCFpDGNSQCH8WkklH/Q== dependencies: - "@jest/environment" "^29.0.3" - "@jest/expect" "^29.0.3" - "@jest/types" "^29.0.3" - jest-mock "^29.0.3" + "@jest/environment" "^29.1.1" + "@jest/expect" "^29.1.0" + "@jest/types" "^29.1.0" + jest-mock "^29.1.1" -"@jest/reporters@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.0.3.tgz#735f110e08b44b38729d8dbbb74063bdf5aba8a5" - integrity sha512-3+QU3d4aiyOWfmk1obDerie4XNCaD5Xo1IlKNde2yGEi02WQD+ZQD0i5Hgqm1e73sMV7kw6pMlCnprtEwEVwxw== +"@jest/reporters@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.0.tgz#da488ddfb39a4cfb86abdc29fd94f84031acfd02" + integrity sha512-szSjHjVuBQ7aZUdBzTicCoQAAQsQFLk+/PtMfO0RQxL5mQ1iw+PSKOpyvMZcA5T6bH9pIapue5U9UCrxfOtL3w== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.0.3" - "@jest/test-result" "^29.0.3" - "@jest/transform" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/console" "^29.1.0" + "@jest/test-result" "^29.1.0" + "@jest/transform" "^29.1.0" + "@jest/types" "^29.1.0" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -1200,9 +1200,9 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.0.3" - jest-util "^29.0.3" - jest-worker "^29.0.3" + jest-message-util "^29.1.0" + jest-util "^29.1.0" + jest-worker "^29.1.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1225,51 +1225,51 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.0.3.tgz#b03d8ef4c58be84cd5d5d3b24d4b4c8cabbf2746" - integrity sha512-vViVnQjCgTmbhDKEonKJPtcFe9G/CJO4/Np4XwYJah+lF2oI7KKeRp8t1dFvv44wN2NdbDb/qC6pi++Vpp0Dlg== +"@jest/test-result@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.0.tgz#da6b0062325a780c9e3c7262b6b89da57fba2dca" + integrity sha512-RMBhPlw1Qfc2bKSf3RFPCyFSN7cfWVSTxRD8JrnvqdqgaDgrq4aGJT1A/V2+5Vq9bqBd187FpaxGTQ4zLrt08g== dependencies: - "@jest/console" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/console" "^29.1.0" + "@jest/types" "^29.1.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.0.3.tgz#0681061ad21fb8e293b49c4fdf7e631ca79240ba" - integrity sha512-Hf4+xYSWZdxTNnhDykr8JBs0yBN/nxOXyUQWfotBUqqy0LF9vzcFB0jm/EDNZCx587znLWTIgxcokW7WeZMobQ== +"@jest/test-sequencer@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.0.tgz#d3d34497e860a44f3f80e94958651f58d3ce64f8" + integrity sha512-1diQfwNhBAte+x3TmyfWloxT1C8GcPEPEZ4BZjmELBK2j3cdqi0DofoJUxBDDUBBnakbv8ce0B7CIzprsupPSA== dependencies: - "@jest/test-result" "^29.0.3" + "@jest/test-result" "^29.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.3" + jest-haste-map "^29.1.0" slash "^3.0.0" -"@jest/transform@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.0.3.tgz#9eb1fed2072a0354f190569807d1250572fb0970" - integrity sha512-C5ihFTRYaGDbi/xbRQRdbo5ddGtI4VSpmL6AIcZxdhwLbXMa7PcXxxqyI91vGOFHnn5aVM3WYnYKCHEqmLVGzg== +"@jest/transform@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.0.tgz#1b3e597681362f6164e786e6bc2826c34ecbf74f" + integrity sha512-NI1zd62KgM0lW6rWMIZDx52dfTIDd+cnLQNahH0YhH7TVmQVigumJ6jszuhAzvKHGm55P2Fozcglb5sGMfFp3Q== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.3" + jest-haste-map "^29.1.0" jest-regex-util "^29.0.0" - jest-util "^29.0.3" + jest-util "^29.1.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^29.0.3": - version "29.0.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.3.tgz#0be78fdddb1a35aeb2041074e55b860561c8ef63" - integrity sha512-coBJmOQvurXjN1Hh5PzF7cmsod0zLIOXpP8KD161mqNlroMhLcwpODiEzi7ZsRl5Z/AIuxpeNm8DCl43F4kz8A== +"@jest/types@^29.1.0": + version "29.1.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.0.tgz#db23d727ce0a95500749551d8724fb3526d1e903" + integrity sha512-lE30u3z4lbTOqf5D7fDdoco3Qd8H6F/t73nLOswU4x+7VhgDQMX5y007IMqrKjFHdnpslaYymVFhWX+ttXNARQ== dependencies: "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" @@ -3019,12 +3019,12 @@ babel-extract-comments@^1.0.0: dependencies: babylon "^6.18.0" -babel-jest@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.0.3.tgz#64e156a47a77588db6a669a88dedff27ed6e260f" - integrity sha512-ApPyHSOhS/sVzwUOQIWJmdvDhBsMG01HX9z7ogtkp1TToHGGUWFlnXJUIzCgKPSfiYLn3ibipCYzsKSURHEwLg== +babel-jest@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.0.tgz#945e45eb8a33e8ad8cb334f2b0f040d7306cffbf" + integrity sha512-0XiBgPRhMSng+ThuXz0M/WpOeml/q5S4BFIaDS5uQb+lCjOzd0OfYEN4hWte5fDy7SZ6rNmEi16UpWGurSg2nQ== dependencies: - "@jest/transform" "^29.0.3" + "@jest/transform" "^29.1.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^29.0.2" @@ -5909,16 +5909,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.3.tgz#6be65ddb945202f143c4e07c083f4f39f3bd326f" - integrity sha512-t8l5DTws3212VbmPL+tBFXhjRHLmctHB0oQbL8eUc6S7NzZtYUhycrFO9mkxA0ZUC6FAWdNi7JchJSkODtcu1Q== +expect@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.0.tgz#0e20a72cf4b2cfb8ca5e2ab138c23c5078c37460" + integrity sha512-1NCfR0FEArn9Vq1KEjhPd1rggRLiWgo87gfMK4iKn6DcVzJBRMyDNX22hyND5KiSRPIPQ5KtsY6HLxsQ0MU86w== dependencies: - "@jest/expect-utils" "^29.0.3" + "@jest/expect-utils" "^29.1.0" jest-get-type "^29.0.0" - jest-matcher-utils "^29.0.3" - jest-message-util "^29.0.3" - jest-util "^29.0.3" + jest-matcher-utils "^29.1.0" + jest-message-util "^29.1.0" + jest-util "^29.1.0" express@^4.17.1: version "4.18.1" @@ -8160,86 +8160,86 @@ jest-changed-files@^29.0.0: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.0.3.tgz#90faebc90295291cfc636b27dbd82e3bfb9e7a48" - integrity sha512-QeGzagC6Hw5pP+df1+aoF8+FBSgkPmraC1UdkeunWh0jmrp7wC0Hr6umdUAOELBQmxtKAOMNC3KAdjmCds92Zg== +jest-circus@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.1.tgz#696e0b58351316f5fdb39d3480b4fffe8dbf0100" + integrity sha512-Ii+3JIeLF3z8j2E7fPSjPjXJLBdbAcZyfEiALRQ1Fk+FWTIfuEfZrZcjSaBdz/k/waoq+bPf9x/vBCXIAyLLEQ== dependencies: - "@jest/environment" "^29.0.3" - "@jest/expect" "^29.0.3" - "@jest/test-result" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/environment" "^29.1.1" + "@jest/expect" "^29.1.0" + "@jest/test-result" "^29.1.0" + "@jest/types" "^29.1.0" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.0.3" - jest-matcher-utils "^29.0.3" - jest-message-util "^29.0.3" - jest-runtime "^29.0.3" - jest-snapshot "^29.0.3" - jest-util "^29.0.3" + jest-each "^29.1.0" + jest-matcher-utils "^29.1.0" + jest-message-util "^29.1.0" + jest-runtime "^29.1.1" + jest-snapshot "^29.1.0" + jest-util "^29.1.0" p-limit "^3.1.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.0.3.tgz#fd8f0ef363a7a3d9c53ef62e0651f18eeffa77b9" - integrity sha512-aUy9Gd/Kut1z80eBzG10jAn6BgS3BoBbXyv+uXEqBJ8wnnuZ5RpNfARoskSrTIy1GY4a8f32YGuCMwibtkl9CQ== +jest-cli@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.1.tgz#6ff79c0b2d1d062f24216d2bcbf6c01a1e41db21" + integrity sha512-nz/JNtqDFf49R2KgeZ9+6Zl1uxSuRsg/tICC+DHMh+bQ0co6QqBPWKg3FtW4534bs8/J2YqFC2Lct9DZR24z0Q== dependencies: - "@jest/core" "^29.0.3" - "@jest/test-result" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/core" "^29.1.1" + "@jest/test-result" "^29.1.0" + "@jest/types" "^29.1.0" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.0.3" - jest-util "^29.0.3" - jest-validate "^29.0.3" + jest-config "^29.1.1" + jest-util "^29.1.0" + jest-validate "^29.1.0" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.0.3.tgz#c2e52a8f5adbd18de79f99532d8332a19e232f13" - integrity sha512-U5qkc82HHVYe3fNu2CRXLN4g761Na26rWKf7CjM8LlZB3In1jadEkZdMwsE37rd9RSPV0NfYaCjHdk/gu3v+Ew== +jest-config@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.1.tgz#52aaa6237a7b3eea5c640aad6a53b390dc76f49f" + integrity sha512-o2iZrQMOiF54zOw1kOcJGmfKzAW+V2ajZVWxbt+Ex+g0fVaTkk215BD/GFhrviuic+Xk7DpzUmdTT9c1QfsPqg== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.0.3" - "@jest/types" "^29.0.3" - babel-jest "^29.0.3" + "@jest/test-sequencer" "^29.1.0" + "@jest/types" "^29.1.0" + babel-jest "^29.1.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.0.3" - jest-environment-node "^29.0.3" + jest-circus "^29.1.1" + jest-environment-node "^29.1.1" jest-get-type "^29.0.0" jest-regex-util "^29.0.0" - jest-resolve "^29.0.3" - jest-runner "^29.0.3" - jest-util "^29.0.3" - jest-validate "^29.0.3" + jest-resolve "^29.1.0" + jest-runner "^29.1.1" + jest-util "^29.1.0" + jest-validate "^29.1.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.3.tgz#41cc02409ad1458ae1bf7684129a3da2856341ac" - integrity sha512-+X/AIF5G/vX9fWK+Db9bi9BQas7M9oBME7egU7psbn4jlszLFCu0dW63UgeE6cs/GANq4fLaT+8sGHQQ0eCUfg== +jest-diff@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.0.tgz#952639cd73fcf4d34173e2d98a0cd1c20c71ba88" + integrity sha512-ZJyWG30jpVHwxLs8xxR1so4tz6lFARNztnFlxssFpQdakaW0isSx9rAKs/6aQUKQDZ/DgSpY6HjUGLO9xkNdRw== dependencies: chalk "^4.0.0" diff-sequences "^29.0.0" jest-get-type "^29.0.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" jest-docblock@^29.0.0: version "29.0.0" @@ -8248,93 +8248,94 @@ jest-docblock@^29.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.0.3.tgz#7ef3157580b15a609d7ef663dd4fc9b07f4e1299" - integrity sha512-wILhZfESURHHBNvPMJ0lZlYZrvOQJxAo3wNHi+ycr90V7M+uGR9Gh4+4a/BmaZF0XTyZsk4OiYEf3GJN7Ltqzg== +jest-each@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.0.tgz#d0962d04f4a28f5f048c2ff50965cab9ae2f524d" + integrity sha512-ELSZV/L4yjqKU2O0bnDTNHlizD4IRS9DX94iAB6QpiPIJsR453dJW7Ka7TXSmxQdc66HNNOhUcQ5utIeVCKGyA== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" chalk "^4.0.0" jest-get-type "^29.0.0" - jest-util "^29.0.3" - pretty-format "^29.0.3" + jest-util "^29.1.0" + pretty-format "^29.1.0" -jest-environment-node@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.0.3.tgz#293804b1e0fa5f0e354dacbe510655caa478a3b2" - integrity sha512-cdZqRCnmIlTXC+9vtvmfiY/40Cj6s2T0czXuq1whvQdmpzAnj4sbqVYuZ4zFHk766xTTJ+Ij3uUqkk8KCfXoyg== +jest-environment-node@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.1.tgz#10f1782b74e17fcf782ff51df79f2b0cee135851" + integrity sha512-0nwTca4L2N8iM33A+JMfBdygR6B3N/bcPoLe1hEd9o87KLxDZwKGvpTGSfXpjtyqNQXiaL/3G+YOcSoeq/syPw== dependencies: - "@jest/environment" "^29.0.3" - "@jest/fake-timers" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/environment" "^29.1.1" + "@jest/fake-timers" "^29.1.1" + "@jest/types" "^29.1.0" "@types/node" "*" - jest-mock "^29.0.3" - jest-util "^29.0.3" + jest-mock "^29.1.1" + jest-util "^29.1.0" jest-get-type@^29.0.0: version "29.0.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== -jest-haste-map@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.0.3.tgz#d7f3f7180f558d760eacc5184aac5a67f20ef939" - integrity sha512-uMqR99+GuBHo0RjRhOE4iA6LmsxEwRdgiIAQgMU/wdT2XebsLDz5obIwLZm/Psj+GwSEQhw9AfAVKGYbh2G55A== +jest-haste-map@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.0.tgz#1cbdd30528b7b215523166cec3718600a3328ad1" + integrity sha512-qn+QVZ6JHzzx6g8XrMrNNvvIWrgVT6FzOoxTP5hQ1vEu6r9use2gOb0sSeC3Xle7eaDLN4DdAazSKnWskK3B/g== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.0.0" - jest-util "^29.0.3" - jest-worker "^29.0.3" + jest-util "^29.1.0" + jest-worker "^29.1.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.0.3.tgz#e85cf3391106a7a250850b6766b508bfe9c7bc6f" - integrity sha512-YfW/G63dAuiuQ3QmQlh8hnqLDe25WFY3eQhuc/Ev1AGmkw5zREblTh7TCSKLoheyggu6G9gxO2hY8p9o6xbaRQ== +jest-leak-detector@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.0.tgz#6b7067d383dbf0804f21e16426d8562d84f19340" + integrity sha512-7ZdlIA2UXBIzXBNadta7pohrrvbD/Jp5T55Ux2DE1BSGul4RglIPHt7cZ0V3ll+ppBC1pGaBiWPBfLcQ2dDc3Q== dependencies: jest-get-type "^29.0.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" -jest-matcher-utils@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.3.tgz#b8305fd3f9e27cdbc210b21fc7dbba92d4e54560" - integrity sha512-RsR1+cZ6p1hDV4GSCQTg+9qjeotQCgkaleIKLK7dm+U4V/H2bWedU3RAtLm8+mANzZ7eDV33dMar4pejd7047w== +jest-matcher-utils@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.0.tgz#60f53cc199921ece9170d3d20500ae0b93294928" + integrity sha512-pfthsLu27kZg+T1XTUGvox0r3gP3KtqdMPliVd/bs6iDrZ9Z6yJgLbw6zNc4DHtCcyzq9UW0jmszCX8DdFU/wA== dependencies: chalk "^4.0.0" - jest-diff "^29.0.3" + jest-diff "^29.1.0" jest-get-type "^29.0.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" -jest-message-util@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.3.tgz#f0254e1ffad21890c78355726202cc91d0a40ea8" - integrity sha512-7T8JiUTtDfppojosORAflABfLsLKMLkBHSWkjNQrjIltGoDzNGn7wEPOSfjqYAGTYME65esQzMJxGDjuLBKdOg== +jest-message-util@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.0.tgz#0bb50a8064aa49999a6c313827e43bf51bd71dd1" + integrity sha512-NzGXD9wgCxUy20sIvyOsSA/KzQmkmagOVGE5LnT2juWn+hB88gCQr8N/jpu34CXRIXmV7INwrQVVwhnh72pY5A== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.0.3" + pretty-format "^29.1.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.0.3.tgz#4f0093f6a9cb2ffdb9c44a07a3912f0c098c8de9" - integrity sha512-ort9pYowltbcrCVR43wdlqfAiFJXBx8l4uJDsD8U72LgBcetvEp+Qxj1W9ZYgMRoeAo+ov5cnAGF2B6+Oth+ww== +jest-mock@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.1.tgz#b5475d07a8db6d39fe73e960ca94a3ac761afe0d" + integrity sha512-vDe56JmImqt3j8pHcEIkahQbSCnBS49wda0spIl0bkrIM7VDZXjKaes6W28vKZye0atNAcFaj3dxXh0XWjBW4Q== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@types/node" "*" + jest-util "^29.1.0" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -8346,88 +8347,88 @@ jest-regex-util@^29.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== -jest-resolve-dependencies@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.3.tgz#f23a54295efc6374b86b198cf8efed5606d6b762" - integrity sha512-KzuBnXqNvbuCdoJpv8EanbIGObk7vUBNt/PwQPPx2aMhlv/jaXpUJsqWYRpP/0a50faMBY7WFFP8S3/CCzwfDw== +jest-resolve-dependencies@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.1.tgz#03104a866fb133cffd8a6fe7fc198b0de9a17232" + integrity sha512-AMRTJyiK8caRXq3pa9i4oXX6yH+am5v0HwCUq1yk9lxI3ARihyT2OfEySJJo3ER7xpxf3b6isfp1sO6PQY3N0Q== dependencies: jest-regex-util "^29.0.0" - jest-snapshot "^29.0.3" + jest-snapshot "^29.1.0" -jest-resolve@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.0.3.tgz#329a3431e3b9eb6629a2cd483e9bed95b26827b9" - integrity sha512-toVkia85Y/BPAjJasTC9zIPY6MmVXQPtrCk8SmiheC4MwVFE/CMFlOtMN6jrwPMC6TtNh8+sTMllasFeu1wMPg== +jest-resolve@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.0.tgz#114d2a86f6ff07e1cc56dbe84deb9d6e058b4399" + integrity sha512-0IETuMI58nbAWwCrtX1QQmenstlWOEdwNS5FXxpEMAs6S5tttFiEoXUwGTAiI152nqoWRUckAgt21FP4wqeZWA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.3" + jest-haste-map "^29.1.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.0.3" - jest-validate "^29.0.3" + jest-util "^29.1.0" + jest-validate "^29.1.0" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.0.3.tgz#2e47fe1e8777aea9b8970f37e8f83630b508fb87" - integrity sha512-Usu6VlTOZlCZoNuh3b2Tv/yzDpKqtiNAetG9t3kJuHfUyVMNW7ipCCJOUojzKkjPoaN7Bl1f7Buu6PE0sGpQxw== +jest-runner@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.1.tgz#4ababc79ec3ec654de33db093ca2ec78599fa7ad" + integrity sha512-HqazsMPXB62Zi2oJEl+Ta9aUWAaR4WdT7ow25pcS99PkOsWQoYH+yyaKbAHBUf8NOqPbZ8T4Q8gt8ZBFEJJdVQ== dependencies: - "@jest/console" "^29.0.3" - "@jest/environment" "^29.0.3" - "@jest/test-result" "^29.0.3" - "@jest/transform" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/console" "^29.1.0" + "@jest/environment" "^29.1.1" + "@jest/test-result" "^29.1.0" + "@jest/transform" "^29.1.0" + "@jest/types" "^29.1.0" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^29.0.0" - jest-environment-node "^29.0.3" - jest-haste-map "^29.0.3" - jest-leak-detector "^29.0.3" - jest-message-util "^29.0.3" - jest-resolve "^29.0.3" - jest-runtime "^29.0.3" - jest-util "^29.0.3" - jest-watcher "^29.0.3" - jest-worker "^29.0.3" + jest-environment-node "^29.1.1" + jest-haste-map "^29.1.0" + jest-leak-detector "^29.1.0" + jest-message-util "^29.1.0" + jest-resolve "^29.1.0" + jest-runtime "^29.1.1" + jest-util "^29.1.0" + jest-watcher "^29.1.0" + jest-worker "^29.1.0" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.0.3.tgz#5a823ec5902257519556a4e5a71a868e8fd788aa" - integrity sha512-12gZXRQ7ozEeEHKTY45a+YLqzNDR/x4c//X6AqwKwKJPpWM8FY4vwn4VQJOcLRS3Nd1fWwgP7LU4SoynhuUMHQ== +jest-runtime@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.1.tgz#54a4cc4665d5c86f072f3f8fe3f9ec83d3802c8b" + integrity sha512-DA2nW5GUAEFUOFztVqX6BOHbb1tUO1iDzlx+bOVdw870UIkv09u3P5nTfK3N+xtqy/fGlLsg7UCzhpEJnwKilg== dependencies: - "@jest/environment" "^29.0.3" - "@jest/fake-timers" "^29.0.3" - "@jest/globals" "^29.0.3" + "@jest/environment" "^29.1.1" + "@jest/fake-timers" "^29.1.1" + "@jest/globals" "^29.1.1" "@jest/source-map" "^29.0.0" - "@jest/test-result" "^29.0.3" - "@jest/transform" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/test-result" "^29.1.0" + "@jest/transform" "^29.1.0" + "@jest/types" "^29.1.0" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.0.3" - jest-message-util "^29.0.3" - jest-mock "^29.0.3" + jest-haste-map "^29.1.0" + jest-message-util "^29.1.0" + jest-mock "^29.1.1" jest-regex-util "^29.0.0" - jest-resolve "^29.0.3" - jest-snapshot "^29.0.3" - jest-util "^29.0.3" + jest-resolve "^29.1.0" + jest-snapshot "^29.1.0" + jest-util "^29.1.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.0.3.tgz#0a024706986a915a6eefae74d7343069d2fc8eef" - integrity sha512-52q6JChm04U3deq+mkQ7R/7uy7YyfVIrebMi6ZkBoDJ85yEjm/sJwdr1P0LOIEHmpyLlXrxy3QP0Zf5J2kj0ew== +jest-snapshot@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.0.tgz#9da20c1c504a41e79abcbfecced090325b3cdba1" + integrity sha512-nHZoA+hpbFlkyV8uLoLJQ/80DLi3c6a5zeELgfSZ5bZj+eljqULr79KBQakp5xyH3onezf4k+K+2/Blk5/1O+g== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -8435,81 +8436,81 @@ jest-snapshot@^29.0.3: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.0.3" - "@jest/transform" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/expect-utils" "^29.1.0" + "@jest/transform" "^29.1.0" + "@jest/types" "^29.1.0" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.0.3" + expect "^29.1.0" graceful-fs "^4.2.9" - jest-diff "^29.0.3" + jest-diff "^29.1.0" jest-get-type "^29.0.0" - jest-haste-map "^29.0.3" - jest-matcher-utils "^29.0.3" - jest-message-util "^29.0.3" - jest-util "^29.0.3" + jest-haste-map "^29.1.0" + jest-matcher-utils "^29.1.0" + jest-message-util "^29.1.0" + jest-util "^29.1.0" natural-compare "^1.4.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" semver "^7.3.5" -jest-util@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.3.tgz#06d1d77f9a1bea380f121897d78695902959fbc0" - integrity sha512-Q0xaG3YRG8QiTC4R6fHjHQPaPpz9pJBEi0AeOE4mQh/FuWOijFjGXMMOfQEaU9i3z76cNR7FobZZUQnL6IyfdQ== +jest-util@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.0.tgz#e8a971dfb900bb85f090c752aa321b6912e81002" + integrity sha512-5haD8egMAEAq/e8ritN2Gr1WjLYtXi4udAIZB22GnKlv/2MHkbCjcyjgDBmyezAMMeQKGfoaaDsWCmVlnHZ1WQ== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.0.3.tgz#f9521581d7344685428afa0a4d110e9c519aeeb6" - integrity sha512-OebiqqT6lK8cbMPtrSoS3aZP4juID762lZvpf1u+smZnwTEBCBInan0GAIIhv36MxGaJvmq5uJm7dl5gVt+Zrw== +jest-validate@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.0.tgz#5e2ba89d7d6b3e4d3ece34024f317e956a5c85c0" + integrity sha512-EQKRweSxmIJelCdirpuVkeCS1rSNXJFtSGEeSRFwH39QGioy7qKRSY8XBB4qFiappbsvgHnH0V6Iq5ASs11knA== dependencies: - "@jest/types" "^29.0.3" + "@jest/types" "^29.1.0" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.0.0" leven "^3.1.0" - pretty-format "^29.0.3" + pretty-format "^29.1.0" -jest-watcher@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.0.3.tgz#8e220d1cc4f8029875e82015d084cab20f33d57f" - integrity sha512-tQX9lU91A+9tyUQKUMp0Ns8xAcdhC9fo73eqA3LFxP2bSgiF49TNcc+vf3qgGYYK9qRjFpXW9+4RgF/mbxyOOw== +jest-watcher@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.0.tgz#4a9f9d2c9bb9115f7b543c26f468d2c0c0202506" + integrity sha512-JXw7+VpLSf+2yfXlux1/xR65fMn//0pmiXd6EtQWySS9233aA+eGS+8Y5o2imiJ25JBKdG8T45+s78CNQ71Fbg== dependencies: - "@jest/test-result" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/test-result" "^29.1.0" + "@jest/types" "^29.1.0" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^29.0.3" + jest-util "^29.1.0" string-length "^4.0.1" -jest-worker@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.0.3.tgz#c2ba0aa7e41eec9eb0be8e8a322ae6518df72647" - integrity sha512-Tl/YWUugQOjoTYwjKdfJWkSOfhufJHO5LhXTSZC3TRoQKO+fuXnZAdoXXBlpLXKGODBL3OvdUasfDD4PcMe6ng== +jest-worker@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.0.tgz#374d741b976a868e39141d63fb401abacc07a8c9" + integrity sha512-yr7RFRAxI+vhL/cGB9B0FhD+QfaWh1qSxurx7gLP16dfmqhG8w75D/CQFU8ZetvhiQqLZh8X0C4rxwsZy6HITQ== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.0.3.tgz#5227a0596d30791b2649eea347e4aa97f734944d" - integrity sha512-ElgUtJBLgXM1E8L6K1RW1T96R897YY/3lRYqq9uVcPWtP2AAl/nQ16IYDh/FzQOOQ12VEuLdcPU83mbhG2C3PQ== +jest@29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.1.tgz#22d9d828f01335ec17225bcb267fe669319983be" + integrity sha512-Doe41PZ8MvGLtOZIW2RIVu94wa7jm/N775BBloVXk/G/vV6VYnDCOxBwrqekEgrd3Pn/bv8b5UdB2x0pAoQpwQ== dependencies: - "@jest/core" "^29.0.3" - "@jest/types" "^29.0.3" + "@jest/core" "^29.1.1" + "@jest/types" "^29.1.0" import-local "^3.0.2" - jest-cli "^29.0.3" + jest-cli "^29.1.1" jquery@^3.5.0: version "3.6.1" @@ -11253,10 +11254,10 @@ pretty-error@^2.0.2: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^29.0.3: - version "29.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.3.tgz#23d5f8cabc9cbf209a77d49409d093d61166a811" - integrity sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q== +pretty-format@^29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.0.tgz#ea3de2feed5b8d19c537a12fe478ddc8b45da6b8" + integrity sha512-dZ21z0UjKVSiEkrPAt2nJnGfrtYMFBlNW4wTkJsIp9oB5A8SUQ8DuJ9EUgAvYyNfMeoGmKiDnpJvM489jkzdSQ== dependencies: "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" From 4df965dfda4a5c81303e95bbe8e0cdc6c386bc43 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Sep 2022 23:11:00 +0000 Subject: [PATCH 06/30] chore(deps): bump @sentry/node from 7.13.0 to 7.14.0 (#10942) Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 7.13.0 to 7.14.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.13.0...7.14.0) --- updated-dependencies: - dependency-name: "@sentry/node" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 60 ++++++++++++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index b3f9ac0f02..6f901dc946 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "dependencies": { "@koa/router": "12.0.0", "@postlight/parser": "2.2.2", - "@sentry/node": "7.13.0", + "@sentry/node": "7.14.0", "aes-js": "3.1.2", "art-template": "4.13.2", "bbcodejs": "0.0.4", diff --git a/yarn.lock b/yarn.lock index 6bbf4ecb77..62830fd746 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1544,50 +1544,50 @@ domhandler "^4.2.0" selderee "^0.6.0" -"@sentry/core@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.13.0.tgz#65597d71f8bfa1186f34009803e03ca9edb3adee" - integrity sha512-hB46fklmKrSDMEvZOF8qBHhys7PONBFyxQtbNDZUlv/kabs4gF3VEg1ftCaXnjx4lLNlsUl/ScFdM6194RvISg== +"@sentry/core@7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.14.0.tgz#89178822de75c6023e1718c29bee8d588687cedd" + integrity sha512-Hgn7De6CiCFnz868/Lrtei+9rj7/TIwhbDe3J+NeH+2ffXYn4VI8FxrlR/p2XfIq9iCfmG80EQXDtSh+Kh7mOw== dependencies: - "@sentry/hub" "7.13.0" - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/hub" "7.14.0" + "@sentry/types" "7.14.0" + "@sentry/utils" "7.14.0" tslib "^1.9.3" -"@sentry/hub@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.13.0.tgz#752068e528cfb277ed154bc94e311cad50ef792e" - integrity sha512-88/GsD1BoyrBwRKJCmVHZtSH5rizOsImUHWEXc1AOa1aR8nanfn56JdAbd6tC55pA+nT4R4H4vN/PrUaomTbtg== +"@sentry/hub@7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.14.0.tgz#cf8e8a345c63a75ea1f3a2d7169a47ab73ff9603" + integrity sha512-O+pxsipeiURC6Mxuivz1pX3yHlkQCI2yjP38bISxUZv1NIijHuxiDmgqrrcCJltiIfyY2+f9LAezKVCAXnPFuw== dependencies: - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/types" "7.14.0" + "@sentry/utils" "7.14.0" tslib "^1.9.3" -"@sentry/node@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.13.0.tgz#0e073b75d4cce684db006d93ef18f2de2cf2f60e" - integrity sha512-uP3bPAIRHPilnOEiYGQQDLaQphc/c7d87wm91bZrTJ+WPnMW4D/NmT7fna5zGGDQIr/KTdQ/LEpDeZOILbkCqQ== +"@sentry/node@7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.14.0.tgz#51f69a0a75388100cc06b332cffd995009ca558f" + integrity sha512-dI5kluEkvnKlW2dMYQGM9rAYmL+dVdaZPSnqnP2DcuW3taquCoBX1POXokD/GS6Qdv/eNeMu+rDxEGYTTkBXBg== dependencies: - "@sentry/core" "7.13.0" - "@sentry/hub" "7.13.0" - "@sentry/types" "7.13.0" - "@sentry/utils" "7.13.0" + "@sentry/core" "7.14.0" + "@sentry/hub" "7.14.0" + "@sentry/types" "7.14.0" + "@sentry/utils" "7.14.0" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/types@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.13.0.tgz#398e33e5c92ea0ce91e2c86e3ab003fe00c471a2" - integrity sha512-ttckM1XaeyHRLMdr79wmGA5PFbTGx2jio9DCD/mkEpSfk6OGfqfC7gpwy7BNstDH/VKyQj/lDCJPnwvWqARMoQ== +"@sentry/types@7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.14.0.tgz#8069e58a0104190e328647963036c7597e2e5fa8" + integrity sha512-9iFZS9Hr5hAoL+M9oUH2dY9burOaQh+CHGH66fortuTp++YDWKdbPEeKcz8hRJaUyBBn53rdxiBmAyHsrlE6KA== -"@sentry/utils@7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.13.0.tgz#0d47a9278806ece78ba3a83c7dbebce817462759" - integrity sha512-jnR85LgRLSk7IQe2OhKOPMY4fasJCNQNW0iCXsH+S2R1qnsF+N4ksNkQ+7JyyM9E7F03YpI2qd76bKY0VIn5iA== +"@sentry/utils@7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.14.0.tgz#58dab9e53ad662231c3289842edbc7f885ebc7cb" + integrity sha512-q9em4ZBcaUk7J1WULiltZVEcbyCE0wwAIjqRaoNmHVe4FeK++uAPo2ULZM1kQgN8syZnQ1jcfLktIKkWfnE2cg== dependencies: - "@sentry/types" "7.13.0" + "@sentry/types" "7.14.0" tslib "^1.9.3" "@sinclair/typebox@^0.24.1": From 1fd2a8f273bdf0b846365c23b96fb7139b6208f1 Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Thu, 29 Sep 2022 08:00:53 +0800 Subject: [PATCH 07/30] =?UTF-8?q?feat(route):=20add=208=E8=A7=86=E7=95=8C?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=20(#10937)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/radar-rules.js | 2 +- docs/new-media.md | 19 +++++++++++++++---- lib/v2/8world/index.js | 16 ++++++++-------- lib/v2/8world/maintainer.js | 1 + lib/v2/8world/radar.js | 6 ++++++ lib/v2/8world/router.js | 2 +- 6 files changed, 32 insertions(+), 14 deletions(-) diff --git a/assets/radar-rules.js b/assets/radar-rules.js index bf9dec0460..627147be90 100644 --- a/assets/radar-rules.js +++ b/assets/radar-rules.js @@ -1,5 +1,5 @@ ({ - '8world.com': { _name: '8视界', '.': [{ title: '分类', docs: 'https://docs.rsshub.app/new-media.html#_8-shi-jie-fen-lei', source: ['/:category', '/'], target: '/8world/:category?' }] }, + // '8world.com': { _name: '8视界', '.': [{ title: '分类', docs: 'https://docs.rsshub.app/new-media.html#_8-shi-jie-fen-lei', source: ['/:category', '/'], target: '/8world/:category?' }] }, 'aamacau.com': { _name: '論盡媒體 AllAboutMacau Media', '.': [{ title: '话题', docs: 'https://docs.rsshub.app/new-media.html#lun-jin-mei-ti-allaboutmacau-media-hua-ti', source: ['/'], target: '/:category?/:id?' }] }, 'eprice.com.tw': { _name: 'ePrice', '.': [{ title: 'ePrice 比價王', docs: 'https://docs.rsshub.app/new-media.html#eprice', source: ['/'], target: '/:region?' }] }, 'eprice.com.hk': { _name: 'ePrice', '.': [{ title: 'ePrice 香港', docs: 'https://docs.rsshub.app/new-media.html#eprice', source: ['/'], target: '/:region?' }] }, diff --git a/docs/new-media.md b/docs/new-media.md index e41fd647c2..e653f62720 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -100,14 +100,25 @@ pageClass: routes ### 分类 - + -| 即时 | 新加坡 | 东南亚 | 中港台 | 国际 | 财经 | 体育 | -| -------- | --------- | -------------- | ------------- | ----- | ------- | ------ | -| realtime | singapore | southeast-asia | greater-china | world | finance | sports | +| 分类 | id | +| ------------------- | -------------- | +| 即时 REALTIME | realtime | +| 新加坡 SINGAPORE | singapore | +| 东南亚 SOUTH-EAST ASIA | southeast-asia | +| 中港台 GREATER CHINA | greater-china | +| 国际 WORLD | world | +| 财经 FINANCE | finance | +| 体育 SPORTS | sports | +| 社团 COMMUNITY | community | +### 标签 + + + ## 9To5 ### 9To5 分站 diff --git a/lib/v2/8world/index.js b/lib/v2/8world/index.js index 3a5ce452f8..351b1dcd2a 100644 --- a/lib/v2/8world/index.js +++ b/lib/v2/8world/index.js @@ -3,10 +3,10 @@ const cheerio = require('cheerio'); const { parseDate } = require('@/utils/parse-date'); module.exports = async (ctx) => { - const category = ctx.params.category ?? 'realtime'; + const path = ctx.path === '/' ? '/realtime' : ctx.path; const rootUrl = 'https://www.8world.com'; - const currentUrl = `${rootUrl}/${category}`; + const currentUrl = `${rootUrl}${path}`; const response = await got({ method: 'get', @@ -15,19 +15,19 @@ module.exports = async (ctx) => { const $ = cheerio.load(response.data); - const list = $('div[data-column="Two-Third"] .article-title .article-link') - .map((_, item) => { + let items = $('div[data-column="Two-Third"] .article-title .article-link') + .toArray() + .map((item) => { item = $(item); return { title: item.text(), link: `${rootUrl}${item.attr('href')}`, }; - }) - .get(); + }); - const items = await Promise.all( - list.map((item) => + items = await Promise.all( + items.map((item) => ctx.cache.tryGet(item.link, async () => { const detailResponse = await got({ method: 'get', diff --git a/lib/v2/8world/maintainer.js b/lib/v2/8world/maintainer.js index 81eb78d732..932ca1ca12 100644 --- a/lib/v2/8world/maintainer.js +++ b/lib/v2/8world/maintainer.js @@ -1,3 +1,4 @@ module.exports = { '/:category?': ['nczitzk'], + '/topic/:id': ['nczitzk'], }; diff --git a/lib/v2/8world/radar.js b/lib/v2/8world/radar.js index 90e50ea8b0..4f53efbe64 100644 --- a/lib/v2/8world/radar.js +++ b/lib/v2/8world/radar.js @@ -8,6 +8,12 @@ module.exports = { source: ['/:category', '/'], target: '/8world/:category?', }, + { + title: '标签', + docs: 'https://docs.rsshub.app/new-media.html#_8-shi-jie-biao-qian', + source: ['/topic/:id', '/'], + target: '/8world/topic/:id', + }, ], }, }; diff --git a/lib/v2/8world/router.js b/lib/v2/8world/router.js index cf781366fd..4063156855 100644 --- a/lib/v2/8world/router.js +++ b/lib/v2/8world/router.js @@ -1,3 +1,3 @@ module.exports = function (router) { - router.get('/:category?', require('./index')); + router.get(/([\w-/]+)?/, require('./index')); }; From 8edc638f798c61842ffce8fd9160091da2afe4e8 Mon Sep 17 00:00:00 2001 From: Felix Hsu Date: Thu, 29 Sep 2022 16:37:34 +0800 Subject: [PATCH 08/30] fix(route): finally bypass the ccdi.gov cookie and js based anti-spider system (#10944) * try to minic the js cookie behavior and bypass the anti spider * add more selector for diff article * regex polished * fix(route): cookie setting should be called in await * Extract the anti spider from js and finally bypass it --- lib/v2/gov/ccdi/utils.js | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/lib/v2/gov/ccdi/utils.js b/lib/v2/gov/ccdi/utils.js index 1e23ec1210..d48af9deac 100644 --- a/lib/v2/gov/ccdi/utils.js +++ b/lib/v2/gov/ccdi/utils.js @@ -3,18 +3,25 @@ const { parseDate } = require('@/utils/parse-date'); const got = require('@/utils/got'); const timezone = require('@/utils/timezone'); -const { CookieJar } = require('tough-cookie'); +const { CookieJar, Cookie } = require('tough-cookie'); const cookieJar = new CookieJar(); const owner = '中央纪委国家监委网站'; const rootUrl = 'https://www.ccdi.gov.cn'; -const regex = /([A-Z_]+=(?:.*?(?=; max-age)|[a-fA-F0-9]+))/gm; +const regex = /(?[A-Z_]+)=(?(?:.*?(?=; max-age)|[a-fA-F0-9]+))/gm; const parseCookie = async (body) => { - const cookies = body.match(regex); - if (cookies) { - await Promise.all(cookies.map((c) => cookieJar.setCookie(c, rootUrl))); + let m; + const cookies = []; + while ((m = regex.exec(body)) !== null) { + // This is necessary to avoid infinite loops with zero-width matches + if (m.index === regex.lastIndex) { + regex.lastIndex++; + } + const { key, value } = m.groups; + cookies.push(new Cookie({ key, value })); } + await Promise.all(cookies.map((c) => cookieJar.setCookie(c, rootUrl))); }; const parseNewsList = async (url, selector, ctx) => { @@ -40,8 +47,24 @@ const parseNewsList = async (url, selector, ctx) => { return { list, title }; }; -const parseArticle = async (item, ctx) => - await ctx.cache.tryGet(item.link, async () => { +const changeTrCookie = async () => { + const cookies = await cookieJar.getCookies(rootUrl); + const c = cookies.find((c) => c.key === 'HOY_TR'); + if (c) { + const value = c.value; + const tr_array = value.split(','); + const csr = tr_array[0]; + const cnv = tr_array[1].split(''); + const otr = tr_array[2].split(''); + otr[0] = csr.charAt(parseInt(cnv[0], 16)); + const nc = new Cookie({ key: 'HOY_TR', value: csr + ',' + cnv.join('') + ',' + otr.join('') + ',0' }); + await cookieJar.setCookie(nc, rootUrl); + } +}; + +const parseArticle = async (item, ctx) => { + await changeTrCookie(); + return await ctx.cache.tryGet(item.link, async () => { const response = await got(item.link, { cookieJar }); const data = response.data; await parseCookie(data); @@ -62,6 +85,7 @@ const parseArticle = async (item, ctx) => item.description = $('.content, .bom-box').html(); return item; }); +}; module.exports = { rootUrl, From 578a6442d276b2a532a11d592a2b694cd5ea14c2 Mon Sep 17 00:00:00 2001 From: shiningdracon Date: Thu, 29 Sep 2022 04:50:18 -0700 Subject: [PATCH 09/30] fix(route): /zhihu/people/activities/:id (#10954) * Fix zhihu activities * Cleanup code * fix: package & yarn.lock --- lib/v2/zhihu/activities.js | 15 +- lib/v2/zhihu/execlib/g_encrypt_3.js | 430 ++++++++++++++++++++++++++++ lib/v2/zhihu/execlib/hash.js | 155 ++++++++++ package.json | 1 + yarn.lock | 29 +- 5 files changed, 621 insertions(+), 9 deletions(-) create mode 100644 lib/v2/zhihu/execlib/g_encrypt_3.js create mode 100644 lib/v2/zhihu/execlib/hash.js diff --git a/lib/v2/zhihu/activities.js b/lib/v2/zhihu/activities.js index 64421f190c..677acef3e3 100644 --- a/lib/v2/zhihu/activities.js +++ b/lib/v2/zhihu/activities.js @@ -1,8 +1,9 @@ +/* eslint-disable no-console */ const got = require('@/utils/got'); const utils = require('./utils'); const { parseDate } = require('@/utils/parse-date'); -const md5 = require('@/utils/md5'); -const g_encrypt = require('./execlib/g_encrypt'); +const g_encrypt = require('./execlib/g_encrypt_3'); +const zhihu_hash = require('./execlib/hash.js'); module.exports = async (ctx) => { const id = ctx.params.id; @@ -33,16 +34,16 @@ module.exports = async (ctx) => { const cookie = `d_c0=${cookie_mes}`; // second: get real data from zhihu - const apiPath = `/api/v4/web_moments/${id}/activities?limit=7&desktop=true`; + const apiPath = `/api/v3/moments/${id}/activities?limit=7&desktop=true`; // calculate x-zse-96, refer to https://github.com/srx-2000/spider_collection/issues/18 - const f = `101_3_2.0+${apiPath}+${cookie_mes}`; - const xzse96 = '2.0_' + g_encrypt(md5(f)); - const _header = { cookie, 'x-zse-96': xzse96, 'x-app-za': 'OS=Web', 'x-zse-93': '101_3_2.0' }; + const f = `101_3_3.0+${apiPath}+${cookie_mes}`; + const xzse96 = '2.0_' + g_encrypt(zhihu_hash(f)); + const _header = { cookie, 'x-zse-96': xzse96, 'x-app-za': 'OS=Web', 'x-zse-93': '101_3_3.0' }; const response = await got({ method: 'get', - url: `https://www.zhihu.com/api/v4/web_moments/${id}/activities?limit=7&desktop=true`, + url: `https://www.zhihu.com/api/v3/moments/${id}/activities?limit=7&desktop=true`, headers: { ...utils.header, ..._header, diff --git a/lib/v2/zhihu/execlib/g_encrypt_3.js b/lib/v2/zhihu/execlib/g_encrypt_3.js new file mode 100644 index 0000000000..7e3affd5d4 --- /dev/null +++ b/lib/v2/zhihu/execlib/g_encrypt_3.js @@ -0,0 +1,430 @@ +/* eslint-disable space-in-parens */ +/* eslint-disable no-eval */ +/* eslint-disable block-scoped-var */ +/* eslint-disable no-var */ +/* eslint-disable eqeqeq */ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-func-assign */ + +const jsdom = require('jsdom'); +const { JSDOM } = jsdom; +const dom = new JSDOM(`

Hello world

`); +dom.reconfigure({ + url: 'https://www.zhihu.com', +}); +const window = dom.window; +const document = dom.window.document; +document.toString = function () { + return '[object HTMLDocument]'; +}; +const navigator = dom.window.navigator; +const location = dom.window.location; +const Location = dom.window.location; +const history = dom.window.history; +const screen = dom.window.screen; +const alert = dom.window.alert; + +function o(e) { + return (o = + 'function' == typeof Symbol && 'symbol' == typeof Symbol.A + ? function (e) { + return typeof e; + } + : function (e) { + return e && 'function' == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e; + })(e); +} +function x(e) { + return C(e) || s(e) || t(); +} +function C(e) { + if (Array.isArray(e)) { + for (var t = 0, n = new Array(e.length); t < e.length; t++) { + n[t] = e[t]; + } + return n; + } +} +function s(e) { + if (Symbol.A in Object(e) || '[object Arguments]' === Object.prototype.toString.call(e)) { + return Array.from(e); + } +} +function t() { + throw new TypeError('Invalid attempt to spread non-iterable instance'); +} +Object.defineProperty(exports, '__esModule', { + value: !0, +}); +var A = '3.0', + S = window, + h; +function i(e, t, n) { + (t[n] = 255 & (e >>> 24)), (t[n + 1] = 255 & (e >>> 16)), (t[n + 2] = 255 & (e >>> 8)), (t[n + 3] = 255 & e); +} +function B(e, t) { + return ((255 & e[t]) << 24) | ((255 & e[t + 1]) << 16) | ((255 & e[t + 2]) << 8) | (255 & e[t + 3]); +} +function Q(e, t) { + return ((4294967295 & e) << t) | (e >>> (32 - t)); +} +function G(e) { + var t = new Array(4), + n = new Array(4); + i(e, t, 0), (n[0] = h.zb[255 & t[0]]), (n[1] = h.zb[255 & t[1]]), (n[2] = h.zb[255 & t[2]]), (n[3] = h.zb[255 & t[3]]); + var r = B(n, 0); + return r ^ Q(r, 2) ^ Q(r, 10) ^ Q(r, 18) ^ Q(r, 24); +} +var __g = { + x(e, t) { + for (var n = [], r = e.length, i = 0; 0 < r; r -= 16) { + for (var o = e.slice(16 * i, 16 * (i + 1)), a = new Array(16), c = 0; c < 16; c++) { + a[c] = o[c] ^ t[c]; + } + (t = __g.r(a)), (n = n.concat(t)), i++; + } + return n; + }, + r(e) { + var t = new Array(16), + n = new Array(36); + (n[0] = B(e, 0)), (n[1] = B(e, 4)), (n[2] = B(e, 8)), (n[3] = B(e, 12)); + for (var r = 0; r < 32; r++) { + var o = G(n[r + 1] ^ n[r + 2] ^ n[r + 3] ^ h.zk[r]); + n[r + 4] = n[r] ^ o; + } + return i(n[35], t, 0), i(n[34], t, 4), i(n[33], t, 8), i(n[32], t, 12), t; + }, +}; +function l() { + (this.C = [0, 0, 0, 0]), + (this.s = +[]), + (this.t = []), + (this.S = []), + (this.h = []), + (this.i = []), + (this.B = []), + (this.Q = !1), + (this.G = []), + (this.D = []), + (this.w = 1024), + (this.g = null), + (this.a = Date.now()), + (this.e = +[]), + (this.T = 255), + (this.V = null), + (this.U = Date.now), + (this.M = new Array(32)); +} +(l.prototype.O = function (A, C, s) { + for (var t, S, h, i, B, Q, G, D, w, g, a, e, E, T, r, V, U, M, O, c, I; this.T < this.w; ) { + try { + switch (this.T) { + case 27: + (this.C[this.c] = this.C[this.I] >> this.C[this.F]), (this.M[12] = 35), (this.T = this.T * (this.C.length + (this.M[13] ? 3 : 9)) + 1); + break; + case 34: + (this.C[this.c] = this.C[this.I] & this.C[this.F]), (this.T = this.T * (this.M[15] - 6) + 12); + break; + case 41: + (this.C[this.c] = this.C[this.I] <= this.C[this.F]), (this.T = 8 * this.T + 27); + break; + case 48: + (this.C[this.c] = !this.C[this.I]), (this.T = 7 * this.T + 16); + break; + case 50: + (this.C[this.c] = this.C[this.I] | this.C[this.F]), (this.T = 6 * this.T + 52); + break; + case 57: + (this.C[this.c] = this.C[this.I] >>> this.C[this.F]), (this.T = 7 * this.T - 47); + break; + case 64: + (this.C[this.c] = this.C[this.I] << this.C[this.F]), (this.T = 5 * this.T + 32); + break; + case 71: + (this.C[this.c] = this.C[this.I] ^ this.C[this.F]), (this.T = 6 * this.T - 74); + break; + case 78: + (this.C[this.c] = this.C[this.I] & this.C[this.F]), (this.T = 4 * this.T + 40); + break; + case 80: + (this.C[this.c] = this.C[this.I] < this.C[this.F]), (this.T = 5 * this.T - 48); + break; + case 87: + (this.C[this.c] = -this.C[this.I]), (this.T = 3 * this.T + 91); + break; + case 94: + (this.C[this.c] = this.C[this.I] > this.C[this.F]), (this.T = 4 * this.T - 24); + break; + case 101: + (this.C[this.c] = this.C[this.I] in this.C[this.F]), (this.T = 3 * this.T + 49); + break; + case 108: + (this.C[this.c] = o(this.C[this.I])), (this.T = 2 * this.T + 136); + break; + case 110: + (this.C[this.c] = this.C[this.I] !== this.C[this.F]), (this.T += 242); + break; + case 117: + (this.C[this.c] = this.C[this.I] && this.C[this.F]), (this.T = 3 * this.T + 1); + break; + case 124: + (this.C[this.c] = this.C[this.I] || this.C[this.F]), (this.T += 228); + break; + case 131: + (this.C[this.c] = this.C[this.I] >= this.C[this.F]), (this.T = 3 * this.T - 41); + break; + case 138: + (this.C[this.c] = this.C[this.I] == this.C[this.F]), (this.T = 2 * this.T + 76); + break; + case 140: + (this.C[this.c] = this.C[this.I] % this.C[this.F]), (this.T += 212); + break; + case 147: + (this.C[this.c] = this.C[this.I] / this.C[this.F]), (this.T += 205); + break; + case 154: + (this.C[this.c] = this.C[this.I] * this.C[this.F]), (this.T += 198); + break; + case 161: + (this.C[this.c] = this.C[this.I] - this.C[this.F]), (this.T += 191); + break; + case 168: + (this.C[this.c] = this.C[this.I] + this.C[this.F]), (this.T = 2 * this.T + 16); + break; + case 254: + (this.C[this.c] = eval(i)), (this.T += 20 < this.M[11] ? 98 : 89); + break; + case 255: + (this.s = C || 0), (this.M[26] = 52), (this.T += this.M[13] ? 8 : 6); + break; + case 258: + g = {}; + for (var F = 0; F < this.k; F++) { + (e = this.i.pop()), (a = this.i.pop()), (g[a] = e); + } + (this.C[this.W] = g), (this.T += 94); + break; + case 261: + (this.D = s || []), (this.M[11] = 68), (this.T += this.M[26] ? 3 : 5); + break; + case 264: + (this.M[15] = 16), (this.T = 'string' == typeof A ? 331 : 336); + break; + case 266: + (this.C[this.I][i] = this.i.pop()), (this.T += 86); + break; + case 278: + if (i == '_resourceLoader' || i == '_sessionHistory') { + (this.C[this.c] = this.C[this.I]._function_not_exists), (this.T += this.M[22] ? 63 : 74); + } else if (this.C[this.I].toString() == '[object Window]' && i == 'constructor') { + (this.C[this.c] = 'function Window() { [native code] }'.toString()), (this.T += this.M[22] ? 63 : 74); + } else { + (this.C[this.c] = this.C[this.I][i]), (this.T += this.M[22] ? 63 : 74); + } + break; + case 283: + this.C[this.c] = eval(String.fromCharCode(this.C[this.I])); + break; + case 300: + (S = this.U()), (this.M[0] = 66), (this.T += this.M[11]); + break; + case 331: + (D = atob(A)), (w = (D.charCodeAt(0) << 16) | (D.charCodeAt(1) << 8) | D.charCodeAt(2)); + for (var k = 3; k < w + 3; k += 3) { + this.G.push((D.charCodeAt(k) << 16) | (D.charCodeAt(k + 1) << 8) | D.charCodeAt(k + 2)); + } + for (V = w + 3; V < D.length; ) { + (E = (D.charCodeAt(V) << 8) | D.charCodeAt(V + 1)), (T = D.slice(V + 2, V + 2 + E)), this.D.push(T), (V += E + 2); + } + (this.M[21] = 8), (this.T += 1e3 < V ? 21 : 35); + break; + case 336: + (this.G = A), (this.D = s), (this.M[18] = 134), (this.T += this.M[15]); + break; + case 344: + this.T = 3 * this.T - 8; + break; + case 350: + (U = 66), (M = []), (I = this.D[this.k]); + for (var W = 0; W < I.length; W++) { + M.push(String.fromCharCode(24 ^ I.charCodeAt(W) ^ U)), (U = 24 ^ I.charCodeAt(W) ^ U); + } + (r = parseInt(M.join('').split('|')[1])), (this.C[this.W] = this.i.slice(this.i.length - r)), (this.i = this.i.slice(0, this.i.length - r)), (this.T += 2); + break; + case 352: + (this.e = this.G[this.s++]), (this.T -= this.M[26]); + break; + case 360: + (this.a = S), (this.T += this.M[0]); + break; + case 368: + this.T -= 500 < S - this.a ? 24 : 8; + break; + case 380: + this.i.push(16383 & this.e), (this.T -= 28); + break; + case 400: + this.i.push(this.S[16383 & this.e]), (this.T -= 48); + break; + case 408: + this.T -= 64; + break; + case 413: + (this.C[(this.e >> 15) & 7] = ((this.e >> 18) & 1) == +[] ? 32767 & this.e : this.S[32767 & this.e]), (this.T -= 61); + break; + case 418: + (this.S[65535 & this.e] = this.C[(this.e >> 16) & 7]), (this.T -= this.e >> 16 < 20 ? 66 : 80); + break; + case 423: + (this.c = (this.e >> 16) & 7), (this.I = (this.e >> 13) & 7), (this.F = (this.e >> 10) & 7), (this.J = 1023 & this.e), (this.T -= 255 + 6 * this.J + (this.J % 5)); + break; + case 426: + this.T += 5 * (this.e >> 19) - 18; + break; + case 428: + (this.W = (this.e >> 16) & 7), (this.k = 65535 & this.e), this.t.push(this.s), this.h.push(this.S), (this.s = this.C[this.W]), (this.S = []); + for (var J = 0; J < this.k; J++) { + this.S.unshift(this.i.pop()); + } + this.B.push(this.i), (this.i = []), (this.T -= 76); + break; + case 433: + (this.s = this.t.pop()), (this.S = this.h.pop()), (this.i = this.B.pop()), (this.T -= 81); + break; + case 438: + (this.Q = this.C[(this.e >> 16) & 7]), (this.T -= 86); + break; + case 440: + (U = 66), (M = []), (I = this.D[16383 & this.e]); + for (var b = 0; b < I.length; b++) { + M.push(String.fromCharCode(24 ^ I.charCodeAt(b) ^ U)), (U = 24 ^ I.charCodeAt(b) ^ U); + } + (M = M.join('').split('|')), + (O = parseInt(M.shift())), + this.i.push(O === +[] ? M.join('|') : O === +!+[] ? (-1 !== M.join().indexOf('.') ? parseInt(M.join()) : parseFloat(M.join())) : O === !+[] + !+[] ? eval(M.join()) : 3 === O ? null : void 0), + (this.T -= 88); + break; + case 443: + (this.b = (this.e >> 2) & 65535), + (this.J = 3 & this.e), + this.J === +[] ? (this.s = this.b) : this.J === +!+[] ? !!this.Q && (this.s = this.b) : 2 === this.J ? !this.Q && (this.s = this.b) : (this.s = this.b), + (this.g = null), + (this.T -= 91); + break; + case 445: + this.i.push(this.C[(this.e >> 14) & 7]), (this.T -= 93); + break; + case 448: + (this.W = (this.e >> 16) & 7), + (this.k = (this.e >> 2) & 4095), + (this.J = 3 & this.e), + (Q = this.J === +!+[] && this.i.pop()), + (G = this.i.slice(this.i.length - this.k, this.i.length)), + (this.i = this.i.slice(0, this.i.length - this.k)), + (c = 2 < G.length ? 3 : G.length), + (this.T += 6 * this.J + 1 + 10 * c); + break; + case 449: + (this.C[3] = this.C[this.W]()), (this.T -= 97 - G.length); + break; + case 455: + (this.C[3] = this.C[this.W][Q]()), (this.T -= 103 + G.length); + break; + case 453: + (B = (this.e >> 17) & 3), (this.T = B === +[] ? 445 : B === +!+[] ? 380 : B === !+[] + !+[] ? 400 : 440); + break; + case 458: + (this.J = (this.e >> 17) & 3), (this.c = (this.e >> 14) & 7), (this.I = (this.e >> 11) & 7), (i = this.i.pop()), (this.T -= 12 * this.J + 180); + break; + case 459: + (this.C[3] = this.C[this.W](G[+[]])), (this.T -= 100 + 7 * G.length); + break; + case 461: + (this.C[3] = new this.C[this.W]()), (this.T -= 109 - G.length); + break; + case 463: + (U = 66), (M = []), (I = this.D[65535 & this.e]); + for (var n = 0; n < I.length; n++) { + M.push(String.fromCharCode(24 ^ I.charCodeAt(n) ^ U)), (U = 24 ^ I.charCodeAt(n) ^ U); + } + (M = M.join('').split('|')), (O = parseInt(M.shift())), (this.T += 10 * O + 3); + break; + case 465: + if (Q == 'indexOf' && G[0] == 'Canvas') { + (this.C[3] = 8), (this.T -= 13 * G.length + 100); + } else { + (this.C[3] = this.C[this.W][Q](G[+[]])), (this.T -= 13 * G.length + 100); + } + break; + case 466: + (this.C[(this.e >> 16) & 7] = M.join('|')), (this.T -= 114 * M.length); + break; + case 468: + (this.g = 65535 & this.e), (this.T -= 116); + break; + case 469: + (this.C[3] = this.C[this.W](G[+[]], G[1])), (this.T -= 119 - G.length); + break; + case 471: + (this.C[3] = new this.C[this.W](G[+[]])), (this.T -= 118 + G.length); + break; + case 473: + throw this.C[(this.e >> 16) & 7]; + case 475: + (this.C[3] = this.C[this.W][Q](G[+[]], G[1])), (this.T -= 123); + break; + case 476: + (this.C[(this.e >> 16) & 7] = -1 !== M.join().indexOf('.') ? parseInt(M.join()) : parseFloat(M.join())), (this.T -= this.M[21] < 10 ? 124 : 126); + break; + case 478: + (t = [0].concat(x(this.S))), + (this.V = 65535 & this.e), + (h = this), + (this.C[3] = function (e) { + var n = new l(); + return (n.S = t), (n.S[0] = e), n.O(h.G, h.V, h.D), n.C[3]; + }), + (this.T -= 50 < this.M[3] ? 120 : 126); + break; + case 479: + (this.C[3] = this.C[this.W].apply(null, G)), (this.M[3] = 168), (this.T -= this.M[9] ? 127 : 128); + break; + case 481: + (this.C[3] = new this.C[this.W](G[+[]], G[1])), (this.T -= 10 * G.length + 109); + break; + case 483: + (this.J = (this.e >> 15) & 15), (this.W = (this.e >> 12) & 7), (this.k = 4095 & this.e), (this.T = 0 === this.J ? 258 : 350); + break; + case 485: + (this.C[3] = this.C[this.W][Q].apply(null, G)), (this.T -= this.M[15] % 2 == 1 ? 143 : 133); + break; + case 486: + (this.C[(this.e >> 16) & 7] = eval(M.join())), (this.T -= this.M[18]); + break; + case 491: + (this.C[3] = new this.C[this.W].apply(null, G)), (this.T -= this.M[8] / this.M[1] < 10 ? 139 : 130); + break; + case 496: + (this.C[(this.e >> 16) & 7] = null), (this.T -= 10 < this.M[5] - this.M[3] ? 160 : 144); + break; + case 506: + (this.C[(this.e >> 16) & 7] = void 0), (this.T -= this.M[18] % this.M[12] == 1 ? 154 : 145); + break; + default: + this.T = this.w; + } + } catch (A) { + this.g && (this.s = this.g), (this.T -= 114); + } + } +}), + ((S.__ZH__ = S.__ZH__ || {}), + (h = S.__ZH__.zse = S.__ZH__.zse || {}), + new l().O( + 'ABt7CAAUSAAACADfSAAACAD1SAAACAAHSAAACAD4SAAACAACSAAACADCSAAACADRSAAACABXSAAACAAGSAAACADjSAAACAD9SAAACADwSAAACACASAAACADeSAAACABbSAAACADtSAAACAAJSAAACAB9SAAACACdSAAACADmSAAACABdSAAACAD8SAAACADNSAAACABaSAAACABPSAAACACQSAAACADHSAAACACfSAAACADFSAAACAC6SAAACACnSAAACAAnSAAACAAlSAAACACcSAAACADGSAAACAAmSAAACAAqSAAACAArSAAACACoSAAACADZSAAACACZSAAACAAPSAAACABnSAAACABQSAAACAC9SAAACABHSAAACAC/SAAACABhSAAACABUSAAACAD3SAAACABfSAAACAAkSAAACABFSAAACAAOSAAACAAjSAAACAAMSAAACACrSAAACAAcSAAACABySAAACACySAAACACUSAAACABWSAAACAC2SAAACAAgSAAACABTSAAACACeSAAACABtSAAACAAWSAAACAD/SAAACABeSAAACADuSAAACACXSAAACABVSAAACABNSAAACAB8SAAACAD+SAAACAASSAAACAAESAAACAAaSAAACAB7SAAACACwSAAACADoSAAACADBSAAACACDSAAACACsSAAACACPSAAACACOSAAACACWSAAACAAeSAAACAAKSAAACACSSAAACACiSAAACAA+SAAACADgSAAACADaSAAACADESAAACADlSAAACAABSAAACADASAAACADVSAAACAAbSAAACABuSAAACAA4SAAACADnSAAACAC0SAAACACKSAAACABrSAAACADySAAACAC7SAAACAA2SAAACAB4SAAACAATSAAACAAsSAAACAB1SAAACADkSAAACADXSAAACADLSAAACAA1SAAACADvSAAACAD7SAAACAB/SAAACABRSAAACAALSAAACACFSAAACABgSAAACADMSAAACACESAAACAApSAAACABzSAAACABJSAAACAA3SAAACAD5SAAACACTSAAACABmSAAACAAwSAAACAB6SAAACACRSAAACABqSAAACAB2SAAACABKSAAACAC+SAAACAAdSAAACAAQSAAACACuSAAACAAFSAAACACxSAAACACBSAAACAA/SAAACABxSAAACABjSAAACAAfSAAACAChSAAACABMSAAACAD2SAAACAAiSAAACADTSAAACAANSAAACAA8SAAACABESAAACADPSAAACACgSAAACABBSAAACABvSAAACABSSAAACAClSAAACABDSAAACACpSAAACADhSAAACAA5SAAACABwSAAACAD0SAAACACbSAAACAAzSAAACADsSAAACADISAAACADpSAAACAA6SAAACAA9SAAACAAvSAAACABkSAAACACJSAAACAC5SAAACABASAAACAARSAAACABGSAAACADqSAAACACjSAAACADbSAAACABsSAAACACqSAAACACmSAAACAA7SAAACACVSAAACAA0SAAACABpSAAACAAYSAAACADUSAAACABOSAAACACtSAAACAAtSAAACAAASAAACAB0SAAACADiSAAACAB3SAAACACISAAACADOSAAACACHSAAACACvSAAACADDSAAACAAZSAAACABcSAAACAB5SAAACADQSAAACAB+SAAACACLSAAACAADSAAACABLSAAACACNSAAACAAVSAAACACCSAAACABiSAAACADxSAAACAAoSAAACACaSAAACABCSAAACAC4SAAACAAxSAAACAC1SAAACAAuSAAACADzSAAACABYSAAACABlSAAACAC3SAAACAAISAAACAAXSAAACABISAAACAC8SAAACABoSAAACACzSAAACADSSAAACACGSAAACAD6SAAACADJSAAACACkSAAACABZSAAACADYSAAACADKSAAACADcSAAACAAySAAACADdSAAACACYSAAACACMSAAACAAhSAAACADrSAAACADWSAAAeIAAEAAACAB4SAAACAAySAAACABiSAAACABlSAAACABjSAAACABiSAAACAB3SAAACABkSAAACABnSAAACABrSAAACABjSAAACAB3SAAACABhSAAACABjSAAACABuSAAACABvSAAAeIABEAABCABkSAAACAAzSAAACABkSAAACAAySAAACABlSAAACAA3SAAACAAySAAACAA2SAAACABmSAAACAA1SAAACAAwSAAACABkSAAACAA0SAAACAAxSAAACAAwSAAACAAxSAAAeIABEAACCAAgSAAATgACVAAAQAAGEwADDAADSAAADAACSAAADAAASAAACANcIAADDAADSAAASAAATgADVAAATgAEUAAATgAFUAAATgAGUgAADAAASAAASAAATgADVAAATgAEUAAATgAFUAAATgAHUgAADAABSAAASAAATgADVAAATgAEUAAATgAFUAAATgAIUgAAcAgUSMAATgAJVAAATgAKUgAAAAAADAABSAAADAAAUAAACID/GwQPCAAYG2AREwAGDAABCIABGwQASMAADAAAUAAACID/GwQPCAAQG2AREwAHDAABCIACGwQASMAADAAAUAAACID/GwQPCAAIG2AREwAIDAABCIADGwQASMAADAAAUAAACID/GwQPEwAJDYAGDAAHG2ATDAAIG2ATDAAJG2ATKAAACAD/DIAACQAYGygSGwwPSMAASMAADAACSAAADAABUgAACAD/DIAACQAQGygSGwwPSMAASMAADAACCIABGwQASMAADAABUgAACAD/DIAACQAIGygSGwwPSMAASMAADAACCIACGwQASMAADAABUgAACAD/DIAAGwQPSMAASMAADAACCIADGwQASMAADAABUgAAKAAACAAgDIABGwQBEwANDAAAWQALGwQPDAABG2AREwAODAAODIAADQANGygSGwwTEwAPDYAPKAAACAAESAAATgACVAAAQAAGEwAQCAAESAAATgACVAAAQAAGEwAFDAAASAAADAAQSAAACAAASAAACAKsIAADCAAASAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAAASAAADAAFUgAACAABSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAABSAAADAAFUgAACAACSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAACSAAADAAFUgAACAADSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAADSAAADAAFUgAADAAFSAAACAAASAAACAJ8IAACEwARDAARSAAACAANSAAACALdIAACEwASDAARSAAACAAXSAAACALdIAACEwATDAARDIASGwQQDAATG2AQEwAUDYAUKAAAWAAMSAAAWAANSAAAWAAOSAAAWAAPSAAAWAAQSAAAWAARSAAAWAASSAAAWAATSAAAWAAUSAAAWAAVSAAAWAAWSAAAWAAXSAAAWAAYSAAAWAAZSAAAWAAaSAAAWAAbSAAAWAAcSAAAWAAdSAAAWAAeSAAAWAAfSAAAWAAgSAAAWAAhSAAAWAAiSAAAWAAjSAAAWAAkSAAAWAAlSAAAWAAmSAAAWAAnSAAAWAAoSAAAWAApSAAAWAAqSAAAWAArSAAAeIAsEAAXWAAtSAAAWAAuSAAAWAAvSAAAWAAwSAAAeIAxEAAYCAAESAAATgACVAAAQAAGEwAZCAAkSAAATgACVAAAQAAGEwAaDAABSAAACAAASAAACAJ8IAACSMAASMAACAAASAAADAAZUgAADAABSAAACAAESAAACAJ8IAACSMAASMAACAABSAAADAAZUgAADAABSAAACAAISAAACAJ8IAACSMAASMAACAACSAAADAAZUgAADAABSAAACAAMSAAACAJ8IAACSMAASMAACAADSAAADAAZUgAACAAASAAADAAZUAAACIAASEAADIAYUEgAGwQQSMAASMAACAAASAAADAAaUgAACAABSAAADAAZUAAACIABSEAADIAYUEgAGwQQSMAASMAACAABSAAADAAaUgAACAACSAAADAAZUAAACIACSEAADIAYUEgAGwQQSMAASMAACAACSAAADAAaUgAACAADSAAADAAZUAAACIADSEAADIAYUEgAGwQQSMAASMAACAADSAAADAAaUgAACAAAEAAJDAAJCIAgGwQOMwAGOBG2DAAJCIABGwQASMAADAAaUAAAEAAbDAAJCIACGwQASMAADAAaUAAAEAAcDAAJCIADGwQASMAADAAaUAAAEAAdDAAbDIAcGwQQDAAdG2AQDAAJSAAADAAXUAAAG2AQEwAeDAAeSAAADAACSAAACALvIAACEwAfDAAJSAAADAAaUAAADIAfGwQQSMAASMAADAAJCIAEGwQASMAADAAaUgAADAAJCIAEGwQASMAADAAaUAAASAAASAAADAAJSAAADAAAUgAADAAJCIABGQQAEQAJOBCIKAAADAABTgAyUAAACIAQGwQEEwAVCAAQDIAVGwQBEwAKCAAAEAAhDAAhDIAKGwQOMwAGOBImDAAKSAAADAABTgAzQAAFDAAhCIABGQQAEQAhOBHoCAAASAAACAAQSAAADAABTgA0QAAJEwAiCAAQSAAATgACVAAAQAAGEwAjCAAAEAALDAALCIAQGwQOMwAGOBLSDAALSAAADAAiUAAADIALSEAADIAAUEgAGwQQCAAqG2AQSMAASMAADAALSAAADAAjUgAADAALCIABGQQAEQALOBJkDAAjSAAATgAJVAAATgA1QAAFEwAkDAAkTgA0QAABEwAlCAAQSAAADAABTgAyUAAASAAADAABTgA0QAAJEwAmDAAmSAAADAAkSAAATgAJVAAATgA2QAAJEwAnDAAnSAAADAAlTgA3QAAFSMAAEwAlDYAlKAAAeIA4EAApDAAATgAyUAAAEAAqCAAAEAAMDAAMDIAqGwQOMwAGOBPqDAAMSAAADAAATgA5QAAFEwArDAArCID/GwQPSMAADAApTgAzQAAFDAAMCIABGQQAEQAMOBOMDYApKAAAEwAsTgADVAAAGAAKWQA6GwQFMwAGOBQeCAABSAAAEAAsOCBJTgA7VAAAGAAKWQA6GwQFMwAGOBRKCAACSAAAEAAsOCBJTgA8VAAAGAAKWQA6GwQFMwAGOBR2CAADSAAAEAAsOCBJTgA9VAAAGAAKWQA6GwQFMwAGOBSiCAAESAAAEAAsOCBJTgA+VAAAGAAKWQA6GwQFMwAGOBTOCAAFSAAAEAAsOCBJTgA/VAAAGAAKWQA6GwQFMwAGOBT6CAAGSAAAEAAsOCBJTgA8VAAATgBAUAAAGAAKWQA6GwQFMwAGOBUuCAAHSAAAEAAsOCBJTgADVAAATgBBUAAAWQBCGwQFMwAGOBVeCAAISAAAEAAsOCBJWABDSAAATgA7VAAATgBEQAABTgBFQwAFCAABGAANG2AFMwAGOBWiCAAKSAAAEAAsOCBJWABGSAAATgA8VAAATgBEQAABTgBFQwAFCAABGAANG2AFMwAGOBXmCAALSAAAEAAsOCBJWABHSAAATgA9VAAATgBEQAABTgBFQwAFCAABGAANG2AFMwAGOBYqCAAMSAAAEAAsOCBJWABISAAATgA+VAAATgBEQAABTgBFQwAFCAABGAANG2AFMwAGOBZuCAANSAAAEAAsOCBJWABJSAAATgA/VAAATgBEQAABTgBFQwAFCAABGAANG2AFMwAGOBayCAAOSAAAEAAsOCBJWABKSAAATgA8VAAATgBAUAAATgBLQAABTgBFQwAFCAABGAANG2AJMwAGOBb+CAAPSAAAEAAsOCBJTgBMVAAATgBNUAAAEAAtWABOSAAADAAtTgBEQAABTgBFQwAFCAABGAANG2AFMwAGOBdSCAAQSAAAEAAsOCBJTgA7VAAATgBPUAAAGAAKWQA6GwQFMwAGOBeGCAARSAAAEAAsOCBJWABQSAAAWABRSAAAWABSSAAATgA7VAAATgBPQAAFTgBTQwAFTgBEQwABTgBFQwAFCAABGAANG2AFMwAGOBfqCAAWSAAAEAAsOCBJTgADVAAATgBUUAAAGAAKWQA6GwQJMwAGOBgeCAAYSAAAEAAsOCBJTgADVAAATgBVUAAAGAAKWQA6GwQJMwAGOBhSCAAZSAAAEAAsOCBJTgADVAAATgBWUAAAGAAKWQA6GwQJMwAGOBiGCAAaSAAAEAAsOCBJTgADVAAATgBXUAAAGAAKWQA6GwQJMwAGOBi6CAAbSAAAEAAsOCBJTgADVAAATgBYUAAAGAAKWQA6GwQJMwAGOBjuCAAcSAAAEAAsOCBJTgADVAAATgBZUAAAGAAKWQA6GwQJMwAGOBkiCAAdSAAAEAAsOCBJTgADVAAATgBaUAAAGAAKWQA6GwQJMwAGOBlWCAAeSAAAEAAsOCBJTgADVAAATgBbUAAAGAAKWQA6GwQJMwAGOBmKCAAfSAAAEAAsOCBJTgADVAAATgBcUAAAGAAKWQA6GwQJMwAGOBm+CAAgSAAAEAAsOCBJTgADVAAATgBdUAAAGAAKWQA6GwQJMwAGOBnyCAAhSAAAEAAsOCBJTgADVAAATgBeUAAAGAAKWQA6GwQJMwAGOBomCAAiSAAAEAAsOCBJTgADVAAATgBfUAAAGAAKWQA6GwQJMwAGOBpaCAAjSAAAEAAsOCBJTgADVAAATgBgUAAAGAAKWQA6GwQJMwAGOBqOCAAkSAAAEAAsOCBJTgA7VAAATgBhUAAAGAAKWQA6GwQJMwAGOBrCCAAlSAAAEAAsOCBJTgA8VAAATgBiUAAAWQBjGwQFMwAGOBryCAAmSAAAEAAsOCBJTgA7VAAATgBkUAAAGAAKWQA6GwQJMwAGOBsmCAAnSAAAEAAsOCBJTgADVAAATgBlUAAAGAAKWQA6GwQJMwAGOBtaCAAoSAAAEAAsOCBJTgADVAAATgBmUAAAGAAKWQA6GwQJMwAGOBuOCAApSAAAEAAsOCBJTgADVAAATgBnUAAAGAAKWQA6GwQJMwAGOBvCCAAqSAAAEAAsOCBJTgBoVAAASAAATgBMVAAATgBpQAAFG2AKWABqG2AJMwAGOBwCCAArSAAAEAAsOCBJTgA7VAAATgBrUAAAGAAKWQA6GwQFMwAGOBw2CAAsSAAAEAAsOCBJTgA7VAAATgBrUAAASAAATgBMVAAATgBpQAAFG2AKWABqG2AJMwAGOBx+CAAtSAAAEAAsOCBJTgA7VAAATgBsUAAAGAAKWQA6GwQFMwAGOByyCAAuSAAAEAAsOCBJWABtSAAATgADVAAATgBuUAAATgBvUAAATgBEQAABTgBFQwAFCAABGAANG2AFMwAGOB0GCAAwSAAAEAAsOCBJTgADVAAATgBwUAAAGAAKWQA6GwQJMwAGOB06CAAxSAAAEAAsOCBJWABxSAAATgByVAAAQAACTgBzUNgATgBFQwAFCAABGAANG2AJMwAGOB2CCAAySAAAEAAsOCBJWAB0SAAATgByVAAAQAACTgBzUNgATgBFQwAFCAABGAANG2AJMwAGOB3KCAAzSAAAEAAsOCBJWAB1SAAATgA8VAAATgBAUAAATgBLQAABTgBFQwAFCAABGAANG2AJMwAGOB4WCAA0SAAAEAAsOCBJWAB2SAAATgA8VAAATgBAUAAATgBLQAABTgBFQwAFCAABGAANG2AJMwAGOB5iCAA1SAAAEAAsOCBJWABxSAAATgA9VAAATgB3UAAATgBFQAAFCAABGAANG2AJMwAGOB6mCAA2SAAAEAAsOCBJTgADVAAATgB4UAAAMAAGOB7OCAA4SAAAEAAsOCBJTgADVAAATgB5UAAAGAAKWQA6GwQJMwAGOB8CCAA5SAAAEAAsOCBJTgADVAAATgB6UAAAGAAKWQA6GwQJMwAGOB82CAA6SAAAEAAsOCBJTgADVAAATgB7UAAAGAAKWQA6GwQJMwAGOB9qCAA7SAAAEAAsOCBJTgADVAAATgB8UAAAGAAKWQA6GwQJMwAGOB+eCAA8SAAAEAAsOCBJTgADVAAATgB9UAAAGAAKWQA6GwQJMwAGOB/SCAA9SAAAEAAsOCBJTgADVAAATgB+UAAAGAAKWQA6GwQJMwAGOCAGCAA+SAAAEAAsOCBJTgADVAAATgB/UAAAGAAKWQA6GwQJMwAGOCA6CAA/SAAAEAAsOCBJCAAASAAAEAAsDYAsKAAATgCAVAAATgCBQAABEwAvCAAwSAAACAA1SAAACAA5SAAACAAwSAAACAA1SAAACAAzSAAACABmSAAACAA3SAAACABkSAAACAAxSAAACAA1SAAACABlSAAACAAwSAAACAAxSAAACABkSAAACAA3SAAAeIABEAAwCAT8IAAAEwAxDAAASAAACATbIAABEwAyTgCAVAAATgCBQAABDAAvG2ABEwAzDAAzWQCCGwQMMwAGOCFKCAB+SAAAEAAxOCFNTgCDVAAATgCEQAABCAB/G2ACSMAATgCDVAAATgCFQAAFEwA0DAAxSAAADAAyTgCGQAAFDAA0SAAADAAyTgCGQAAFDAAwSAAADAAySAAACARuIAACEwA1DAA1TgAyUAAACIADGwQEEwA2DAA2CIABGwQFMwAGOCIWWACHSAAADAA1TgAzQAAFWACHSAAADAA1TgAzQAAFOCIZDAA2CIACGwQFMwAGOCJCWACHSAAADAA1TgAzQAAFOCJFWACIWQCJGwQAWACKG2AAWACLG2AAWACMG2AAEwA3CAAAEAA4WACNEAA5DAA1TgAyUAAACIABGwQBEwANDAANCIAAGwQGMwAGOCSeCAAIDIA4CQABGigAEgA4CQAEGygEGwwCEwA6DAANSAAADAA1UAAACIA6DQA6GygSCID/G2QPGwwQEwA7CAAIDIA4CQABGigAEgA4CQAEGygEGwwCSMAAEwA6DAA7DIANCQABGygBSMAADIA1UEgACQA6DYA6G0wSCQD/G2gPGywQCIAIG2QRGQwTEQA7CAAIDIA4CQABGigAEgA4CQAEGygEGwwCSMAAEwA6DAA7DIANCQACGygBSMAADIA1UEgACQA6DYA6G0wSCQD/G2gPGywQCIAQG2QRGQwTEQA7DAA5DIA7CQA/GygPSMAADIA3TgCOQQAFGQwAEQA5DAA5DIA7CQAGGygSCIA/G2QPSMAADIA3TgCOQQAFGQwAEQA5DAA5DIA7CQAMGygSCIA/G2QPSMAADIA3TgCOQQAFGQwAEQA5DAA5DIA7CQASGygSCIA/G2QPSMAADIA3TgCOQQAFGQwAEQA5DAANCIADGQQBEQANOCKUDYA5KAAAAAVrVVYfGwAEa1VVHwAHalQlKxgLAAAIalQTBh8SEwAACGpUOxgdCg8YAAVqVB4RDgAEalQeCQAEalQeAAAEalQeDwAFalQ7GCAACmpUOyITFQkTERwADGtVUB4TFRUXGR0TFAAIa1VQGhwZHhoAC2tVUBsdGh4YGB4RAAtrVV0VHx0ZHxAWHwAMa1VVHR0cHx0aHBgaAAxrVVURGBYWFxYSHRsADGtVVhkeFRQUEx0fHgAMa1VWEhMbGBAXFxYXAAxrVVcYGxkfFxMbGxsADGtVVxwYHBkTFx0cHAAMa1VQHhgSEB0aGR8eAAtrVVAcHBoXFRkaHAALa1VcFxkcExkYEh8ADGtVVRofGxYRGxsfGAAMa1VVEREQFB0fHBkTAAxrVVYYExAYGBgcFREADGtVVh0ZHB0eHBUTGAAMa1VXGRkfHxkaGBAVAAxrVVccHx0UEx4fGBwADGtVUB0eGBsaHB0WFgALa1VXGBwcGRgfHhwAC2tVXBAQGRMcGRcZAAxrVVUbEhAdHhoZHB0ADGtVVR4aHxsaHh8TEgAMa1VWGBgZHBwSFBkZAAxrVVYcFxQeHx8cFhYADGtVVxofGBcVFBAcFQAMa1VXHR0TFRgfGRsZAAxrVVAdGBkYEREfGR8AC2tVVhwXGBQdHR0ZAAtrVVMbHRwYGRsaHgAMa1VVGxsaGhwUERgdAAxrVVUfFhQbGR0ZHxoABGtVVxkADGtVVh0bGh0YGBMZFQAMa1VVHRkeEhgVFBMZAAxrVVUeHB0cEhIfHBAADGtVVhMYEh0XEh8cHAADa1VQAAhqVAgRExELBAAGalQUHR4DAAdqVBcHHRIeAANqVBYAA2pUHAAIalQHFBkVGg0AA2tVVAAMalQHExELKTQTGTwtAAtqVBEDEhkbFx8TGQAKalQAExQOABATAgALalQKFw8HFh4NAwUACmpUCBsUGg0FHhkACWpUDBkCHwMFEwAIalQXCAkPGBMAC2pUER4ODys+GhMCAAZqVAoXFBAACGpUChkTGRcBAA5qVCwEARkQMxQOABATAgAKalQQAyQ/HgMfEQAJalQNHxIZBS8xAAtqVCo3DwcWHg0DBQAGalQMBBgcAAlqVCw5Ah8DBRMACGpUNygJDxgTAApqVAwVHB0QEQ4YAA1qVBADOzsACg8pOgoOAAhqVCs1EBceDwAaalQDGgkjIAEmOgUHDQ8eFSU5DggJAwEcAwUADWpUChcNBQcLXVsUExkAD2pUBwkPHA0JODEREBATAgAIalQnOhcADwoABGpUVk4ACGpUBxoXAA8KAAxqVAMaCS80GQIJBRQACGpUBg8LGBsPAAZqVAEQHAUADWpUBxoVGCQgERcCAxoADWpUOxg3ABEXAgMaFAoACmpUOzcAERcCAxoACWpUMyofKikeGgANalQCBgQOAwcLDzUuFQAWalQ7GCEGBA4DBwsPNTIDAR0LCRgNGQAPalQAExo0LBkDGhQNBR4ZAAZqVBEPFQMADWpUJzoKGw0PLy8YBQUACGpUBxoKGw0PAA5qVBQJDQ8TIi8MHAQDDwAealRAXx8fJCYKDxYUEhUKHhkDBw4WBg0hDjkWHRIrAAtqVBMKHx4OAwcLDwAGaFYQHh8IABdqVDsYMAofHg4DBwsPNTQICQMBHDMhEAARalQ7NQ8OBAIfCR4xOxYdGQ8AEWpUOzQODhgCHhk+OQIfAwUTAAhqVAMTGxUbFQAHalQFFREPHgAQalQDGgk8OgUDAwMVEQ0yMQAKalQCCwMVDwUeGQAQalQDGgkpMREQEBMCLiMoNQAYalQDGgkpMREQEBMCHykjIjcVChglNxQQAA9qVD8tFw0FBwtdWxQTGSAAC2pUOxg3GgUDAygYAA1qVAcUGQUfHh8ODwMFAA1qVDsYKR8WFwQBFAsPAAtqVAgbFBoVHB8EHwAHalQhLxgFBQAHalQXHw0aEAALalQUHR0YDQkJGA8AC2pUFAARFwIDGh8BAApqVAERER4PHgUZAAZqVAwCDxsAB2pUFxsJDgEAGGpUOxQuERETHwQAKg4VGQIVLx4UBQ4ZDwALalQ7NA4RERMfBAAAFmpUOxgwCh8eDgMHCw81IgsPFQEMDQkAFWpUOxg0DhEREx8EACoiCw8VAQwNCQAdalQ7GDAKHx4OAwcLDzU0CAkDARwzIQsDFQ8FHhkAFWpUOxghBgQOAwcLDzUiCw8VAQwNCQAUalQ7GCMOAwcLDzUyAwEdCwkYDRkABmpUID0NCQAFalQKGQAAB2tVVRkYGBgABmpUKTQNBAAIalQWCxcSExoAB2pUAhIbGAUACWpUEQMFAxkXCgADalRkAAdqVFJIDiQGAAtqVBUjHW9telRIQQAJalQKLzkmNSYbABdqVCdvdgsWbht5IjltEFteRS0EPQM1DQAZalQwPx4aWH4sCQ4xNxMnMSA1X1s+b1MNOgACalQACGpUBxMRCyst' + )); +var D = function (e) { + return __g._encrypt(encodeURIComponent(e)); +}; +module.exports = D; diff --git a/lib/v2/zhihu/execlib/hash.js b/lib/v2/zhihu/execlib/hash.js new file mode 100644 index 0000000000..dc50afcced --- /dev/null +++ b/lib/v2/zhihu/execlib/hash.js @@ -0,0 +1,155 @@ +function o(e, t) { + const n = (65535 & e) + (65535 & t); + return (((e >> 16) + (t >> 16) + (n >> 16)) << 16) | (65535 & n); +} + +function a(e, t, n, r, i, a) { + let c, u; + return o(((c = o(o(t, e), o(r, a))) << (u = i)) | (c >>> (32 - u)), n); +} + +function c(e, t, n, r, i, o, c) { + return a((t & n) | (~t & r), e, t, i, o, c); +} + +function u(e, t, n, r, i, o, c) { + return a((t & r) | (n & ~r), e, t, i, o, c); +} + +function s(e, t, n, r, i, o, c) { + return a(t ^ n ^ r, e, t, i, o, c); +} + +function l(e, t, n, r, i, o, c) { + return a(n ^ (t | ~r), e, t, i, o, c); +} + +function d(e, t) { + let n, r, i, a, d; + (e[t >> 5] |= 128 << t % 32), (e[14 + (((t + 64) >>> 9) << 4)] = t); + let f = 1732584193, + p = -271733879, + h = -1732584194, + b = 271733878; + for (n = 0; n < e.length; n += 16) { + (r = f), + (i = p), + (a = h), + (d = b), + (f = c(f, p, h, b, e[n], 7, -680876936)), + (b = c(b, f, p, h, e[n + 1], 12, -389564586)), + (h = c(h, b, f, p, e[n + 2], 17, 606105819)), + (p = c(p, h, b, f, e[n + 3], 22, -1044525330)), + (f = c(f, p, h, b, e[n + 4], 7, -176418897)), + (b = c(b, f, p, h, e[n + 5], 12, 1200080426)), + (h = c(h, b, f, p, e[n + 6], 17, -1473231341)), + (p = c(p, h, b, f, e[n + 7], 22, -45705983)), + (f = c(f, p, h, b, e[n + 8], 7, 1770035416)), + (b = c(b, f, p, h, e[n + 9], 12, -1958414417)), + (h = c(h, b, f, p, e[n + 10], 17, -42063)), + (p = c(p, h, b, f, e[n + 11], 22, -1990404162)), + (f = c(f, p, h, b, e[n + 12], 7, 1804603682)), + (b = c(b, f, p, h, e[n + 13], 12, -40341101)), + (h = c(h, b, f, p, e[n + 14], 17, -1502002290)), + (f = u(f, (p = c(p, h, b, f, e[n + 15], 22, 1236535329)), h, b, e[n + 1], 5, -165796510)), + (b = u(b, f, p, h, e[n + 6], 9, -1069501632)), + (h = u(h, b, f, p, e[n + 11], 14, 643717713)), + (p = u(p, h, b, f, e[n], 20, -373897302)), + (f = u(f, p, h, b, e[n + 5], 5, -701558691)), + (b = u(b, f, p, h, e[n + 10], 9, 38016083)), + (h = u(h, b, f, p, e[n + 15], 14, -660478335)), + (p = u(p, h, b, f, e[n + 4], 20, -405537848)), + (f = u(f, p, h, b, e[n + 9], 5, 568446438)), + (b = u(b, f, p, h, e[n + 14], 9, -1019803690)), + (h = u(h, b, f, p, e[n + 3], 14, -187363961)), + (p = u(p, h, b, f, e[n + 8], 20, 1163531501)), + (f = u(f, p, h, b, e[n + 13], 5, -1444681467)), + (b = u(b, f, p, h, e[n + 2], 9, -51403784)), + (h = u(h, b, f, p, e[n + 7], 14, 1735328473)), + (f = s(f, (p = u(p, h, b, f, e[n + 12], 20, -1926607734)), h, b, e[n + 5], 4, -378558)), + (b = s(b, f, p, h, e[n + 8], 11, -2022574463)), + (h = s(h, b, f, p, e[n + 11], 16, 1839030562)), + (p = s(p, h, b, f, e[n + 14], 23, -35309556)), + (f = s(f, p, h, b, e[n + 1], 4, -1530992060)), + (b = s(b, f, p, h, e[n + 4], 11, 1272893353)), + (h = s(h, b, f, p, e[n + 7], 16, -155497632)), + (p = s(p, h, b, f, e[n + 10], 23, -1094730640)), + (f = s(f, p, h, b, e[n + 13], 4, 681279174)), + (b = s(b, f, p, h, e[n], 11, -358537222)), + (h = s(h, b, f, p, e[n + 3], 16, -722521979)), + (p = s(p, h, b, f, e[n + 6], 23, 76029189)), + (f = s(f, p, h, b, e[n + 9], 4, -640364487)), + (b = s(b, f, p, h, e[n + 12], 11, -421815835)), + (h = s(h, b, f, p, e[n + 15], 16, 530742520)), + (f = l(f, (p = s(p, h, b, f, e[n + 2], 23, -995338651)), h, b, e[n], 6, -198630844)), + (b = l(b, f, p, h, e[n + 7], 10, 1126891415)), + (h = l(h, b, f, p, e[n + 14], 15, -1416354905)), + (p = l(p, h, b, f, e[n + 5], 21, -57434055)), + (f = l(f, p, h, b, e[n + 12], 6, 1700485571)), + (b = l(b, f, p, h, e[n + 3], 10, -1894986606)), + (h = l(h, b, f, p, e[n + 10], 15, -1051523)), + (p = l(p, h, b, f, e[n + 1], 21, -2054922799)), + (f = l(f, p, h, b, e[n + 8], 6, 1873313359)), + (b = l(b, f, p, h, e[n + 15], 10, -30611744)), + (h = l(h, b, f, p, e[n + 6], 15, -1560198380)), + (p = l(p, h, b, f, e[n + 13], 21, 1309151649)), + (f = l(f, p, h, b, e[n + 4], 6, -145523070)), + (b = l(b, f, p, h, e[n + 11], 10, -1120210379)), + (h = l(h, b, f, p, e[n + 2], 15, 718787259)), + (p = l(p, h, b, f, e[n + 9], 21, -343485551)), + (f = o(f, r)), + (p = o(p, i)), + (h = o(h, a)), + (b = o(b, d)); + } + return [f, p, h, b]; +} + +function f(e) { + let t, + n = ''; + const r = 32 * e.length; + for (t = 0; t < r; t += 8) { + n += String.fromCharCode((e[t >> 5] >>> t % 32) & 255); + } + return n; +} + +function p(e) { + let t; + const n = []; + for (n[(e.length >> 2) - 1] = void 0, t = 0; t < n.length; t += 1) { + n[t] = 0; + } + const r = 8 * e.length; + for (t = 0; t < r; t += 8) { + n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32; + } + return n; +} + +function h(e) { + let t, + n, + r = ''; + for (n = 0; n < e.length; n += 1) { + (t = e.charCodeAt(n)), (r += '0123456789abcdef'.charAt((t >>> 4) & 15) + '0123456789abcdef'.charAt(15 & t)); + } + return r; +} + +function b(e) { + return unescape(encodeURIComponent(e)); +} + +function v(e) { + return (function (e) { + return f(d(p(e), 8 * e.length)); + })(b(e)); +} + +function A(e) { + return h(v(e)); +} + +module.exports = A; diff --git a/package.json b/package.json index 6f901dc946..26dd14e4c9 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "aes-js": "3.1.2", "art-template": "4.13.2", "bbcodejs": "0.0.4", + "canvas": "2.10.1", "cheerio": "1.0.0-rc.12", "chrono-node": "2.4.1", "city-timezones": "1.2.1", diff --git a/yarn.lock b/yarn.lock index 62830fd746..a07ac75ca6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1333,7 +1333,7 @@ resolved "https://registry.yarnpkg.com/@lifeomic/attempt/-/attempt-3.0.3.tgz#e742a5b85eb673e2f1746b0f39cb932cbc6145bb" integrity sha512-GlM2AbzrErd/TmLL3E8hAHmb5Q7VhDJp35vIbyPVA5Rz55LZuRr8pwL3qrwwkVNo05gMX1J44gURKb4MHQZo7w== -"@mapbox/node-pre-gyp@^1.0.5": +"@mapbox/node-pre-gyp@^1.0.0", "@mapbox/node-pre-gyp@^1.0.5": version "1.0.10" resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== @@ -3723,6 +3723,15 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001409.tgz#6135da9dcab34cd9761d9cdb12a68e6740c5e96e" integrity sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ== +canvas@2.10.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.10.1.tgz#fbfd4b1b3b106c3454481d79d363ebadf8811c08" + integrity sha512-29pIjn9uwTUsIgJUNd7GXxKk8sg4iyJwLm1wIilNIqX1mVzXSc2nUij9exW1LqNpis1d2ebMYfMqTWcokZ4pdA== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.15.0" + simple-get "^3.0.3" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -4745,6 +4754,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + decompress-response@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" @@ -9925,7 +9941,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.12.1, nan@^2.16.0: +nan@^2.12.1, nan@^2.15.0, nan@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== @@ -12433,6 +12449,15 @@ simple-concat@^1.0.0: resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.1.tgz#cc7ba77cfbe761036fbfce3d021af25fc5584d55" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-get@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" From 5af05ea618849bace5409df059d61ed4530f683c Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 29 Sep 2022 13:13:37 +0000 Subject: [PATCH 10/30] chore: fix docker build (#10956) --- Dockerfile | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index af82c446bc..1305fc78ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,13 +2,11 @@ FROM node:16-bullseye as dep-builder # Here we use the non-slim image to provide build-time deps (compilers and python), thus no need to install later. # This effectively speeds up qemu-based cross-build. -# no longer needed -#RUN ln -sf /bin/bash /bin/sh - WORKDIR /app # place ARG statement before RUN statement which need it to avoid cache miss ARG USE_CHINA_NPM_REGISTRY=0 +ARG TARGETPLATFORM RUN \ set -ex && \ if [ "$USE_CHINA_NPM_REGISTRY" = 1 ]; then \ @@ -20,6 +18,15 @@ RUN \ COPY ./yarn.lock /app/ COPY ./package.json /app/ +# required for building canvas in arm64 and arm/v7 (introduce in #10954) +RUN \ + set -ex && \ + if [ "$TARGETPLATFORM" != "linux/amd64" ]; then \ + apt-get update && \ + apt-get install -yq --no-install-recommends \ + libpango1.0-dev ; \ + fi; + # lazy install Chromium to avoid cache miss, only install production dependencies to minimize the image size RUN \ set -ex && \ From d1b4a05105beb7655b6ccb6992a7526214052eb2 Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Thu, 29 Sep 2022 21:42:58 +0800 Subject: [PATCH 11/30] =?UTF-8?q?feat(route):=20add=20=E4=BA=91=E5=90=AC?= =?UTF-8?q?=E4=B8=93=E8=BE=91=20&=20=E7=9B=B4=E6=92=AD=20(#10926)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): add 云听专辑 & 直播 * fix: wrong enclosure_url * update lib/v2/radio/album.js Co-authored-by: Tony * update lib/v2/radio/album.js Co-authored-by: Tony * update lib/v2/radio/album.js Co-authored-by: Tony * update lib/v2/radio/index.js --- docs/multimedia.md | 50 +++++++++++++- lib/v2/radio/album.js | 96 ++++++++++++++++++++++++++ lib/v2/radio/index.js | 43 +++++++----- lib/v2/radio/maintainer.js | 2 + lib/v2/radio/radar.js | 18 ++++- lib/v2/radio/radio.js | 50 -------------- lib/v2/radio/router.js | 2 + lib/v2/radio/templates/description.art | 11 +-- lib/v2/radio/zhibo.js | 70 +++++++++++++++++++ 9 files changed, 265 insertions(+), 77 deletions(-) create mode 100644 lib/v2/radio/album.js delete mode 100644 lib/v2/radio/radio.js create mode 100644 lib/v2/radio/zhibo.js diff --git a/docs/multimedia.md b/docs/multimedia.md index d243536175..79b3c53f99 100644 --- a/docs/multimedia.md +++ b/docs/multimedia.md @@ -1656,9 +1656,55 @@ Tiny Tiny RSS 会给所有 iframe 元素添加 `sandbox="allow-scripts"` 属性 ## 云听 -### 电台节目 +### 专辑 - + + +如果订阅 [中国相声榜](https://www.radio.cn/pc-portal/sanji/detail.html?columnId=15682090498666),其 URL 为 ,可以得到 `columnId` 为 `15682090498666` + +所以对应路由为 [`/radio/album/15682090498666`](https://rsshub.app/radio/album/15682090498666) + +::: tip 提示 + +部分专辑不适用该路由,此时可以尝试 [节目](#yun-ting-jie-mu) 路由 + +::: + + + +### 节目 + + + +如果订阅 [共和国追梦人](http://www.radio.cn/pc-portal/sanji/detail.html?columnId=1552135),其 URL 为 ,可以得到 `columnId` 为 `1552135` + +所以对应路由为 [`/radio/1552135`](https://rsshub.app/radio/1552135) + +::: tip 提示 + +该路由仅适用于更新时间较早的电台节目,如 [共和国追梦人](http://www.radio.cn/pc-portal/sanji/detail.html?columnId=1552135) + +与适用于 [专辑](#yun-ting-zhuan-ji) 路由的专辑其 `columnId` 长度相比,它们的 `columnId` 长度较短 + +::: + + + +### 直播 + + + +如果订阅 [新闻和报纸摘要](http://www.radio.cn/pc-portal/sanji/zhibo\_2.html?name=1395528),其 URL 为 ,可以得到 `name` 为 `1395528` + +所以对应路由为 [`/radio/zhibo/1395528`](https://rsshub.app/radio/zhibo/1395528) + +::: tip 提示 + +查看更多电台直播节目,可前往 [电台直播](http://www.radio.cn/pc-portal/erji/radioStation.html) + +::: + + ## 中国高清网 diff --git a/lib/v2/radio/album.js b/lib/v2/radio/album.js new file mode 100644 index 0000000000..f6aec28a84 --- /dev/null +++ b/lib/v2/radio/album.js @@ -0,0 +1,96 @@ +const got = require('@/utils/got'); +const { parseDate } = require('@/utils/parse-date'); +const { art } = require('@/utils/render'); +const path = require('path'); +const CryptoJS = require('crypto-js'); + +module.exports = async (ctx) => { + const KEY = 'f0fc4c668392f9f9a447e48584c214ee'; + + const id = ctx.params.id; + const size = ctx.query.limit ?? '100'; + + const params = `albumId=${id}&pageNo=0&pageSize=${size}`; + + const rootUrl = 'https://www.radio.cn'; + const apiRootUrl = 'https://ytmsout.radio.cn'; + const detailRootUrl = 'https://ytapi.radio.cn'; + + const iconUrl = `${rootUrl}/pc-portal/image/icon_32.jpg`; + const currentUrl = `${rootUrl}/pc-portal/sanji/detail.html?columnId=${id}`; + const apiUrl = `${apiRootUrl}/web/appSingle/pageByAlbum?${params}`; + const detailUrl = `${detailRootUrl}/ytsrv/srv/wifimusicbox/demand/detail`; + + const detailResponse = await got({ + method: 'post', + url: detailUrl, + form: { + pageIndex: '0', + sortType: '1', + mobileId: '', + providerCode: '25010', + pid: id, + paySongFlag: '1', + richText: '1', + h5flag: '1', + }, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + version: '4.0.0', + providerCode: '25010', + equipmentSource: 'WEB', + }, + }); + + const data = detailResponse.data; + + const timestamp = new Date().getTime(); + const sign = CryptoJS.MD5(`${params}×tamp=${timestamp}&key=${KEY}`).toString().toUpperCase(); + + const response = await got({ + method: 'get', + url: apiUrl, + headers: { + sign, + timestamp, + 'Content-Type': 'application/json', + equipmentId: '0000', + platformCode: 'WEB', + }, + }); + + const items = response.data.data.data.map((item) => { + let enclosure_url = item.playUrlHigh ?? item.playUrlLow; + enclosure_url = /\.m3u8$/.test(enclosure_url) ? item.downloadUrl : enclosure_url; + + const enclosure_type = `audio/${enclosure_url.match(/\.(\w+)$/)[1]}`; + + return { + guid: item.id, + title: item.name, + link: enclosure_url, + description: art(path.join(__dirname, 'templates/description.art'), { + description: item.des, + enclosure_url, + enclosure_type, + }), + author: data.anchorpersons, + pubDate: parseDate(item.publishTime), + enclosure_url, + enclosure_type, + enclosure_length: item.fileSize, + itunes_duration: item.duration, + itunes_item_image: iconUrl, + }; + }); + + ctx.state.data = { + title: `云听 - ${data.columnName}`, + link: currentUrl, + item: items, + image: iconUrl, + itunes_author: data.anchorpersons, + description: data.descriptions ?? data.descriptionSimple, + itunes_category: data.atypeInfo.map((c) => c.categoryName).join(), + }; +}; diff --git a/lib/v2/radio/index.js b/lib/v2/radio/index.js index 9e6f6d43aa..182c4c9eda 100644 --- a/lib/v2/radio/index.js +++ b/lib/v2/radio/index.js @@ -5,12 +5,12 @@ const path = require('path'); module.exports = async (ctx) => { const id = ctx.params.id; + const size = ctx.query.limit ?? '100'; - const rootUrl = 'http://www.radio.cn'; - const currentUrl = `${rootUrl}/pc-portal/sanji/detail.html?columnId=${id}`; - + const rootUrl = 'https://www.radio.cn'; const apiRootUrl = 'http://tacc.radio.cn'; - const apiUrl = `${apiRootUrl}/pcpages/odchannelpages?od_id=${id}&start=1&rows=50`; + const apiUrl = `${apiRootUrl}/pcpages/odchannelpages?od_id=${id}&start=1&rows=${size}`; + const currentUrl = `${rootUrl}/pc-portal/sanji/detail.html?columnId=${id}`; const response = await got({ method: 'get', @@ -18,24 +18,31 @@ module.exports = async (ctx) => { }); if (/^\(.*\)$/.test(response.data)) { - response.data = JSON.parse(response.data)[0]; + response.data = JSON.parse(response.data.match(/^\((.*)\)$/)[1]); } const data = response.data.data; - const items = data.program.map((item) => ({ - guid: item.id, - title: item.name, - link: item.streams[0].url, - description: `${item.description}${art(path.join(__dirname, 'templates/description.art'), { - streams: item.streams, - })}`, - pubDate: parseDate(item.onlinetime), - enclosure_url: item.streams[0].url, - enclosure_type: 'audio/x-m4a', - itunes_duration: item.duration, - itunes_item_image: data.odchannel.imageUrl[0].url, - })); + const items = data.program.map((item) => { + const enclosure_url = item.streams[0].url; + const enclosure_type = `audio/${enclosure_url.match(/\.(\w+)$/)[1]}`; + + return { + guid: item.id, + title: item.name, + link: item.streams[0].url, + description: art(path.join(__dirname, 'templates/description.art'), { + description: item.description, + enclosure_url, + enclosure_type, + }), + pubDate: parseDate(item.onlinetime), + enclosure_url, + enclosure_type, + itunes_duration: item.duration, + itunes_item_image: data.odchannel.imageUrl[0].url, + }; + }); ctx.state.data = { title: `云听 - ${data.odchannel.name}`, diff --git a/lib/v2/radio/maintainer.js b/lib/v2/radio/maintainer.js index fac8655d8c..cafcf1fd96 100644 --- a/lib/v2/radio/maintainer.js +++ b/lib/v2/radio/maintainer.js @@ -1,3 +1,5 @@ module.exports = { + '/album/:id': ['nczitzk'], + '/zhibo/:id': ['nczitzk'], '/:id': ['kt286', 'nczitzk'], }; diff --git a/lib/v2/radio/radar.js b/lib/v2/radio/radar.js index fd7428fd9b..93f72c9094 100644 --- a/lib/v2/radio/radar.js +++ b/lib/v2/radio/radar.js @@ -3,11 +3,23 @@ module.exports = { _name: '云听', '.': [ { - title: '电台节目', - docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-dian-tai-jie-mu', - source: ['/pc-portal/sanji/detail.html', '/'], + title: '专辑', + docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-zhuan-ji', + source: ['/pc-portal/sanji/detail.html', '/share/albumDetail', '/'], + target: (params, url) => `/radio/album/${new URL(url).searchParams.get('columnId')}`, + }, + { + title: '节目', + docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-jie-mu', + source: ['/pc-portal/sanji/detail.html', '/share/albumDetail', '/'], target: (params, url) => `/radio/${new URL(url).searchParams.get('columnId')}`, }, + { + title: '直播', + docs: 'https://docs.rsshub.app/multimedia.html#yun-ting-zhi-bo', + source: ['/pc-portal/sanji/zhibo_2.html', '/'], + target: (params, url) => `/radio/zhibo/${new URL(url).searchParams.get('name')}`, + }, ], }, }; diff --git a/lib/v2/radio/radio.js b/lib/v2/radio/radio.js deleted file mode 100644 index 4534cd253d..0000000000 --- a/lib/v2/radio/radio.js +++ /dev/null @@ -1,50 +0,0 @@ -const got = require('@/utils/got'); - -module.exports = async (ctx) => { - const channelname = ctx.params.channelname; // 专辑id - const name = ctx.params.name; // 专辑id - - const api = `http://tacc.radio.cn/pcpages/searchs/livehistory?channelname=${channelname}&name=${name}&start=1&rows=20`; - const response = await got.get(api); - - const playList = response.data.passprogram; - let title = ''; - let itunes_category = ''; - let items = []; - if (playList && playList.length > 0) { - const first = playList[0]; - title = `${first.channel_name} ${first.name}`; - itunes_category = first.channel_name; - - items = playList.map((item) => { - const single = { - title: `${item.name} ${item.broadcast_date}`, - link: 'http://' + item.stream_domain1 + item.stream_url1, - description: ` - - `, - pubDate: item.update_time, - guid: item.id, - itunes_item_image: 'http://www.radio.cn/pc-portal/image/icon_32.jpg', - enclosure_url: 'http://' + item.stream_domain1 + item.stream_url1, - itunes_duration: item.resource_length, - enclosure_type: 'audio/x-m4a', - }; - return single; - }); - } - - ctx.state.data = { - title, - link: `http://www.radio.cn/pc-portal/sanji/zhibo_2.html?channelname=${channelname}&name=${name}&title=radio`, - description: title, - image: 'http://www.radio.cn/pc-portal/image/icon_32.jpg', - itunes_author: 'radio.cn', - itunes_category, - item: items, - }; -}; diff --git a/lib/v2/radio/router.js b/lib/v2/radio/router.js index 641c23df3a..dd022b028f 100644 --- a/lib/v2/radio/router.js +++ b/lib/v2/radio/router.js @@ -1,3 +1,5 @@ module.exports = function (router) { + router.get('/album/:id', require('./album')); + router.get('/zhibo/:id', require('./zhibo')); router.get('/:id', require('./index')); }; diff --git a/lib/v2/radio/templates/description.art b/lib/v2/radio/templates/description.art index 6325c012a5..995d8dd8da 100644 --- a/lib/v2/radio/templates/description.art +++ b/lib/v2/radio/templates/description.art @@ -1,5 +1,8 @@ +{{ if description }} +

{{ description }}

+{{ /if }} +{{ if enclosure_url && enclosure_type }} \ No newline at end of file + + +{{ /if }} \ No newline at end of file diff --git a/lib/v2/radio/zhibo.js b/lib/v2/radio/zhibo.js new file mode 100644 index 0000000000..ea4a3540ec --- /dev/null +++ b/lib/v2/radio/zhibo.js @@ -0,0 +1,70 @@ +const got = require('@/utils/got'); +const { parseDate } = require('@/utils/parse-date'); +const { art } = require('@/utils/render'); +const path = require('path'); +const CryptoJS = require('crypto-js'); + +module.exports = async (ctx) => { + const KEY = 'f0fc4c668392f9f9a447e48584c214ee'; + + const id = ctx.params.id; + const size = ctx.query.limit ?? '100'; + + const params = `columnId=${id}&pageNo=0&pageSize=${size}`; + + const rootUrl = 'https://www.radio.cn'; + const apiRootUrl = 'https://ytmsout.radio.cn'; + + const iconUrl = `${rootUrl}/pc-portal/image/icon_32.jpg`; + const currentUrl = `${rootUrl}/pc-portal/sanji/zhibo_2.html?name=${id}`; + const apiUrl = `${apiRootUrl}/web/appProgram/pageByColumn?${params}`; + + const timestamp = new Date().getTime(); + const sign = CryptoJS.MD5(`${params}×tamp=${timestamp}&key=${KEY}`).toString().toUpperCase(); + + const response = await got({ + method: 'get', + url: apiUrl, + headers: { + sign, + timestamp, + 'Content-Type': 'application/json', + equipmentId: '0000', + platformCode: 'WEB', + }, + }); + + const data = response.data.data.data; + + const items = data.map((item) => { + let enclosure_url = item.playUrlHigh ?? item.playUrlLow; + enclosure_url = /\.m3u8$/.test(enclosure_url) ? item.downloadUrl : enclosure_url; + + const enclosure_type = `audio/${enclosure_url.match(/\.(\w+)$/)[1]}`; + + return { + guid: item.id, + title: item.name, + link: enclosure_url, + description: art(path.join(__dirname, 'templates/description.art'), { + description: item.des, + enclosure_url, + enclosure_type, + }), + pubDate: parseDate(item.startTime), + enclosure_url, + enclosure_type, + itunes_duration: item.durationStr, + itunes_item_image: iconUrl, + }; + }); + + ctx.state.data = { + title: `云听 - ${data[0].name}`, + link: currentUrl, + item: items, + image: iconUrl, + itunes_author: 'radio.cn', + description: data[0].des, + }; +}; From 66c884bd856ecc77b15dc0a07f85e56435ff6f6a Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Thu, 29 Sep 2022 22:03:19 +0800 Subject: [PATCH 12/30] =?UTF-8?q?feat(route):=20add=20=E8=81=AF=E5=90=88?= =?UTF-8?q?=E6=96=B0=E8=81=9E=E7=B6=B2=E8=BD=89=E8=A7=92=E5=9C=8B=E9=9A=9B?= =?UTF-8?q?=20(#10938)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/traditional-media.md | 25 ++++++++++---- lib/router.js | 2 +- lib/routes/udn/global.js | 61 ---------------------------------- lib/v2/udn/global/index.js | 67 ++++++++++++++++++++++++++++++++++++++ lib/v2/udn/global/tag.js | 51 +++++++++++++++++++++++++++++ lib/v2/udn/maintainer.js | 2 ++ lib/v2/udn/radar.js | 16 ++++++++- lib/v2/udn/router.js | 2 ++ 8 files changed, 157 insertions(+), 69 deletions(-) delete mode 100644 lib/routes/udn/global.js create mode 100644 lib/v2/udn/global/index.js create mode 100644 lib/v2/udn/global/tag.js diff --git a/docs/traditional-media.md b/docs/traditional-media.md index 6a0b39e628..44b077b922 100644 --- a/docs/traditional-media.md +++ b/docs/traditional-media.md @@ -444,12 +444,6 @@ Solidot 提供的 feed:
-## UDN - -### 轉角國際 - - - ## Voice of America (VOA) 透過提取全文,以獲得更好的閱讀體驗 @@ -1362,6 +1356,25 @@ category 对应的关键词有 +### 轉角國際 - 首頁 + + + +| 首頁 | 最新文章 | 熱門文章 | +| -- | ---- | ---- | +| | new | hot | + + + +### 轉角國際 - 標籤 + + + +| 過去 24 小時 | 鏡頭背後 | 深度專欄 | 重磅廣播 | +| -------- | ---- | ---- | ---- | + + + ## 路透社 ::: warning 迁移说明 diff --git a/lib/router.js b/lib/router.js index fd198a0f05..8b311c7664 100644 --- a/lib/router.js +++ b/lib/router.js @@ -1035,7 +1035,7 @@ router.get('/anime1/anime/:time/:name', lazyloadRouteHandler('./routes/anime1/an router.get('/anime1/search/:keyword', lazyloadRouteHandler('./routes/anime1/search')); // Global UDN -router.get('/udn/global/:tid', lazyloadRouteHandler('./routes/udn/global')); +// router.get('/udn/global/:tid', lazyloadRouteHandler('./routes/udn/global')); // gitea router.get('/gitea/blog', lazyloadRouteHandler('./routes/gitea/blog')); diff --git a/lib/routes/udn/global.js b/lib/routes/udn/global.js deleted file mode 100644 index 1dba7d8069..0000000000 --- a/lib/routes/udn/global.js +++ /dev/null @@ -1,61 +0,0 @@ -const cheerio = require('cheerio'); -const got = require('@/utils/got'); - -module.exports = async (ctx) => { - let filter, url, tag; - if (ctx.params.tid !== 'newest') { - url = `https://global.udn.com/search/tagging/1020/${ctx.params.tid}`; - filter = 'li.contentli'; - tag = ctx.params.tid; - } else { - url = `https://global.udn.com/global_vision/index`; - filter = `.news_cards > ul > li`; - tag = '最新文章'; - } - const res = await got.get(url); - const $ = cheerio.load(res.data); - const list = $(filter).get(); - - const out = await Promise.all( - list.map(async (item) => { - const $ = cheerio.load(item); - let title; - let address = $('a').attr('href'); - if (ctx.params.tid === 'newest') { - address = `https://global.udn.com` + address; - title = $('h3').text(); - } else { - title = $('h2').text(); - } - const time = $('span.date').text(); - const author = $('span.author').text(); - const cache = await ctx.cache.get(address); - if (cache) { - return Promise.resolve(JSON.parse(cache)); - } - const res = await got.get(address); - const capture = cheerio.load(res.data); - capture('div.social_bar').remove(); - capture('div.area').remove(); - capture('.story_art_title').remove(); - capture('.story_bady_info_author').remove(); - capture('.photo_pop').remove(); - const contents = capture('div.story_body_content').html(); - const single = { - title, - author, - description: contents, - link: address, - guid: address, - pubDate: new Date(time).toUTCString(), - }; - ctx.cache.set(address, JSON.stringify(single)); - return Promise.resolve(single); - }) - ); - ctx.state.data = { - title: `轉角國際 | ${tag}`, - link: url, - item: out, - }; -}; diff --git a/lib/v2/udn/global/index.js b/lib/v2/udn/global/index.js new file mode 100644 index 0000000000..b37db82b2c --- /dev/null +++ b/lib/v2/udn/global/index.js @@ -0,0 +1,67 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const timezone = require('@/utils/timezone'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const category = ctx.params.category ?? ''; + + const start = category === 'hot' ? 6 : 0; + const end = category === 'new' ? 6 : 12; + + const rootUrl = 'https://global.udn.com'; + const currentUrl = `${rootUrl}/global_vision/index${category ? `/${category}` : ''}`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + $('.topic').remove(); + + let items = $('.news_cards ul li a') + .toArray() + .slice(start, end) + .concat(category === '' ? $('.last24, h2').find('a').toArray() : []) + .map((item) => { + item = $(item); + + const link = item.attr('href'); + + return { + title: item.find('h3').text() || item.text(), + link: /^http/.test(link) ? link : `${rootUrl}${item.attr('href')}`, + }; + }); + + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + content('#story_art_title, #story_bady_info, #story_also').remove(); + content('.social_bar, .photo_pop, .only_mobile, .area').remove(); + + item.description = content('#tags').prev().html(); + item.author = content('#story_author_name').text(); + item.pubDate = timezone(parseDate(content('meta[name="date"]').attr('content')), +8); + item.category = content('meta[name="news_keywords"]').attr('content').split(','); + + return item; + }) + ) + ); + + ctx.state.data = { + title: $('title').text(), + link: currentUrl, + item: items, + }; +}; diff --git a/lib/v2/udn/global/tag.js b/lib/v2/udn/global/tag.js new file mode 100644 index 0000000000..f14c078356 --- /dev/null +++ b/lib/v2/udn/global/tag.js @@ -0,0 +1,51 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const tag = ctx.params.tag ?? '過去24小時'; + + const rootUrl = 'https://global.udn.com'; + const currentUrl = `${rootUrl}/search/tagging/1020/${tag}`; + const apiUrl = `${rootUrl}/search/ajax_tag/1020/${tag}`; + + const response = await got({ + method: 'get', + url: apiUrl, + }); + + let items = response.data.articles.map((item) => ({ + title: item.TITLE, + author: item.AUTHOR, + pubDate: parseDate(item.TIMESTAMP * 1000), + category: item.TAG.map((t) => t.tag), + link: `${rootUrl}/global_vision/story/${item.CATE_ID}/${item.ART_ID}`, + })); + + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + content('#story_art_title, #story_bady_info, #story_also').remove(); + content('.social_bar, .photo_pop, .only_mobile, .area').remove(); + + item.author = content('#story_author_name').text(); + item.description = content('#tags').prev().html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `轉角國際 udn Global - ${tag}`, + link: currentUrl, + item: items, + }; +}; diff --git a/lib/v2/udn/maintainer.js b/lib/v2/udn/maintainer.js index a9599ed9b2..e5e0f0907a 100644 --- a/lib/v2/udn/maintainer.js +++ b/lib/v2/udn/maintainer.js @@ -1,3 +1,5 @@ module.exports = { + '/global/:category?': ['nczitzk'], + '/global/tag/:tag?': ['emdoe', 'nczitzk'], '/news/breakingnews/:id': ['miles170'], }; diff --git a/lib/v2/udn/radar.js b/lib/v2/udn/radar.js index 09f9c35ba3..931c472348 100644 --- a/lib/v2/udn/radar.js +++ b/lib/v2/udn/radar.js @@ -5,9 +5,23 @@ module.exports = { { title: '即時新聞', docs: 'https://docs.rsshub.app/new-media.html#lian-he-xin-wen-wang-ji-shi-xin-wen', - source: '/news/breaknews/1/:id', + source: ['/news/breaknews/1/:id', '/'], target: '/udn/news/breakingnews/:id', }, ], + global: [ + { + title: '轉角國際 - 首頁', + docs: 'https://docs.rsshub.app/new-media.html#lian-he-xin-wen-wang-zhuan-jiao-guo-ji-shou-ye', + source: ['/global_vision/index/:category', '/'], + target: '/udn/global/:category?', + }, + { + title: '轉角國際 - 標籤', + docs: 'https://docs.rsshub.app/new-media.html#lian-he-xin-wen-wang-zhuan-jiao-guo-ji-biao-qian', + source: ['/search/tagging/1020/:tag', '/'], + target: '/udn/global/tag/:tag?', + }, + ], }, }; diff --git a/lib/v2/udn/router.js b/lib/v2/udn/router.js index c6cfe33c45..2e0d731cf8 100644 --- a/lib/v2/udn/router.js +++ b/lib/v2/udn/router.js @@ -1,3 +1,5 @@ module.exports = (router) => { + router.get('/global/tag/:tag?', require('./global/tag')); + router.get('/global/:category?', require('./global/index')); router.get('/news/breakingnews/:id', require('./breaking-news')); }; From cc738eab26c047965450a53d377be26a208f4807 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Thu, 29 Sep 2022 07:37:02 -0700 Subject: [PATCH 13/30] fix(route): verge (#10940) * Update Verge content extraction * refactor: migrate to v2 --- docs/en/new-media.md | 2 + lib/router.js | 2 +- lib/routes/verge/index.js | 88 ---------------------------------- lib/v2/theverge/index.js | 90 +++++++++++++++++++++++++++++++++++ lib/v2/theverge/maintainer.js | 3 ++ lib/v2/theverge/radar.js | 13 +++++ lib/v2/theverge/router.js | 3 ++ 7 files changed, 112 insertions(+), 89 deletions(-) delete mode 100644 lib/routes/verge/index.js create mode 100644 lib/v2/theverge/index.js create mode 100644 lib/v2/theverge/maintainer.js create mode 100644 lib/v2/theverge/radar.js create mode 100644 lib/v2/theverge/router.js diff --git a/docs/en/new-media.md b/docs/en/new-media.md index ddde6afd89..82b5783831 100644 --- a/docs/en/new-media.md +++ b/docs/en/new-media.md @@ -762,6 +762,8 @@ Compared to the official one, this feed: ## The Verge +### The Verge + Provides a better reading experience (full text articles) over the official one. diff --git a/lib/router.js b/lib/router.js index 8b311c7664..49b0260af2 100644 --- a/lib/router.js +++ b/lib/router.js @@ -878,7 +878,7 @@ router.get('/bbc/:site?/:channel?', lazyloadRouteHandler('./routes/bbc/index')); // router.get('/ft/:language/:channel?', lazyloadRouteHandler('./routes/ft/channel')); // The Verge -router.get('/verge', lazyloadRouteHandler('./routes/verge/index')); +// router.get('/verge', lazyloadRouteHandler('./routes/verge/index')); // 看雪 router.get('/pediy/topic/:category?/:type?', lazyloadRouteHandler('./routes/pediy/topic')); diff --git a/lib/routes/verge/index.js b/lib/routes/verge/index.js deleted file mode 100644 index f125d8add4..0000000000 --- a/lib/routes/verge/index.js +++ /dev/null @@ -1,88 +0,0 @@ -const got = require('@/utils/got'); -const parser = require('@/utils/rss-parser'); -const cheerio = require('cheerio'); - -module.exports = async (ctx) => { - const feed = await parser.parseURL('https://www.theverge.com/rss/index.xml'); - - const items = await Promise.all( - feed.items.slice(0, 10).map(async (item) => { - const response = await got({ - method: 'get', - url: item.link, - }); - - const $ = cheerio.load(response.data); - - const content = $('div.c-entry-content'); - - // 处理封面图片 - - const cover = $('meta[property="og:image"]'); - - if (cover.length > 0) { - $(``).insertBefore(content[0].childNodes[0]); - } - - // 处理封面视频 - $('div.l-col__main > div.c-video-embed, div.c-entry-hero > div.c-video-embed').each((i, e) => { - const src = `https://volume.vox-cdn.com/embed/${e.attribs['data-volume-uuid']}?autoplay=false`; - - $(``).insertBefore(content[0].childNodes[0]); - }); - - // 处理封面视频 - $('div.l-col__main > div.c-video-embed--media iframe').each((i, e) => { - $(e).insertBefore(content[0].childNodes[0]); - }); - - // 处理文章图片 - content.find('figure.e-image').each((i, e) => { - let src, caption; - - // 处理 jpeg, png - if ($(e).find('picture > source').length > 0) { - src = $(e) - .find('picture > img')[0] - .attribs.srcset.match(/(?<=320w,).*?(?=520w)/g)[0] - .trim(); - } else if ($(e).find('img.c-dynamic-image').length > 0) { - // 处理 gif - src = $(e).find('span.e-image__image')[0].attribs['data-original']; - } - - // 处理 caption - if ($(e).find('span.e-image__meta').length > 0) { - caption = $(e).find('span.e-image__meta').text(); - } - - const figure = `
${caption ? `
${caption}
` : ''}
`; - - $(figure).insertBefore(e); - - $(e).remove(); - }); - - // 移除无用 DOM - content.find('aside').each((i, e) => { - $(e).remove(); - }); - - const single = { - title: item.title, - description: content.html(), - author: item.author, - pubDate: item.pubDate, - link: item.link, - }; - return Promise.resolve(single); - }) - ); - - ctx.state.data = { - title: feed.title, - link: feed.link, - description: feed.description, - item: items, - }; -}; diff --git a/lib/v2/theverge/index.js b/lib/v2/theverge/index.js new file mode 100644 index 0000000000..f251db2d1b --- /dev/null +++ b/lib/v2/theverge/index.js @@ -0,0 +1,90 @@ +const got = require('@/utils/got'); +const parser = require('@/utils/rss-parser'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const feed = await parser.parseURL('https://www.theverge.com/rss/index.xml'); + + const items = await Promise.all( + feed.items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const response = await got(item.link); + + const $ = cheerio.load(response.data); + + const content = $('#content'); + const body = $('.duet--article--article-body-component-container'); + + // 处理封面图片 + + const cover = $('meta[property="og:image"]'); + + if (cover.length > 0) { + $(``).insertBefore(body[0].childNodes[0]); + } + + // 处理封面视频 + $('div.l-col__main > div.c-video-embed, div.c-entry-hero > div.c-video-embed').each((i, e) => { + const src = `https://volume.vox-cdn.com/embed/${e.attribs['data-volume-uuid']}?autoplay=false`; + + $(``).insertBefore(body[0].childNodes[0]); + }); + + // 处理封面视频 + $('div.l-col__main > div.c-video-embed--media iframe').each((i, e) => { + $(e).insertBefore(body[0].childNodes[0]); + }); + + // 处理文章图片 + content.find('figure.e-image').each((i, e) => { + let src, caption; + + // 处理 jpeg, png + if ($(e).find('picture > source').length > 0) { + src = $(e) + .find('picture > img')[0] + .attribs.srcset.match(/(?<=320w,).*?(?=520w)/g)[0] + .trim(); + } else if ($(e).find('img.c-dynamic-image').length > 0) { + // 处理 gif + src = $(e).find('span.e-image__image')[0].attribs['data-original']; + } + + // 处理 caption + if ($(e).find('span.e-image__meta').length > 0) { + caption = $(e).find('span.e-image__meta').text(); + } + + const figure = `
${caption ? `
${caption}
` : ''}
`; + + $(figure).insertBefore(e); + + $(e).remove(); + }); + + const lede = $('.duet--article--lede h2:first'); + if (lede[0]) { + lede.insertBefore(body[0].childNodes[0]); + } + + // 移除无用 DOM + content.find('.duet--article--comments-join-the-conversation').remove(); + content.find('.duet--recirculation--related-list').remove(); + delete item.content; + delete item.contentSnippet; + delete item.isoDate; + + item.description = body.html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: feed.title, + link: feed.link, + description: feed.description, + item: items, + }; +}; diff --git a/lib/v2/theverge/maintainer.js b/lib/v2/theverge/maintainer.js new file mode 100644 index 0000000000..bccb53f334 --- /dev/null +++ b/lib/v2/theverge/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/': ['HenryQW'], +}; diff --git a/lib/v2/theverge/radar.js b/lib/v2/theverge/radar.js new file mode 100644 index 0000000000..357423e71f --- /dev/null +++ b/lib/v2/theverge/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'theverge.com': { + _name: 'The Verge', + '.': [ + { + title: 'The Verge', + docs: 'https://docs.rsshub.app/new-media.html#the-verge', + source: ['/rss/index.xml', '/'], + target: '/theverge', + }, + ], + }, +}; diff --git a/lib/v2/theverge/router.js b/lib/v2/theverge/router.js new file mode 100644 index 0000000000..7e427447c7 --- /dev/null +++ b/lib/v2/theverge/router.js @@ -0,0 +1,3 @@ +module.exports = (router) => { + router.get('/', require('./index')); +}; From 25ede3fb804215ec23e1ef83e71f36566e05f907 Mon Sep 17 00:00:00 2001 From: Felix Hsu Date: Thu, 29 Sep 2022 23:10:24 +0800 Subject: [PATCH 14/30] =?UTF-8?q?fix(route):=20jandan=20=E7=85=8E=E8=9B=8B?= =?UTF-8?q?=20parseDate=20bug=20(#10950)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix jandan item parseDate error * change main --- lib/v2/jandan/index.js | 68 ++++++++++--------------------------- lib/v2/jandan/maintainer.js | 2 +- 2 files changed, 18 insertions(+), 52 deletions(-) diff --git a/lib/v2/jandan/index.js b/lib/v2/jandan/index.js index e3a45abf92..cd0c19710f 100644 --- a/lib/v2/jandan/index.js +++ b/lib/v2/jandan/index.js @@ -1,64 +1,30 @@ const got = require('@/utils/got'); const cheerio = require('cheerio'); -const timezone = require('@/utils/timezone'); -const { parseDate } = require('@/utils/parse-date'); -const { art } = require('@/utils/render'); -const path = require('path'); +const parser = require('@/utils/rss-parser'); module.exports = async (ctx) => { const rootUrl = 'http://i.jandan.net'; - - const response = await got({ - method: 'get', - url: rootUrl, - }); - - const $ = cheerio.load(response.data); - - let items = $('.post') - .slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 15) - .toArray() - .map((item) => { - item = $(item); - - const a = item.find('.thetitle a'); - - return { - title: a.text(), - link: a.attr('href'), - description: art(path.join(__dirname, 'templates/description.art'), { - summary: item.find('.indexs').text(), - image: item - .find('img') - .attr('data-original') - .replace(/!square/, ''), - }), - }; - }); - - items = await Promise.all( - items.map((item) => + const feed = await parser.parseURL(`${rootUrl}/feed/`); + const items = await Promise.all( + feed.items.map((item) => ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ - method: 'get', - url: item.link, - }); - - const content = cheerio.load(detailResponse.data); - - content('.wechat-hide').prev().nextAll().remove(); - - item.description += content('.entry').html(); - item.author = content('.postinfo strong').text(); - item.pubDate = timezone(parseDate(detailResponse.data.match(/"pubDate": "(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})"/)[1]), +8); - - return item; + const response = await got(item.link); + const $ = cheerio.load(response.data); + $('.wechat-hide').prev().nextAll().remove(); + const single = { + title: item.title, + description: $('.entry').html(), + pubDate: item.pubDate, + link: item.link, + author: item['dc:creator'], + category: item.categories, + }; + return single; }) ) ); - ctx.state.data = { - title: $('title').text(), + title: '煎蛋', link: rootUrl, item: items, }; diff --git a/lib/v2/jandan/maintainer.js b/lib/v2/jandan/maintainer.js index 8dc696085e..33b455c436 100644 --- a/lib/v2/jandan/maintainer.js +++ b/lib/v2/jandan/maintainer.js @@ -1,4 +1,4 @@ module.exports = { '/:category?': ['nczitzk'], - '/': ['nczitzk'], + '/': ['nczitzk', 'bigfei'], }; From b523c4dc3186c1a9c2a45533aba6aaf470cc0ec1 Mon Sep 17 00:00:00 2001 From: Felix Hsu Date: Fri, 30 Sep 2022 00:14:20 +0800 Subject: [PATCH 15/30] =?UTF-8?q?feat(route):=20add=20bphc=20=E5=8C=97?= =?UTF-8?q?=E4=BA=AC=E5=85=B1=E6=9C=89=E4=BA=A7=E6=9D=83=E4=BD=8F=E6=88=BF?= =?UTF-8?q?=E7=A7=9F=E8=B5=81=E5=B9=B3=E5=8F=B0=20(#10955)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bphc * radar ok * change maintainer * fix null checking err * rss link should be rootUrl * fix: sort routes --- docs/government.md | 12 +++++++ lib/v2/gov/beijing/bphc/index.js | 54 ++++++++++++++++++++++++++++++++ lib/v2/gov/maintainer.js | 1 + lib/v2/gov/radar.js | 11 +++++++ lib/v2/gov/router.js | 1 + 5 files changed, 79 insertions(+) create mode 100644 lib/v2/gov/beijing/bphc/index.js diff --git a/docs/government.md b/docs/government.md index 182ed343d7..81d7f5ef48 100644 --- a/docs/government.md +++ b/docs/government.md @@ -44,6 +44,18 @@ pageClass: routes +## 北京市保障房中心有限公司 + +### 北京市共有产权住房租赁服务平台 + + + +| 通知公告 | 项目介绍 | +| :----------: | :-----: | +| announcement | project | + + + ## 北京市教育委员会 ### 通知公告 diff --git a/lib/v2/gov/beijing/bphc/index.js b/lib/v2/gov/beijing/bphc/index.js new file mode 100644 index 0000000000..f8d033e49d --- /dev/null +++ b/lib/v2/gov/beijing/bphc/index.js @@ -0,0 +1,54 @@ +const got = require('@/utils/got'); +const { parseDate } = require('@/utils/parse-date'); +const timezone = require('@/utils/timezone'); + +const mapping = { + '/project': { + title: '项目介绍', + list: '/front/index/project/page', + detail: '/front/index/project', + link: '/#/communityDetail?id=', + }, + '/announcement': { + title: '通知公告', + list: '/front/announcement/page', + detail: '/front/announcement/', + link: '/#/announcementList/detail?id=', + }, +}; + +module.exports = async (ctx) => { + const rootUrl = 'http://gycp.bphc.com.cn:21000'; + const defaultPath = 'announcement'; + + const pathname = ctx.path.replace(/(^\/beijing\/bphc|\/$)/g, ''); + const key = pathname === '' ? defaultPath : pathname.endsWith('/') ? pathname.slice(0, -1) : pathname; + const obj = mapping[key]; + const currentUrl = `${rootUrl}${obj.list}`; + + const listResp = await got(currentUrl).json(); + const list = listResp.data?.records ?? []; + const items = await Promise.all( + list.map((item) => { + const detail = `${rootUrl}${obj.detail}/${item.id}`; + return ctx.cache.tryGet(detail, async () => { + const detailResponse = await got(detail).json(); + const description = (detailResponse.data?.content || detailResponse.data?.introduction) ?? ''; + const single = { + title: item.title || item.fullName, + author: description.match(/来源:(.*?) `/gov/bphc/${new URL(url).href.match(/gycpt\.bphc\.com\.cn\/(.*)/)[1]}`, + }, + ], + }, 'ccdi.gov.cn': { _name: '中央纪委国家监委', www: [ diff --git a/lib/v2/gov/router.js b/lib/v2/gov/router.js index 466b2eae76..fdf19f16c5 100644 --- a/lib/v2/gov/router.js +++ b/lib/v2/gov/router.js @@ -29,6 +29,7 @@ module.exports = function (router) { router.get(/stats(\/[\w/-]+)?/, require('./stats')); // province router.get(/anhui\/kjt\/([\w\d/-]+)?/, require('./anhui/kjt')); + router.get(/beijing\/bphc(\/[\w/-]+)?/, require('./beijing/bphc')); router.get('/beijing/jw/tzgg', require('./beijing/jw/tzgg')); router.get('/beijing/kw/:channel', require('./beijing/kw/index')); router.get('/guangdong/tqyb/tfxtq', require('./guangdong/tqyb/tfxtq')); From 0d69e20751de4da8e78d1e1c14cea2c5e8f686e5 Mon Sep 17 00:00:00 2001 From: ri1ken Date: Fri, 30 Sep 2022 06:13:55 +0900 Subject: [PATCH 16/30] fix(route): yoasobi-music redefine guid (#10958) same post being consided as new one because of the random generated emoji in `guid`. --- lib/v2/yoasobi-music/info.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/v2/yoasobi-music/info.js b/lib/v2/yoasobi-music/info.js index 668f576263..d1a01ac861 100644 --- a/lib/v2/yoasobi-music/info.js +++ b/lib/v2/yoasobi-music/info.js @@ -30,6 +30,7 @@ module.exports = async (ctx) => { return { id: isBio ? null : item.id, + guid: isBio ? `bio:${item.url}` : `news:${item.title}${item.date}`, title: isBio ? `${randomEmoji} ${item.url}` : item.title, category: item.category ?? 'Achievement', date: isBio ? item.url : item.date, @@ -58,7 +59,7 @@ module.exports = async (ctx) => { // the article publish time pubDate: parseDate(i.date), // guid - guid: i.title + i.date, + guid: i.guid, // the article link link: i.id ? `${officialUrl}/${i.id}` : officialUrl, category: i.category, From 596ab12da9c4511eb26d110b96cf25cddb560c6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Sep 2022 23:28:34 +0000 Subject: [PATCH 17/30] chore(deps): bump dotenv from 16.0.2 to 16.0.3 (#10959) Bumps [dotenv](https://github.com/motdotla/dotenv) from 16.0.2 to 16.0.3. - [Release notes](https://github.com/motdotla/dotenv/releases) - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v16.0.2...v16.0.3) --- updated-dependencies: - dependency-name: dotenv dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 26dd14e4c9..fad717a5d5 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "crypto-js": "4.1.1", "currency-symbol-map": "5.1.0", "dayjs": "1.11.5", - "dotenv": "16.0.2", + "dotenv": "16.0.3", "emailjs-imap-client": "3.1.0", "entities": "3.0.1", "etag": "1.8.1", diff --git a/yarn.lock b/yarn.lock index a07ac75ca6..e2219258ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5182,10 +5182,10 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" -dotenv@16.0.2: - version "16.0.2" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.2.tgz#0b0f8652c016a3858ef795024508cddc4bffc5bf" - integrity sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA== +dotenv@16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== dotenv@^6.2.0: version "6.2.0" From 627ce33803597c015344efceb60332229a1f31dd Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:39:00 +0800 Subject: [PATCH 18/30] =?UTF-8?q?feat(route):=20add=20=E6=99=BA=E9=80=9A?= =?UTF-8?q?=E8=B4=A2=E7=BB=8F=20(#10961)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): add 智通财经 * fix: add vip and telegram digest --- docs/finance.md | 25 ++++ lib/v2/zhitongcaijing/index.js | 118 ++++++++++++++++++ lib/v2/zhitongcaijing/maintainer.js | 3 + lib/v2/zhitongcaijing/radar.js | 17 +++ lib/v2/zhitongcaijing/router.js | 3 + .../zhitongcaijing/templates/description.art | 6 + 6 files changed, 172 insertions(+) create mode 100644 lib/v2/zhitongcaijing/index.js create mode 100644 lib/v2/zhitongcaijing/maintainer.js create mode 100644 lib/v2/zhitongcaijing/radar.js create mode 100644 lib/v2/zhitongcaijing/router.js create mode 100644 lib/v2/zhitongcaijing/templates/description.art diff --git a/docs/finance.md b/docs/finance.md index daa1705f4e..7925dc4fbe 100644 --- a/docs/finance.md +++ b/docs/finance.md @@ -627,6 +627,31 @@ TokenInsight 官方亦有提供 RSS,可参考 +## 智通财经网 + +### 推荐 + + + +| id | 栏目 | +| ------------ | --- | +| recommend | 推荐 | +| hkstock | 港股 | +| meigu | 美股 | +| agu | 沪深 | +| ct | 创投 | +| esg | ESG | +| aqs | 券商 | +| ajj | 基金 | +| focus | 要闻 | +| announcement | 公告 | +| research | 研究 | +| shares | 新股 | +| bazaar | 市场 | +| company | 公司 | + + + ## 中国人民银行 ### 沟通交流 diff --git a/lib/v2/zhitongcaijing/index.js b/lib/v2/zhitongcaijing/index.js new file mode 100644 index 0000000000..26d9071ed0 --- /dev/null +++ b/lib/v2/zhitongcaijing/index.js @@ -0,0 +1,118 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); +const { art } = require('@/utils/render'); +const path = require('path'); + +const ids = { + recommend: { + url: 'content/recommend', + title: '推荐', + }, + hkstock: { + url: 'content/hkstock', + title: '港股', + }, + meigu: { + url: 'content/meigu', + title: '美股', + }, + agu: { + url: 'content/agu', + title: '沪深', + }, + ct: { + url: 'content/ct', + title: '创投', + }, + esg: { + url: 'content/esg', + title: 'ESG', + }, + aqs: { + url: 'content/aqs', + title: '券商', + }, + ajj: { + url: 'content/ajj', + title: '基金', + }, + focus: { + url: 'focus', + title: '要闻', + }, + announcement: { + url: 'announcement', + title: '公告', + }, + research: { + url: 'research', + title: '研究', + }, + shares: { + url: 'shares', + title: '新股', + }, + bazaar: { + url: 'bazaar', + title: '市场', + }, + company: { + url: 'company', + title: '公司', + }, +}; + +module.exports = async (ctx) => { + const id = ctx.params.id ?? 'recommend'; + const category = ctx.params.category ?? ''; + + const limit = ctx.query.limit ? parseInt(ctx.query.limit) : 20; + + const rootUrl = 'https://www.zhitongcaijing.com'; + const currentUrl = `${rootUrl}/${ids[id].url}.html${category === '' ? '' : `?category_key=${category}`}`; + const apiUrl = `${rootUrl}/${ids[id].url}.html?data_type=1&page=1${category === '' ? '' : `&category_key=${category}`}`; + + const response = await got({ + method: 'get', + url: apiUrl, + }); + + let items = response.data.data.slice(0, limit).map((item) => ({ + title: item.title, + link: `${rootUrl}${item.url}`, + description: item.digest, + author: item.author_info.author_name, + pubDate: parseDate((item.create_time ?? parseInt(item.original_time)) * 1000), + category: (item.keywords?.split(',') ?? []).concat([item.category_name ?? item.type_tag]), + })); + + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + content('#subscribe-vip-box').remove(); + content('#news-content').remove(); + + item.description = art(path.join(__dirname, 'templates/description.art'), { + digest: content('.digetst-box').html() || content('.telegram-origin-contentn').html(), + description: content('.news-body-content').html(), + }); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `智通财经 - ${ids[id].title}`, + link: currentUrl, + item: items, + }; +}; diff --git a/lib/v2/zhitongcaijing/maintainer.js b/lib/v2/zhitongcaijing/maintainer.js new file mode 100644 index 0000000000..db32d54ace --- /dev/null +++ b/lib/v2/zhitongcaijing/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/:id?/:category?': ['nczitzk'], +}; diff --git a/lib/v2/zhitongcaijing/radar.js b/lib/v2/zhitongcaijing/radar.js new file mode 100644 index 0000000000..51a8829485 --- /dev/null +++ b/lib/v2/zhitongcaijing/radar.js @@ -0,0 +1,17 @@ +module.exports = { + 'zhitongcaijing.com': { + _name: '智通财经', + '.': [ + { + title: '资讯', + docs: 'https://docs.rsshub.app/finance.html#zhi-tong-cai-jing-zi-xun', + source: ['/:category', '/'], + target: (params, url) => { + const id = new URL(url).toString().match(/\/(\w+)\.html/)[1]; + const category = new URL(url).searchParams.get('category_key'); + return `/zhitongcaijing/${id}${category ? `/${category}` : ''}`; + }, + }, + ], + }, +}; diff --git a/lib/v2/zhitongcaijing/router.js b/lib/v2/zhitongcaijing/router.js new file mode 100644 index 0000000000..ea2152ae08 --- /dev/null +++ b/lib/v2/zhitongcaijing/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get('/:id?/:category?', require('./index')); +}; diff --git a/lib/v2/zhitongcaijing/templates/description.art b/lib/v2/zhitongcaijing/templates/description.art new file mode 100644 index 0000000000..715af125f2 --- /dev/null +++ b/lib/v2/zhitongcaijing/templates/description.art @@ -0,0 +1,6 @@ +{{ if digest }} +{{@ digest }} +{{ /if }} +{{ if description }} +{{@ description }} +{{ /if }} \ No newline at end of file From 085844a45bdedf44666ab61a78947b4774397e42 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Sep 2022 22:14:43 +0000 Subject: [PATCH 19/30] chore(deps-dev): bump jest from 29.1.1 to 29.1.2 (#10972) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 29.1.1 to 29.1.2. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v29.1.2/packages/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 583 ++++++++++++++++++++++++++------------------------- 2 files changed, 293 insertions(+), 292 deletions(-) diff --git a/package.json b/package.json index fad717a5d5..6cac363bbf 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "eslint-plugin-prettier": "4.2.1", "eslint-plugin-yml": "1.2.0", "fs-extra": "10.1.0", - "jest": "29.1.1", + "jest": "29.1.2", "meilisearch": "0.27.0", "mockdate": "3.0.5", "nock": "13.2.9", diff --git a/yarn.lock b/yarn.lock index e2219258ff..187fe7592c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1085,28 +1085,28 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.0.tgz#3b8e9e86aef28af15fcadfd8df7321ed1327c3e7" - integrity sha512-yNoFMuAsXTP8OyweaMaIoa6Px6rJkbbG7HtgYKGP3CY7lE7ADRA0Fn5ad9O+KefKcaf6W9rywKpCWOw21WMsAw== +"@jest/console@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.2.tgz#0ae975a70004696f8320490fcaa1a4152f7b62e4" + integrity sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.1.0" - jest-util "^29.1.0" + jest-message-util "^29.1.2" + jest-util "^29.1.2" slash "^3.0.0" -"@jest/core@^29.1.1": - version "29.1.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.1.tgz#a7e5f86dd29fa9da1ca84752237735dc7bcda3d8" - integrity sha512-ppym+PLiuSmvU9ufXVb/8OtHUPcjW+bBlb8CLh6oMATgJtCE3fjDYrzJi5u1uX8q9jbmtQ7VADKJKIlp68zi3A== +"@jest/core@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.2.tgz#e5ce7a71e7da45156a96fb5eeed11d18b67bd112" + integrity sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA== dependencies: - "@jest/console" "^29.1.0" - "@jest/reporters" "^29.1.0" - "@jest/test-result" "^29.1.0" - "@jest/transform" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/console" "^29.1.2" + "@jest/reporters" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" @@ -1114,80 +1114,80 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^29.0.0" - jest-config "^29.1.1" - jest-haste-map "^29.1.0" - jest-message-util "^29.1.0" + jest-config "^29.1.2" + jest-haste-map "^29.1.2" + jest-message-util "^29.1.2" jest-regex-util "^29.0.0" - jest-resolve "^29.1.0" - jest-resolve-dependencies "^29.1.1" - jest-runner "^29.1.1" - jest-runtime "^29.1.1" - jest-snapshot "^29.1.0" - jest-util "^29.1.0" - jest-validate "^29.1.0" - jest-watcher "^29.1.0" + jest-resolve "^29.1.2" + jest-resolve-dependencies "^29.1.2" + jest-runner "^29.1.2" + jest-runtime "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" + jest-watcher "^29.1.2" micromatch "^4.0.4" - pretty-format "^29.1.0" + pretty-format "^29.1.2" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.1.1": - version "29.1.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.1.tgz#afeb66563d8d366a329908087b6697c3bfaed3cb" - integrity sha512-69WULhTD38UcjvLGRAnnwC5hDt35ZC91ZwnvWipNOAOSaQNT32uKYL/TVCT3tncB9L1D++LOmBbYhTYP4TLuuQ== +"@jest/environment@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.2.tgz#bb51a43fce9f960ba9a48f0b5b556f30618ebc0a" + integrity sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ== dependencies: - "@jest/fake-timers" "^29.1.1" - "@jest/types" "^29.1.0" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-mock "^29.1.1" + jest-mock "^29.1.2" -"@jest/expect-utils@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.0.tgz#598cc7fea83b1bf84249b3b98683575cee888894" - integrity sha512-YcD5CF2beqfoB07WqejPzWq1/l+zT3SgGwcqqIaPPG1DHFn/ea8MWWXeqV3KKMhTaOM1rZjlYplj1GQxR0XxKA== +"@jest/expect-utils@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.2.tgz#66dbb514d38f7d21456bc774419c9ae5cca3f88d" + integrity sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg== dependencies: jest-get-type "^29.0.0" -"@jest/expect@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.0.tgz#58956d38c22f42a2ec7ecf7adb9e0ddd9a9082a3" - integrity sha512-qWQttxE5rEwzvDW9G3f0o8chu1EKvIfsMQDeRlXMLCtsDS94ckcqEMNgbKKz0NYlZ45xrIoy+/pngt3ZFr/2zw== +"@jest/expect@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.2.tgz#334a86395f621f1ab63ad95b06a588b9114d7b7a" + integrity sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ== dependencies: - expect "^29.1.0" - jest-snapshot "^29.1.0" + expect "^29.1.2" + jest-snapshot "^29.1.2" -"@jest/fake-timers@^29.1.1": - version "29.1.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.1.tgz#ae345e5ca51e9f72e0d861e17c65d9cb558f407b" - integrity sha512-5wTGObRfL/OjzEz0v2ShXlzeJFJw8mO6ByMBwmPLd6+vkdPcmIpCvASG/PR/g8DpchSIEeDXCxQADojHxuhX8g== +"@jest/fake-timers@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.2.tgz#f157cdf23b4da48ce46cb00fea28ed1b57fc271a" + integrity sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^29.1.0" - jest-mock "^29.1.1" - jest-util "^29.1.0" + jest-message-util "^29.1.2" + jest-mock "^29.1.2" + jest-util "^29.1.2" -"@jest/globals@^29.1.1": - version "29.1.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.1.tgz#017cffa0e79b35e7197b229d852c9ad35ed4be5c" - integrity sha512-yTiusxeEHjXwmo3guWlN31a1harU8zekLBMlZpOZ+84rfO3HDrkNZLTfd/YaHF8CrwlNCFpDGNSQCH8WkklH/Q== +"@jest/globals@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.2.tgz#826ede84bc280ae7f789cb72d325c48cd048b9d3" + integrity sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g== dependencies: - "@jest/environment" "^29.1.1" - "@jest/expect" "^29.1.0" - "@jest/types" "^29.1.0" - jest-mock "^29.1.1" + "@jest/environment" "^29.1.2" + "@jest/expect" "^29.1.2" + "@jest/types" "^29.1.2" + jest-mock "^29.1.2" -"@jest/reporters@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.0.tgz#da488ddfb39a4cfb86abdc29fd94f84031acfd02" - integrity sha512-szSjHjVuBQ7aZUdBzTicCoQAAQsQFLk+/PtMfO0RQxL5mQ1iw+PSKOpyvMZcA5T6bH9pIapue5U9UCrxfOtL3w== +"@jest/reporters@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.2.tgz#5520898ed0a4ecf69d8b671e1dc8465d0acdfa6e" + integrity sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.1.0" - "@jest/test-result" "^29.1.0" - "@jest/transform" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/console" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -1200,9 +1200,9 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.1.0" - jest-util "^29.1.0" - jest-worker "^29.1.0" + jest-message-util "^29.1.2" + jest-util "^29.1.2" + jest-worker "^29.1.2" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -1225,51 +1225,51 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.0.tgz#da6b0062325a780c9e3c7262b6b89da57fba2dca" - integrity sha512-RMBhPlw1Qfc2bKSf3RFPCyFSN7cfWVSTxRD8JrnvqdqgaDgrq4aGJT1A/V2+5Vq9bqBd187FpaxGTQ4zLrt08g== +"@jest/test-result@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.2.tgz#6a8d006eb2b31ce0287d1fc10d12b8ff8504f3c8" + integrity sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg== dependencies: - "@jest/console" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/console" "^29.1.2" + "@jest/types" "^29.1.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.0.tgz#d3d34497e860a44f3f80e94958651f58d3ce64f8" - integrity sha512-1diQfwNhBAte+x3TmyfWloxT1C8GcPEPEZ4BZjmELBK2j3cdqi0DofoJUxBDDUBBnakbv8ce0B7CIzprsupPSA== +"@jest/test-sequencer@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz#10bfd89c08bfdba382eb05cc79c1d23a01238a93" + integrity sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q== dependencies: - "@jest/test-result" "^29.1.0" + "@jest/test-result" "^29.1.2" graceful-fs "^4.2.9" - jest-haste-map "^29.1.0" + jest-haste-map "^29.1.2" slash "^3.0.0" -"@jest/transform@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.0.tgz#1b3e597681362f6164e786e6bc2826c34ecbf74f" - integrity sha512-NI1zd62KgM0lW6rWMIZDx52dfTIDd+cnLQNahH0YhH7TVmQVigumJ6jszuhAzvKHGm55P2Fozcglb5sGMfFp3Q== +"@jest/transform@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.2.tgz#20f814696e04f090421f6d505c14bbfe0157062a" + integrity sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.1.0" + jest-haste-map "^29.1.2" jest-regex-util "^29.0.0" - jest-util "^29.1.0" + jest-util "^29.1.2" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^29.1.0": - version "29.1.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.0.tgz#db23d727ce0a95500749551d8724fb3526d1e903" - integrity sha512-lE30u3z4lbTOqf5D7fDdoco3Qd8H6F/t73nLOswU4x+7VhgDQMX5y007IMqrKjFHdnpslaYymVFhWX+ttXNARQ== +"@jest/types@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.2.tgz#7442d32b16bcd7592d9614173078b8c334ec730a" + integrity sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg== dependencies: "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" @@ -3019,12 +3019,12 @@ babel-extract-comments@^1.0.0: dependencies: babylon "^6.18.0" -babel-jest@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.0.tgz#945e45eb8a33e8ad8cb334f2b0f040d7306cffbf" - integrity sha512-0XiBgPRhMSng+ThuXz0M/WpOeml/q5S4BFIaDS5uQb+lCjOzd0OfYEN4hWte5fDy7SZ6rNmEi16UpWGurSg2nQ== +babel-jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.2.tgz#540d3241925c55240fb0c742e3ffc5f33a501978" + integrity sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q== dependencies: - "@jest/transform" "^29.1.0" + "@jest/transform" "^29.1.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^29.0.2" @@ -5925,16 +5925,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.0.tgz#0e20a72cf4b2cfb8ca5e2ab138c23c5078c37460" - integrity sha512-1NCfR0FEArn9Vq1KEjhPd1rggRLiWgo87gfMK4iKn6DcVzJBRMyDNX22hyND5KiSRPIPQ5KtsY6HLxsQ0MU86w== +expect@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.2.tgz#82f8f28d7d408c7c68da3a386a490ee683e1eced" + integrity sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw== dependencies: - "@jest/expect-utils" "^29.1.0" + "@jest/expect-utils" "^29.1.2" jest-get-type "^29.0.0" - jest-matcher-utils "^29.1.0" - jest-message-util "^29.1.0" - jest-util "^29.1.0" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-util "^29.1.2" express@^4.17.1: version "4.18.1" @@ -8176,86 +8176,86 @@ jest-changed-files@^29.0.0: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.1.tgz#696e0b58351316f5fdb39d3480b4fffe8dbf0100" - integrity sha512-Ii+3JIeLF3z8j2E7fPSjPjXJLBdbAcZyfEiALRQ1Fk+FWTIfuEfZrZcjSaBdz/k/waoq+bPf9x/vBCXIAyLLEQ== +jest-circus@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.2.tgz#4551068e432f169a53167fe1aef420cf51c8a735" + integrity sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA== dependencies: - "@jest/environment" "^29.1.1" - "@jest/expect" "^29.1.0" - "@jest/test-result" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/environment" "^29.1.2" + "@jest/expect" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.1.0" - jest-matcher-utils "^29.1.0" - jest-message-util "^29.1.0" - jest-runtime "^29.1.1" - jest-snapshot "^29.1.0" - jest-util "^29.1.0" + jest-each "^29.1.2" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-runtime "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" p-limit "^3.1.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.1.tgz#6ff79c0b2d1d062f24216d2bcbf6c01a1e41db21" - integrity sha512-nz/JNtqDFf49R2KgeZ9+6Zl1uxSuRsg/tICC+DHMh+bQ0co6QqBPWKg3FtW4534bs8/J2YqFC2Lct9DZR24z0Q== +jest-cli@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.2.tgz#423b9c5d3ea20a50b1354b8bf3f2a20e72110e89" + integrity sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw== dependencies: - "@jest/core" "^29.1.1" - "@jest/test-result" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/core" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.1.1" - jest-util "^29.1.0" - jest-validate "^29.1.0" + jest-config "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.1.tgz#52aaa6237a7b3eea5c640aad6a53b390dc76f49f" - integrity sha512-o2iZrQMOiF54zOw1kOcJGmfKzAW+V2ajZVWxbt+Ex+g0fVaTkk215BD/GFhrviuic+Xk7DpzUmdTT9c1QfsPqg== +jest-config@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.2.tgz#7d004345ca4c09f5d8f802355f54494e90842f4d" + integrity sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.1.0" - "@jest/types" "^29.1.0" - babel-jest "^29.1.0" + "@jest/test-sequencer" "^29.1.2" + "@jest/types" "^29.1.2" + babel-jest "^29.1.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.1.1" - jest-environment-node "^29.1.1" + jest-circus "^29.1.2" + jest-environment-node "^29.1.2" jest-get-type "^29.0.0" jest-regex-util "^29.0.0" - jest-resolve "^29.1.0" - jest-runner "^29.1.1" - jest-util "^29.1.0" - jest-validate "^29.1.0" + jest-resolve "^29.1.2" + jest-runner "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.0.tgz#952639cd73fcf4d34173e2d98a0cd1c20c71ba88" - integrity sha512-ZJyWG30jpVHwxLs8xxR1so4tz6lFARNztnFlxssFpQdakaW0isSx9rAKs/6aQUKQDZ/DgSpY6HjUGLO9xkNdRw== +jest-diff@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.2.tgz#bb7aaf5353227d6f4f96c5e7e8713ce576a607dc" + integrity sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ== dependencies: chalk "^4.0.0" diff-sequences "^29.0.0" jest-get-type "^29.0.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" jest-docblock@^29.0.0: version "29.0.0" @@ -8264,94 +8264,94 @@ jest-docblock@^29.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.0.tgz#d0962d04f4a28f5f048c2ff50965cab9ae2f524d" - integrity sha512-ELSZV/L4yjqKU2O0bnDTNHlizD4IRS9DX94iAB6QpiPIJsR453dJW7Ka7TXSmxQdc66HNNOhUcQ5utIeVCKGyA== +jest-each@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.2.tgz#d4c8532c07a846e79f194f7007ce7cb1987d1cd0" + integrity sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" chalk "^4.0.0" jest-get-type "^29.0.0" - jest-util "^29.1.0" - pretty-format "^29.1.0" + jest-util "^29.1.2" + pretty-format "^29.1.2" -jest-environment-node@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.1.tgz#10f1782b74e17fcf782ff51df79f2b0cee135851" - integrity sha512-0nwTca4L2N8iM33A+JMfBdygR6B3N/bcPoLe1hEd9o87KLxDZwKGvpTGSfXpjtyqNQXiaL/3G+YOcSoeq/syPw== +jest-environment-node@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.2.tgz#005e05cc6ea4b9b5ba55906ab1ce53c82f6907a7" + integrity sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ== dependencies: - "@jest/environment" "^29.1.1" - "@jest/fake-timers" "^29.1.1" - "@jest/types" "^29.1.0" + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-mock "^29.1.1" - jest-util "^29.1.0" + jest-mock "^29.1.2" + jest-util "^29.1.2" jest-get-type@^29.0.0: version "29.0.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== -jest-haste-map@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.0.tgz#1cbdd30528b7b215523166cec3718600a3328ad1" - integrity sha512-qn+QVZ6JHzzx6g8XrMrNNvvIWrgVT6FzOoxTP5hQ1vEu6r9use2gOb0sSeC3Xle7eaDLN4DdAazSKnWskK3B/g== +jest-haste-map@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.2.tgz#93f3634aa921b6b654e7c94137b24e02e7ca6ac9" + integrity sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.0.0" - jest-util "^29.1.0" - jest-worker "^29.1.0" + jest-util "^29.1.2" + jest-worker "^29.1.2" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.0.tgz#6b7067d383dbf0804f21e16426d8562d84f19340" - integrity sha512-7ZdlIA2UXBIzXBNadta7pohrrvbD/Jp5T55Ux2DE1BSGul4RglIPHt7cZ0V3ll+ppBC1pGaBiWPBfLcQ2dDc3Q== +jest-leak-detector@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz#4c846db14c58219430ccbc4f01a1ec52ebee4fc2" + integrity sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ== dependencies: jest-get-type "^29.0.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" -jest-matcher-utils@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.0.tgz#60f53cc199921ece9170d3d20500ae0b93294928" - integrity sha512-pfthsLu27kZg+T1XTUGvox0r3gP3KtqdMPliVd/bs6iDrZ9Z6yJgLbw6zNc4DHtCcyzq9UW0jmszCX8DdFU/wA== +jest-matcher-utils@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz#e68c4bcc0266e70aa1a5c13fb7b8cd4695e318a1" + integrity sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw== dependencies: chalk "^4.0.0" - jest-diff "^29.1.0" + jest-diff "^29.1.2" jest-get-type "^29.0.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" -jest-message-util@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.0.tgz#0bb50a8064aa49999a6c313827e43bf51bd71dd1" - integrity sha512-NzGXD9wgCxUy20sIvyOsSA/KzQmkmagOVGE5LnT2juWn+hB88gCQr8N/jpu34CXRIXmV7INwrQVVwhnh72pY5A== +jest-message-util@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.2.tgz#c21a33c25f9dc1ebfcd0f921d89438847a09a501" + integrity sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.1.0" + pretty-format "^29.1.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.1.tgz#b5475d07a8db6d39fe73e960ca94a3ac761afe0d" - integrity sha512-vDe56JmImqt3j8pHcEIkahQbSCnBS49wda0spIl0bkrIM7VDZXjKaes6W28vKZye0atNAcFaj3dxXh0XWjBW4Q== +jest-mock@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.2.tgz#de47807edbb9d4abf8423f1d8d308d670105678c" + integrity sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-util "^29.1.0" + jest-util "^29.1.2" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -8363,88 +8363,88 @@ jest-regex-util@^29.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== -jest-resolve-dependencies@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.1.tgz#03104a866fb133cffd8a6fe7fc198b0de9a17232" - integrity sha512-AMRTJyiK8caRXq3pa9i4oXX6yH+am5v0HwCUq1yk9lxI3ARihyT2OfEySJJo3ER7xpxf3b6isfp1sO6PQY3N0Q== +jest-resolve-dependencies@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz#a6919e58a0c7465582cb8ec2d745b4e64ae8647f" + integrity sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ== dependencies: jest-regex-util "^29.0.0" - jest-snapshot "^29.1.0" + jest-snapshot "^29.1.2" -jest-resolve@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.0.tgz#114d2a86f6ff07e1cc56dbe84deb9d6e058b4399" - integrity sha512-0IETuMI58nbAWwCrtX1QQmenstlWOEdwNS5FXxpEMAs6S5tttFiEoXUwGTAiI152nqoWRUckAgt21FP4wqeZWA== +jest-resolve@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.2.tgz#9dd8c2fc83e59ee7d676b14bd45a5f89e877741d" + integrity sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.1.0" + jest-haste-map "^29.1.2" jest-pnp-resolver "^1.2.2" - jest-util "^29.1.0" - jest-validate "^29.1.0" + jest-util "^29.1.2" + jest-validate "^29.1.2" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.1.tgz#4ababc79ec3ec654de33db093ca2ec78599fa7ad" - integrity sha512-HqazsMPXB62Zi2oJEl+Ta9aUWAaR4WdT7ow25pcS99PkOsWQoYH+yyaKbAHBUf8NOqPbZ8T4Q8gt8ZBFEJJdVQ== +jest-runner@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.2.tgz#f18b2b86101341e047de8c2f51a5fdc4e97d053a" + integrity sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q== dependencies: - "@jest/console" "^29.1.0" - "@jest/environment" "^29.1.1" - "@jest/test-result" "^29.1.0" - "@jest/transform" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/console" "^29.1.2" + "@jest/environment" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^29.0.0" - jest-environment-node "^29.1.1" - jest-haste-map "^29.1.0" - jest-leak-detector "^29.1.0" - jest-message-util "^29.1.0" - jest-resolve "^29.1.0" - jest-runtime "^29.1.1" - jest-util "^29.1.0" - jest-watcher "^29.1.0" - jest-worker "^29.1.0" + jest-environment-node "^29.1.2" + jest-haste-map "^29.1.2" + jest-leak-detector "^29.1.2" + jest-message-util "^29.1.2" + jest-resolve "^29.1.2" + jest-runtime "^29.1.2" + jest-util "^29.1.2" + jest-watcher "^29.1.2" + jest-worker "^29.1.2" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.1.tgz#54a4cc4665d5c86f072f3f8fe3f9ec83d3802c8b" - integrity sha512-DA2nW5GUAEFUOFztVqX6BOHbb1tUO1iDzlx+bOVdw870UIkv09u3P5nTfK3N+xtqy/fGlLsg7UCzhpEJnwKilg== +jest-runtime@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.2.tgz#dbcd57103d61115479108d5864bdcd661d9c6783" + integrity sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw== dependencies: - "@jest/environment" "^29.1.1" - "@jest/fake-timers" "^29.1.1" - "@jest/globals" "^29.1.1" + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/globals" "^29.1.2" "@jest/source-map" "^29.0.0" - "@jest/test-result" "^29.1.0" - "@jest/transform" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.1.0" - jest-message-util "^29.1.0" - jest-mock "^29.1.1" + jest-haste-map "^29.1.2" + jest-message-util "^29.1.2" + jest-mock "^29.1.2" jest-regex-util "^29.0.0" - jest-resolve "^29.1.0" - jest-snapshot "^29.1.0" - jest-util "^29.1.0" + jest-resolve "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.0.tgz#9da20c1c504a41e79abcbfecced090325b3cdba1" - integrity sha512-nHZoA+hpbFlkyV8uLoLJQ/80DLi3c6a5zeELgfSZ5bZj+eljqULr79KBQakp5xyH3onezf4k+K+2/Blk5/1O+g== +jest-snapshot@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.2.tgz#7dd277e88c45f2d2ff5888de1612e63c7ceb575b" + integrity sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -8452,81 +8452,82 @@ jest-snapshot@^29.1.0: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.1.0" - "@jest/transform" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/expect-utils" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.1.0" + expect "^29.1.2" graceful-fs "^4.2.9" - jest-diff "^29.1.0" + jest-diff "^29.1.2" jest-get-type "^29.0.0" - jest-haste-map "^29.1.0" - jest-matcher-utils "^29.1.0" - jest-message-util "^29.1.0" - jest-util "^29.1.0" + jest-haste-map "^29.1.2" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-util "^29.1.2" natural-compare "^1.4.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" semver "^7.3.5" -jest-util@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.0.tgz#e8a971dfb900bb85f090c752aa321b6912e81002" - integrity sha512-5haD8egMAEAq/e8ritN2Gr1WjLYtXi4udAIZB22GnKlv/2MHkbCjcyjgDBmyezAMMeQKGfoaaDsWCmVlnHZ1WQ== +jest-util@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.2.tgz#ac5798e93cb6a6703084e194cfa0898d66126df1" + integrity sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.0.tgz#5e2ba89d7d6b3e4d3ece34024f317e956a5c85c0" - integrity sha512-EQKRweSxmIJelCdirpuVkeCS1rSNXJFtSGEeSRFwH39QGioy7qKRSY8XBB4qFiappbsvgHnH0V6Iq5ASs11knA== +jest-validate@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.2.tgz#83a728b8f6354da2e52346878c8bc7383516ca51" + integrity sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA== dependencies: - "@jest/types" "^29.1.0" + "@jest/types" "^29.1.2" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.0.0" leven "^3.1.0" - pretty-format "^29.1.0" + pretty-format "^29.1.2" -jest-watcher@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.0.tgz#4a9f9d2c9bb9115f7b543c26f468d2c0c0202506" - integrity sha512-JXw7+VpLSf+2yfXlux1/xR65fMn//0pmiXd6EtQWySS9233aA+eGS+8Y5o2imiJ25JBKdG8T45+s78CNQ71Fbg== +jest-watcher@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.2.tgz#de21439b7d889e2fcf62cc2a4779ef1a3f1f3c62" + integrity sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w== dependencies: - "@jest/test-result" "^29.1.0" - "@jest/types" "^29.1.0" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^29.1.0" + jest-util "^29.1.2" string-length "^4.0.1" -jest-worker@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.0.tgz#374d741b976a868e39141d63fb401abacc07a8c9" - integrity sha512-yr7RFRAxI+vhL/cGB9B0FhD+QfaWh1qSxurx7gLP16dfmqhG8w75D/CQFU8ZetvhiQqLZh8X0C4rxwsZy6HITQ== +jest-worker@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.2.tgz#a68302af61bce82b42a9a57285ca7499d29b2afc" + integrity sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA== dependencies: "@types/node" "*" + jest-util "^29.1.2" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.1.tgz#22d9d828f01335ec17225bcb267fe669319983be" - integrity sha512-Doe41PZ8MvGLtOZIW2RIVu94wa7jm/N775BBloVXk/G/vV6VYnDCOxBwrqekEgrd3Pn/bv8b5UdB2x0pAoQpwQ== +jest@29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.2.tgz#f821a1695ffd6cd0efc3b59d2dfcc70a98582499" + integrity sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw== dependencies: - "@jest/core" "^29.1.1" - "@jest/types" "^29.1.0" + "@jest/core" "^29.1.2" + "@jest/types" "^29.1.2" import-local "^3.0.2" - jest-cli "^29.1.1" + jest-cli "^29.1.2" jquery@^3.5.0: version "3.6.1" @@ -11270,10 +11271,10 @@ pretty-error@^2.0.2: lodash "^4.17.20" renderkid "^2.0.4" -pretty-format@^29.1.0: - version "29.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.0.tgz#ea3de2feed5b8d19c537a12fe478ddc8b45da6b8" - integrity sha512-dZ21z0UjKVSiEkrPAt2nJnGfrtYMFBlNW4wTkJsIp9oB5A8SUQ8DuJ9EUgAvYyNfMeoGmKiDnpJvM489jkzdSQ== +pretty-format@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.2.tgz#b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a" + integrity sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg== dependencies: "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" From 815d7049428a63ec5e8959eecb0b7812e2e558d8 Mon Sep 17 00:00:00 2001 From: Devin <42215787+devinmugen@users.noreply.github.com> Date: Sun, 2 Oct 2022 00:41:59 +0800 Subject: [PATCH 20/30] fix: picuki video src and add the controls (#10976) * fix: picuki video src and add the controls Modify the picuki video src and add the controls properties. * fix: picuki video src (Modification of judgement) * fix: picuki video src (Remove spaces) * Create video.art * fix: picuki video src (art-template) * fix: picuki video src (object-shorthand) * fix: picuki video src (controls) --- lib/v2/picuki/profile.js | 16 ++++++++++++++-- lib/v2/picuki/templates/video.art | 3 +++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 lib/v2/picuki/templates/video.art diff --git a/lib/v2/picuki/profile.js b/lib/v2/picuki/profile.js index a117876611..269f9cbc32 100644 --- a/lib/v2/picuki/profile.js +++ b/lib/v2/picuki/profile.js @@ -48,8 +48,20 @@ module.exports = async (ctx) => { const $ = cheerio.load(data); // Instagram 允许最多 10 条图片/视频任意混合于一条 post,picuki 在所有情况下都会将它(们)置于 .single-photo 内 let html = ''; - $('.single-photo img,video').each((_, item) => { - html += $(item).toString(); // 可能是视频,也可能是图片,格式都比较友好,这里直接添加 + $('.single-photo img').each((_, item) => { + html += $(item).toString(); + }); + $('.single-photo video').each((_, item) => { + item = $(item); + let videoSrc = item.attr('src'); + if (videoSrc === undefined) { + videoSrc = item.children().attr('src'); + } + const videoPoster = item.attr('poster'); + html += art(path.join(__dirname, 'templates/video.art'), { + videoSrc, + videoPoster, + }); }); return html; } diff --git a/lib/v2/picuki/templates/video.art b/lib/v2/picuki/templates/video.art new file mode 100644 index 0000000000..67e673cab9 --- /dev/null +++ b/lib/v2/picuki/templates/video.art @@ -0,0 +1,3 @@ + From 630f1e925a8e02896c8048631d0bfde383fd3994 Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Sun, 2 Oct 2022 01:01:04 +0800 Subject: [PATCH 21/30] =?UTF-8?q?feat(route):=20add=20Aljazeera=E5=8D=8A?= =?UTF-8?q?=E5=B2=9B=E7=94=B5=E8=A7=86=E5=8F=B0=20(#10978)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): add Aljazeera半岛电视台新闻 * docs: move to traditional-media --- docs/en/traditional-media.md | 58 +++++++++++++++ docs/new-media.md | 6 -- docs/traditional-media.md | 58 +++++++++++++++ lib/router.js | 2 +- lib/routes/aljazeera/news.js | 38 ---------- lib/v2/aljazeera/index.js | 87 ++++++++++++++++++++++ lib/v2/aljazeera/maintainer.js | 5 ++ lib/v2/aljazeera/radar.js | 62 +++++++++++++++ lib/v2/aljazeera/router.js | 3 + lib/v2/aljazeera/templates/description.art | 8 ++ 10 files changed, 282 insertions(+), 45 deletions(-) delete mode 100644 lib/routes/aljazeera/news.js create mode 100644 lib/v2/aljazeera/index.js create mode 100644 lib/v2/aljazeera/maintainer.js create mode 100644 lib/v2/aljazeera/radar.js create mode 100644 lib/v2/aljazeera/router.js create mode 100644 lib/v2/aljazeera/templates/description.art diff --git a/docs/en/traditional-media.md b/docs/en/traditional-media.md index 0be094d436..ef793f5c7b 100644 --- a/docs/en/traditional-media.md +++ b/docs/en/traditional-media.md @@ -56,6 +56,64 @@ The following are some of the supported Channel and Topic ids.
+## Aljazeera + +### News + + + +Language + +| Arbric | Chinese | English | +| ------ | ------- | ------- | +| arbric | chinese | english | + +::: tip Tip + +If you subscribe to [Al Jazeera English - Economy](https://www.aljazeera.com/economy), whose language is `english` and whose path is `economy`, you can get the route as [`/aljazeera/english/economy`](https://rsshub.app/aljazeera/english/economy) + +If you subscribe to [Al Jazeera Chinese - Political](https://chinese.aljazeera.net/news/political) with language `chinese` and path `news/political`, you can get the route as [`/aljazeera/chinese/news/political`](https://rsshub.app/aljazeera/chinese/news/political) + +::: + + + +### Tag + + + +Language + +| Arbric | Chinese | English | +| ------ | ------- | ------- | +| arbric | chinese | english | + +::: tip Tip + +If you subscribe to [Al Jazeera English - Science and Technology](https://www.aljazeera.com/tag/science-and-technology), whose language is `english` and whose path is `science-and-technology`, you can get the route as [`/aljazeera/english/tag/science-and-technology`](https://rsshub.app/aljazeera/english/tag/science-and-technology) + +::: + + + +### Official RSS + + + +Language + +| Arbric | Chinese | English | +| ------ | ------- | ------- | +| arbric | chinese | english | + +::: tip Tip + +There is no RSS source for Al Jazeera Chinese, returning homepage content by default + +::: + + + ## AP News ### Topics diff --git a/docs/new-media.md b/docs/new-media.md index e653f62720..e7079ae809 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -151,12 +151,6 @@ pageClass: routes
-## Aljazeera 半岛网 - -### 新闻 - - - ## AppleInsider ### 分类 diff --git a/docs/traditional-media.md b/docs/traditional-media.md index 44b077b922..21cf744a73 100644 --- a/docs/traditional-media.md +++ b/docs/traditional-media.md @@ -62,6 +62,64 @@ pageClass: routes +## Aljazeera 半岛电视台 + +### 新闻 + + + +语言 + +| 阿拉伯文 | 中文 | 英文 | +| ------ | ------- | ------- | +| arbric | chinese | english | + +::: tip 提示 + +若订阅 [Al Jazeera English - Economy](https://www.aljazeera.com/economy),其语言为 `english`,路径为 `economy`,可得到其路由为 [`/aljazeera/english/economy`](https://rsshub.app/aljazeera/english/economy) + +若订阅 [半岛电视台中文频道 - 政治](https://chinese.aljazeera.net/news/political),其语言为 `chinese`,路径为 `news/political`,可得到其路由为 [`/aljazeera/chinese/news/political`](https://rsshub.app/aljazeera/chinese/news/political) + +::: + + + +### 标签 + + + +语言 + +| 阿拉伯文 | 中文 | 英文 | +| ------ | ------- | ------- | +| arbric | chinese | english | + +::: tip 提示 + +若订阅 [Al Jazeera English - Science and Technology](https://www.aljazeera.com/tag/science-and-technology),其语言为 `english`,标签 id 为 `science-and-technology`,可得到其路由为 [`/aljazeera/english/tag/science-and-technology`](https://rsshub.app/aljazeera/english/tag/science-and-technology) + +::: + + + +### 官方 RSS + + + +语言 + +| 阿拉伯文 | 中文 | 英文 | +| ------ | ------- | ------- | +| arbric | chinese | english | + +::: tip 提示 + +半岛电视台中文频道无对应的 RSS,故默认返回首页内容 + +::: + + + ## AP News ### 话题 diff --git a/lib/router.js b/lib/router.js index 49b0260af2..b9358a332a 100644 --- a/lib/router.js +++ b/lib/router.js @@ -2807,7 +2807,7 @@ router.get('/manhuadui/manhua/:name/:serial?', lazyloadRouteHandler('./routes/ma router.get('/fzdm/manhua/:id', lazyloadRouteHandler('./routes/fzdm/manhua')); // Aljazeera 半岛网 -router.get('/aljazeera/news', lazyloadRouteHandler('./routes/aljazeera/news')); +// router.get('/aljazeera/news', lazyloadRouteHandler('./routes/aljazeera/news')); // CFD indices dividend adjustment router.get('/cfd/gbp_div', lazyloadRouteHandler('./routes/cfd/gbp_div')); diff --git a/lib/routes/aljazeera/news.js b/lib/routes/aljazeera/news.js deleted file mode 100644 index caabd24958..0000000000 --- a/lib/routes/aljazeera/news.js +++ /dev/null @@ -1,38 +0,0 @@ -const url = require('url'); -const got = require('@/utils/got'); -const cheerio = require('cheerio'); - -module.exports = async (ctx) => { - const link = `https://chinese.aljazeera.net/news`; - const response = await got({ - method: 'get', - url: link, - }); - const $ = cheerio.load(response.data); - - const list = $('h3 a') - .map((_, item) => { - item = $(item); - return { - title: item.text(), - link: url.resolve(`https://chinese.aljazeera.net`, item.attr('href')), - }; - }) - .get(); - - ctx.state.data = { - title: `Aljazeera半岛网 - 新闻`, - link, - item: await Promise.all( - list.map((item) => - ctx.cache.tryGet(item.link, async () => { - const detailResponse = await got({ method: 'get', url: item.link }); - const content = cheerio.load(detailResponse.data); - item.pubDate = new Date(detailResponse.data.match(/"datePublished": "(.*?)",/)[1]).toUTCString(); - item.description = content('div.wysiwyg').html(); - return item; - }) - ) - ), - }; -}; diff --git a/lib/v2/aljazeera/index.js b/lib/v2/aljazeera/index.js new file mode 100644 index 0000000000..a2b55203e1 --- /dev/null +++ b/lib/v2/aljazeera/index.js @@ -0,0 +1,87 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); +const { art } = require('@/utils/render'); +const path = require('path'); + +const languages = { + arabic: { + rootUrl: 'https://www.aljazeera.net', + rssUrl: 'rss', + }, + chinese: { + rootUrl: 'https://chinese.aljazeera.net', + rssUrl: undefined, + }, + english: { + rootUrl: 'https://www.aljazeera.com', + rssUrl: 'xml/rss/all.xml', + }, +}; + +module.exports = async (ctx) => { + const params = ctx.path === '/' ? ['arabic'] : ctx.path.replace(/^\//, '').split('/'); + + if (!languages.hasOwnProperty(params[0])) { + params.unshift('arabic'); + } + + const language = params.shift(); + const isRSS = params.length === 1 && params.at(-1) === 'rss' && languages[language].rssUrl; + + const rootUrl = languages[language].rootUrl; + const currentUrl = `${rootUrl}/${isRSS ? languages[language].rssUrl : params.join('/')}`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + let items = isRSS + ? response.data.match(new RegExp('' + rootUrl + '/(.*?)', 'g')).map((item) => ({ + link: item.match(/(.*?)<\/link>/)[1], + })) + : $('.u-clickable-card__link') + .toArray() + .map((item) => { + item = $(item); + + return { + link: `${rootUrl}${item.attr('href')}`, + }; + }); + + items = await Promise.all( + items.slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 50).map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + content('.more-on').parent().remove(); + content('.responsive-image img').removeAttr('srcset'); + + item.title = content('h1').first().text(); + item.author = content('.author').text(); + item.pubDate = parseDate(detailResponse.data.match(/"datePublished": "(.*?)",/)[1]); + item.description = art(path.join(__dirname, 'templates/description.art'), { + image: content('.article-featured-image').html(), + description: content('.wysiwyg').html(), + }); + + return item; + }) + ) + ); + + ctx.state.data = { + title: $('title').first().text(), + link: currentUrl, + item: items, + }; +}; diff --git a/lib/v2/aljazeera/maintainer.js b/lib/v2/aljazeera/maintainer.js new file mode 100644 index 0000000000..f705151e68 --- /dev/null +++ b/lib/v2/aljazeera/maintainer.js @@ -0,0 +1,5 @@ +module.exports = { + '/:language?/:category?': ['nczitzk'], + '/:language?/tag/:id': ['nczitzk'], + '/:language?/rss': ['nczitzk'], +}; diff --git a/lib/v2/aljazeera/radar.js b/lib/v2/aljazeera/radar.js new file mode 100644 index 0000000000..0df007fbb3 --- /dev/null +++ b/lib/v2/aljazeera/radar.js @@ -0,0 +1,62 @@ +module.exports = { + 'aljazeera.com': { + _name: 'Aljazeera 半岛电视台', + '.': [ + { + title: 'News', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-xin-wen', + source: ['/:category', '/'], + target: '/aljazeera/english/:category', + }, + { + title: 'Tag', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-biao-qian', + source: ['/tag/:id', '/'], + target: '/aljazeera/english/tag/:id', + }, + { + title: 'Official RSS', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-guan-fang-rss', + source: ['/xml/rss/all.xml', '/'], + target: '/aljazeera/english/rss', + }, + ], + }, + 'aljazeera.net': { + _name: 'Aljazeera 半岛电视台', + '.': [ + { + title: 'News', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-xin-wen', + source: ['/:category', '/'], + target: '/aljazeera/arbric/:category', + }, + { + title: 'Tag', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-biao-qian', + source: ['/tag/:id', '/'], + target: '/aljazeera/arbric/tag/:id', + }, + { + title: 'Official RSS', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-guan-fang-rss', + source: ['/rss', '/'], + target: '/aljazeera/arbric/rss', + }, + ], + chinese: [ + { + title: '新闻', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-xin-wen', + source: ['/:category', '/'], + target: '/aljazeera/chinese/:category', + }, + { + title: '标签', + docs: 'https://docs.rsshub.app/traditional-media.html#aljazeera-ban-dao-dian-shi-tai-biao-qian', + source: ['/tag/:id', '/'], + target: '/aljazeera/chinese/tag/:id', + }, + ], + }, +}; diff --git a/lib/v2/aljazeera/router.js b/lib/v2/aljazeera/router.js new file mode 100644 index 0000000000..37c089127b --- /dev/null +++ b/lib/v2/aljazeera/router.js @@ -0,0 +1,3 @@ +module.exports = function (router) { + router.get(/([\w/-]+)?/, require('./index')); +}; diff --git a/lib/v2/aljazeera/templates/description.art b/lib/v2/aljazeera/templates/description.art new file mode 100644 index 0000000000..cbd5696ec8 --- /dev/null +++ b/lib/v2/aljazeera/templates/description.art @@ -0,0 +1,8 @@ +{{ if image }} +
+{{@ image }} +
+{{ /if }} +{{ if description }} +{{@ description }} +{{ /if }} \ No newline at end of file From a492cee523921580efaad1a83a0bacd8bffef9d9 Mon Sep 17 00:00:00 2001 From: Haukeng Date: Sun, 2 Oct 2022 01:44:34 +0800 Subject: [PATCH 22/30] fix(route): hacker news (#10980) --- lib/v2/hackernews/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/v2/hackernews/index.js b/lib/v2/hackernews/index.js index aa26d9a924..c41576ed86 100644 --- a/lib/v2/hackernews/index.js +++ b/lib/v2/hackernews/index.js @@ -25,13 +25,13 @@ module.exports = async (ctx) => { const item = {}; item.guid = thing.attr('id'); - item.title = thing.find('.titlelink').text(); + item.title = thing.find('.titleline').children('a').text(); item.category = thing.find('.sitestr').text(); item.author = thing.next().find('.hnuser').text(); item.pubDate = parseDate(thing.find('.age').attr('title') ?? thing.next().find('.age').attr('title')); item.link = `${rootUrl}/item?id=${item.guid}`; - item.origin = thing.find('.titlelink').attr('href'); + item.origin = thing.find('.titleline').children('a').attr('href'); item.onStory = thing.find('.onstory').text().substring(2); item.comments = thing.next().find('a').last().text().split(' comment')[0]; From 2d537bf3f032f300593d0405c3af997a092f59c8 Mon Sep 17 00:00:00 2001 From: Tony Date: Sat, 1 Oct 2022 23:37:10 +0300 Subject: [PATCH 23/30] feat(route): creative-comic (#10981) --- docs/anime.md | 6 ++ lib/v2/creative-comic/book.js | 60 +++++++++++++ lib/v2/creative-comic/maintainer.js | 3 + lib/v2/creative-comic/radar.js | 13 +++ lib/v2/creative-comic/router.js | 3 + lib/v2/creative-comic/templates/chapter.art | 11 +++ lib/v2/creative-comic/utils.js | 96 +++++++++++++++++++++ 7 files changed, 192 insertions(+) create mode 100644 lib/v2/creative-comic/book.js create mode 100644 lib/v2/creative-comic/maintainer.js create mode 100644 lib/v2/creative-comic/radar.js create mode 100644 lib/v2/creative-comic/router.js create mode 100644 lib/v2/creative-comic/templates/chapter.art create mode 100644 lib/v2/creative-comic/utils.js diff --git a/docs/anime.md b/docs/anime.md index 8e897496ff..8232fb643b 100644 --- a/docs/anime.md +++ b/docs/anime.md @@ -246,6 +246,12 @@ pageClass: routes 见 [#bilibili](/social-media.html#bilibili) +## CCC 創作集 + +### 漫畫 + + + ## DLsite ### 当前日期发售的新产品 diff --git a/lib/v2/creative-comic/book.js b/lib/v2/creative-comic/book.js new file mode 100644 index 0000000000..a14773b052 --- /dev/null +++ b/lib/v2/creative-comic/book.js @@ -0,0 +1,60 @@ +const { parseDate } = require('@/utils/parse-date'); +const { art } = require('@/utils/render'); +const path = require('path'); +const { getUuid, getBook, getChapter, getChapters, getImgEncrypted, getImgKey, decrypt, getRealKey, siteHost } = require('./utils'); + +module.exports = async (ctx) => { + const { id, coverOnly = 'true', quality = '1' } = ctx.params; + const uuid = await getUuid(ctx.cache.tryGet); + let { data: book } = await getBook(id, uuid); + let { data: chapters } = await getChapters(id, uuid); + book = book.data; + chapters = chapters.data; + + const items = await Promise.all( + chapters.chapters.map(async (c) => { + let pages; + if (coverOnly !== 'true' && coverOnly !== '1') { + let { data: chapter } = await getChapter(c.id, uuid); + chapter = chapter.data; + + if (chapter.chapter.free_day === null || chapter.chapter.free_day === 0) { + pages = await Promise.all( + chapter.chapter.proportion.map(async (p) => { + let { data: imgKey } = await getImgKey(p.id, uuid); + imgKey = imgKey.data.key; + + const realKey = getRealKey(imgKey); + const encrypted = await getImgEncrypted(p.id, quality); + + return ctx.cache.tryGet(`${siteHost}/fs/chapter_content/encrypt/${p.id}/${quality}`, () => decrypt(encrypted, realKey)); + }) + ); + } + } + + return { + title: c.vol_name, + description: art(path.join(__dirname, 'templates/chapter.art'), { + chapter: c, + pages, + cover: c.image1, + }), + pubDate: parseDate(c.online_at), + updated: parseDate(c.updated_at), + link: `https://www.creative-comic.tw/reader_comic/${c.id}`, + author: book.author.map((author) => author.name).join(', '), + category: book.tags.map((tag) => tag.name), + }; + }) + ); + + ctx.state.data = { + title: `${book.name} | CCC創作集`, + description: `${book.brief} ${book.description}`, + link: book.share_link, + image: book.image1, + item: items, + language: 'zh-hant', + }; +}; diff --git a/lib/v2/creative-comic/maintainer.js b/lib/v2/creative-comic/maintainer.js new file mode 100644 index 0000000000..3dcaecb971 --- /dev/null +++ b/lib/v2/creative-comic/maintainer.js @@ -0,0 +1,3 @@ +module.exports = { + '/book/:id/:coverOnly?/:quality?': ['TonyRL'], +}; diff --git a/lib/v2/creative-comic/radar.js b/lib/v2/creative-comic/radar.js new file mode 100644 index 0000000000..9e7af75317 --- /dev/null +++ b/lib/v2/creative-comic/radar.js @@ -0,0 +1,13 @@ +module.exports = { + 'creative-comic.tw': { + _name: 'CCC 創作集', + '.': [ + { + title: '漫畫', + docs: 'https://docs.rsshub.app/anime.html#ccc-chuang-zuo-ji', + source: ['/book/:id/*'], + target: '/creative-comic/:id', + }, + ], + }, +}; diff --git a/lib/v2/creative-comic/router.js b/lib/v2/creative-comic/router.js new file mode 100644 index 0000000000..23ab64e769 --- /dev/null +++ b/lib/v2/creative-comic/router.js @@ -0,0 +1,3 @@ +module.exports = (router) => { + router.get('/book/:id/:coverOnly?/:quality?', require('./book')); +}; diff --git a/lib/v2/creative-comic/templates/chapter.art b/lib/v2/creative-comic/templates/chapter.art new file mode 100644 index 0000000000..d65dacfbd1 --- /dev/null +++ b/lib/v2/creative-comic/templates/chapter.art @@ -0,0 +1,11 @@ +{{ if chapter }} +

{{ chapter.name }}

+{{ /if }} +{{ if pages }} + {{ each pages page }} +
+ {{ /each }} +{{ /if }} +{{ if cover }} + +{{ /if }} diff --git a/lib/v2/creative-comic/utils.js b/lib/v2/creative-comic/utils.js new file mode 100644 index 0000000000..6bed527c2f --- /dev/null +++ b/lib/v2/creative-comic/utils.js @@ -0,0 +1,96 @@ +const got = require('@/utils/got'); +const CryptoJS = require('crypto-js'); + +const apiHost = 'https://api.creative-comic.tw'; +const siteHost = 'https://www.creative-comic.tw'; +const device = 'web_desktop'; +const DEFAULT_TOKEN = 'freeforccc2020reading'; + +const getBook = (bookId, uuid) => + got(`${apiHost}/book/${bookId}/info`, { + headers: { + device, + uuid, + }, + }); + +const getChapter = (id, uuid) => + got(`${apiHost}/book/chapter/${id}`, { + headers: { + device, + uuid, + }, + }); + +const getChapters = (bookId, uuid) => + got(`${apiHost}/book/${bookId}/chapter`, { + headers: { + device, + uuid, + }, + }); + +const getImgEncrypted = async (pageId, quality) => { + const { data: res } = await got(`${siteHost}/fs/chapter_content/encrypt/${pageId}/${quality}`, { + headers: { + device, + }, + responseType: 'buffer', + }); + return Buffer.from(res).toString('base64'); +}; + +const getImgKey = (pageId, uuid) => + got(`${apiHost}/book/chapter/image/${pageId}`, { + headers: { + device, + uuid, + }, + }); + +const getUuid = (tryGet) => + tryGet('creative-comic:uuid', async () => { + const { data } = await got(`${apiHost}/guest`, { + headers: { + device, + }, + }); + return data.data; + }); + +const decrypt = (encrypted, secrets) => + CryptoJS.AES.decrypt(encrypted, CryptoJS.enc.Hex.parse(secrets.key), { + iv: CryptoJS.enc.Hex.parse(secrets.iv), + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }).toString(CryptoJS.enc.Utf8); + +const token2Key = (token) => { + const t = CryptoJS.SHA512(token).toString(); + return { + key: t.substring(0, 64), + iv: t.substring(30, 62), // t.substr(30, 32) + }; +}; + +const getRealKey = (imgKey, token = DEFAULT_TOKEN) => { + const secrets = token2Key(token); + const key = decrypt(imgKey, secrets); + const realKey = key.split(':'); + return { + key: realKey[0], + iv: realKey[1], + }; +}; + +module.exports = { + getBook, + getChapter, + getChapters, + getImgEncrypted, + getImgKey, + getUuid, + decrypt, + token2Key, + getRealKey, +}; From 99d7c0cacd2913f0b33a2eccee4d659faf67616c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Wang?= <52880665+RiverTwilight@users.noreply.github.com> Date: Sun, 2 Oct 2022 23:20:38 +0800 Subject: [PATCH 24/30] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=A5=BF?= =?UTF-8?q?=E5=8D=97=E7=9F=B3=E6=B2=B9=E5=A4=A7=E5=AD=A6=E8=B4=A2=E7=BB=8F?= =?UTF-8?q?=E5=AD=A6=E9=99=A2=E5=92=8C=E4=BF=A1=E6=81=AF=E5=AD=A6=E9=99=A2?= =?UTF-8?q?=20(#10970)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add 西南石油大学财金学院和信息学院 * add 西南石油大学财经学院和信息学院 * Merge branch 'master' of github.com:RiverTwilight/RSSHub * feat: 增加西南石油大学信息学院和财经学院 * lint: remove console-log * lint: simplify got usage, and so on * lint: parenthesize the returned value * lint: remove useless symbol * docs: fixes --- docs/university.md | 20 +++++++++++++++ lib/v2/swpu/cjxy.js | 53 +++++++++++++++++++++++++++++++++++++++ lib/v2/swpu/is.js | 53 +++++++++++++++++++++++++++++++++++++++ lib/v2/swpu/maintainer.js | 2 ++ lib/v2/swpu/radar.js | 12 +++++++++ lib/v2/swpu/router.js | 2 ++ 6 files changed, 142 insertions(+) create mode 100644 lib/v2/swpu/cjxy.js create mode 100644 lib/v2/swpu/is.js diff --git a/docs/university.md b/docs/university.md index 066129c9b5..fedeb1cb4e 100644 --- a/docs/university.md +++ b/docs/university.md @@ -2989,6 +2989,26 @@ jsjxy.hbut.edu.cn 证书链不全,自建 RSSHub 可设置环境变量 NODE_TLS
+### 财经学院 + + + +| 栏目 | 学院新闻 | 学院通知 | +| -- | ---- | ---- | +| 代码 | xyxw | xytz | + + + +### 信息学院 + + + +| 栏目 | 学院新闻 | 通知公告 | 教育教学 | 学生工作 | 招生就业 | +| -- | ---- | ---- | ---- | ---- | ---- | +| 代码 | xyxw | tzgg | jyjx | xsgz | zsjy | + + + ## 信阳师范学院 ### 高等教育自学考试办公室 diff --git a/lib/v2/swpu/cjxy.js b/lib/v2/swpu/cjxy.js new file mode 100644 index 0000000000..33ef336e0b --- /dev/null +++ b/lib/v2/swpu/cjxy.js @@ -0,0 +1,53 @@ +const { parseDate } = require('@/utils/parse-date'); +const cheerio = require('cheerio'); +const got = require('@/utils/got'); +const timezone = require('@/utils/timezone'); + +module.exports = async (ctx) => { + const url = `https://www.swpu.edu.cn/nccjxy/xydt/${ctx.params.code}.htm`; + + const res = await got(url); + const $ = cheerio.load(res.data); + + let title = $('title').text(); + title = title.substring(0, title.indexOf('-')); + + const items = $('.main_conRCb > ul > li') + .toArray() + .map((elem) => ({ + title: $('a[href]', elem).text().trim(), + pubDate: timezone(parseDate($('span', elem).text(), 'YYYY年MM月DD日'), +8), + link: `https://www.swpu.edu.cn/nccjxy/${$('a[href]', elem).attr('href').split('../')[1]}`, + })); + + const out = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const res = await got(item.link); + const $ = cheerio.load(res.data); + if ($('title').text().startsWith('系统提示')) { + item.author = '系统'; + item.description = '无权访问'; + } else { + item.author = '财经学院'; + item.description = $('.v_news_content').html(); + for (const elem of $('.v_news_content p')) { + if ($(elem).css('text-align') === 'right') { + item.author = $(elem).text(); + break; + } + } + } + return item; + }) + ) + ); + + ctx.state.data = { + title: `西南石油大学财经学院 ${title}`, + link: url, + description: `西南石油大学财经学院 ${title}`, + language: 'zh-CN', + item: out, + }; +}; diff --git a/lib/v2/swpu/is.js b/lib/v2/swpu/is.js new file mode 100644 index 0000000000..cde903df9d --- /dev/null +++ b/lib/v2/swpu/is.js @@ -0,0 +1,53 @@ +const { parseDate } = require('@/utils/parse-date'); +const cheerio = require('cheerio'); +const got = require('@/utils/got'); +const timezone = require('@/utils/timezone'); + +module.exports = async (ctx) => { + const url = `https://www.swpu.edu.cn/is/xydt/${ctx.params.code}.htm`; + + const res = await got(url); + const $ = cheerio.load(res.data); + + let title = $('title').text(); + title = title.substring(0, title.indexOf('-')); + + const items = $('tr[height="20"]') + .toArray() + .map((elem) => ({ + title: $('a[title]', elem).text().trim(), + pubDate: timezone(parseDate($('td:eq(1)', elem).text(), 'YYYY年MM月DD日'), +8), + link: `https://www.swpu.edu.cn/is/${$('a[href]', elem).attr('href').split('../')[1]}`, + })); + + const out = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const res = await got(item.link); + const $ = cheerio.load(res.data); + if ($('title').text().startsWith('系统提示')) { + item.author = '系统'; + item.description = '无权访问'; + } else { + item.author = '学院'; + item.description = $('.v_news_content').html(); + for (const elem of $('.v_news_content p')) { + if ($(elem).css('text-align') === 'right') { + item.author = $(elem).text(); + break; + } + } + } + return item; + }) + ) + ); + + ctx.state.data = { + title: `西南石油大学信息学院 ${title}`, + link: url, + description: `西南石油大学信息学院 ${title}`, + language: 'zh-CN', + item: out, + }; +}; diff --git a/lib/v2/swpu/maintainer.js b/lib/v2/swpu/maintainer.js index 3ce9c2e4bb..7e603e379e 100644 --- a/lib/v2/swpu/maintainer.js +++ b/lib/v2/swpu/maintainer.js @@ -1,6 +1,8 @@ module.exports = { '/bgw/:code': ['CYTMWIA'], + '/cjxy/:code': ['RiverTwilight'], '/dean/:code': ['CYTMWIA'], '/dxy/:code': ['CYTMWIA'], + '/is/:code': ['RiverTwilight'], '/scs/:code': ['CYTMWIA'], }; diff --git a/lib/v2/swpu/radar.js b/lib/v2/swpu/radar.js index 00b13ea650..68d2392709 100644 --- a/lib/v2/swpu/radar.js +++ b/lib/v2/swpu/radar.js @@ -26,6 +26,18 @@ module.exports = { source: ['/'], target: '', }, + { + title: '信息学院', + docs: 'https://docs.rsshub.app/university.html#xi-nan-shi-you-da-xue', + source: ['/'], + target: '', + }, + { + title: '财经学院', + docs: 'https://docs.rsshub.app/university.html#xi-nan-shi-you-da-xue', + source: ['/'], + target: '', + }, ], }, }; diff --git a/lib/v2/swpu/router.js b/lib/v2/swpu/router.js index c548310ca9..9fe26808c2 100644 --- a/lib/v2/swpu/router.js +++ b/lib/v2/swpu/router.js @@ -1,6 +1,8 @@ module.exports = function (router) { router.get('/bgw/:code', require('./bgw')); + router.get('/cjxy/:code', require('./cjxy')); router.get('/dean/:code', require('./dean')); router.get('/dxy/:code', require('./dxy')); + router.get('/is/:code', require('./is')); router.get('/scs/:code', require('./scs')); }; From 7f511334e2b3f230f92adc98a94c0284889fae23 Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Mon, 3 Oct 2022 06:04:14 +0800 Subject: [PATCH 25/30] =?UTF-8?q?feat(route):=20add=20=E9=9B=AA=E7=90=83?= =?UTF-8?q?=E4=BB=8A=E6=97=A5=E8=AF=9D=E9=A2=98=20(#10984)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/finance.md | 4 +++ lib/v2/xueqiu/maintainer.js | 1 + lib/v2/xueqiu/radar.js | 6 ++++ lib/v2/xueqiu/router.js | 1 + lib/v2/xueqiu/today.js | 65 +++++++++++++++++++++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 lib/v2/xueqiu/today.js diff --git a/docs/finance.md b/docs/finance.md index 7925dc4fbe..8d9679eefe 100644 --- a/docs/finance.md +++ b/docs/finance.md @@ -525,6 +525,10 @@ TokenInsight 官方亦有提供 RSS,可参考 + ### 用户动态 diff --git a/lib/v2/xueqiu/maintainer.js b/lib/v2/xueqiu/maintainer.js index 75be5e02ca..dc49083497 100644 --- a/lib/v2/xueqiu/maintainer.js +++ b/lib/v2/xueqiu/maintainer.js @@ -6,6 +6,7 @@ module.exports = { '/snb/:id': ['ZhishanZhang'], '/stock_comments/:id/:titleLength?': ['zytomorrow'], '/stock_info/:id/:type?': ['YuYang'], + '/today': ['nczitzk'], '/user/:id/:type?': ['imlonghao'], '/user_stock/:id': ['hillerliao'], }; diff --git a/lib/v2/xueqiu/radar.js b/lib/v2/xueqiu/radar.js index 2b52a4d70a..99f456db88 100644 --- a/lib/v2/xueqiu/radar.js +++ b/lib/v2/xueqiu/radar.js @@ -13,6 +13,12 @@ module.exports = { 'xueqiu.com': { _name: '雪球', '.': [ + { + title: '今日话题', + docs: 'https://docs.rsshub.app/finance.html#xue-qiu', + source: ['/today'], + target: '/xueqiu/today', + }, { title: '用户动态', docs: 'https://docs.rsshub.app/finance.html#xue-qiu', diff --git a/lib/v2/xueqiu/router.js b/lib/v2/xueqiu/router.js index 963ac5b4f3..e266cad05f 100644 --- a/lib/v2/xueqiu/router.js +++ b/lib/v2/xueqiu/router.js @@ -6,6 +6,7 @@ module.exports = (router) => { router.get('/snb/:id', require('./snb')); router.get('/stock_comments/:id/:titleLength?', require('./stock_comments')); router.get('/stock_info/:id/:type?', require('./stock_info')); + router.get('/today', require('./today')); router.get('/user/:id/:type?', require('./user')); router.get('/user_stock/:id', require('./user_stock')); }; diff --git a/lib/v2/xueqiu/today.js b/lib/v2/xueqiu/today.js new file mode 100644 index 0000000000..570921af17 --- /dev/null +++ b/lib/v2/xueqiu/today.js @@ -0,0 +1,65 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const { parseDate } = require('@/utils/parse-date'); + +module.exports = async (ctx) => { + const size = ctx.query.limit ?? '20'; + + const rootUrl = 'https://xueqiu.com'; + const currentUrl = `${rootUrl}/today`; + const apiUrl = `${rootUrl}/statuses/hot/listV2.json?since_id=-1&size=${size}`; + + const firstResponse = await got({ + method: 'get', + url: rootUrl, + }); + + const token = firstResponse.headers['set-cookie'].join(',').match(/(xq_a_token=.*?;)/)[1]; + + const response = await got({ + method: 'get', + url: apiUrl, + headers: { + Referer: rootUrl, + Cookie: token, + }, + }); + + let items = response.data.items.map((item) => { + item = item.original_status; + + return { + title: item.title || item.rawTitle || item.description.replace(/<(.*?)>/g, ''), + link: `${rootUrl}${item.target}`, + pubDate: parseDate(item.created_at), + author: item.user.screen_name, + }; + }); + + items = await Promise.all( + items.map((item) => + ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + headers: { + Referer: rootUrl, + Cookie: token, + }, + }); + + const content = cheerio.load(detailResponse.data); + + item.description = content('.article__bd__detail').html(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: '今日话题 - 雪球', + link: currentUrl, + item: items, + }; +}; From 494b9fe26872216e5d71b1003c97c73c6775477e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 21:10:54 +0000 Subject: [PATCH 26/30] chore(deps): bump jsdom from 20.0.0 to 20.0.1 (#10989) Bumps [jsdom](https://github.com/jsdom/jsdom) from 20.0.0 to 20.0.1. - [Release notes](https://github.com/jsdom/jsdom/releases) - [Changelog](https://github.com/jsdom/jsdom/blob/master/Changelog.md) - [Commits](https://github.com/jsdom/jsdom/compare/20.0.0...20.0.1) --- updated-dependencies: - dependency-name: jsdom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 77 ++++++++++++++++++++++------------------------------ 2 files changed, 33 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 6cac363bbf..6f0b4f7bb4 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "ioredis": "5.2.3", "ip-regex": "4.3.0", "is-localhost-ip": "2.0.0", - "jsdom": "20.0.0", + "jsdom": "20.0.1", "json-bigint": "1.0.0", "json5": "2.2.1", "koa": "2.13.4", diff --git a/yarn.lock b/yarn.lock index 187fe7592c..8ec650f384 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2574,23 +2574,23 @@ accepts@^1.2.5, accepts@^1.3.5, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" + acorn "^8.1.0" + acorn-walk "^8.0.2" acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^5.0.3: version "5.7.4" @@ -2602,12 +2602,7 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.6.0, acorn@^8.7.1, acorn@^8.8.0: +acorn@^8.1.0, acorn@^8.6.0, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== @@ -3373,11 +3368,6 @@ brotli@~1.3.2: dependencies: base64-js "^1.1.2" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - "browser-request@github:postlight/browser-request#feat-add-headers-to-response": version "0.3.2" resolved "https://codeload.github.com/postlight/browser-request/tar.gz/38faa5b85741aabfca61aa37d1ef044d68969ddf" @@ -4737,7 +4727,7 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== -decimal.js@^10.3.1: +decimal.js@^10.4.1: version "10.4.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.1.tgz#be75eeac4a2281aace80c1a8753587c27ef053e7" integrity sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw== @@ -8569,18 +8559,18 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.0.tgz#882825ac9cc5e5bbee704ba16143e1fa78361ebf" - integrity sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA== +jsdom@20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.1.tgz#d95b4a3b6e1eec6520aa01d9d908eade8c6ba153" + integrity sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A== dependencies: abab "^2.0.6" - acorn "^8.7.1" - acorn-globals "^6.0.0" + acorn "^8.8.0" + acorn-globals "^7.0.0" cssom "^0.5.0" cssstyle "^2.3.0" data-urls "^3.0.2" - decimal.js "^10.3.1" + decimal.js "^10.4.1" domexception "^4.0.0" escodegen "^2.0.0" form-data "^4.0.0" @@ -8588,18 +8578,17 @@ jsdom@20.0.0: http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "^7.0.0" + nwsapi "^2.2.2" + parse5 "^7.1.1" saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" + tough-cookie "^4.1.2" w3c-xmlserializer "^3.0.0" webidl-conversions "^7.0.0" whatwg-encoding "^2.0.0" whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" - ws "^8.8.0" + ws "^8.9.0" xml-name-validator "^4.0.0" jsesc@^2.5.1: @@ -10247,7 +10236,7 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg== -nwsapi@^2.2.0: +nwsapi@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== @@ -10646,7 +10635,7 @@ parse5-htmlparser2-tree-adapter@^7.0.0: domhandler "^5.0.2" parse5 "^7.0.0" -parse5@^7.0.0: +parse5@^7.0.0, parse5@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== @@ -13454,7 +13443,7 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@4.1.2, tough-cookie@^4.0.0: +tough-cookie@4.1.2, tough-cookie@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== @@ -14148,13 +14137,6 @@ vuepress@1.9.7: opencollective-postinstall "^2.0.2" update-notifier "^4.0.0" -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - w3c-xmlserializer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" @@ -14653,7 +14635,7 @@ write-file-atomic@^4.0.1: imurmurhash "^0.1.4" signal-exit "^3.0.7" -ws@8.8.1, ws@^8.8.0: +ws@8.8.1: version "8.8.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== @@ -14665,6 +14647,11 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" +ws@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" + integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== + wuzzy@^0.1.4: version "0.1.8" resolved "https://registry.yarnpkg.com/wuzzy/-/wuzzy-0.1.8.tgz#2e729f157b5757d4ed4d73c050f9f4ae12336f5c" From 151aafeb71a94c2d66d82dd7f7b963d8979a20f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 21:13:40 +0000 Subject: [PATCH 27/30] chore(deps): bump @sentry/node from 7.14.0 to 7.14.1 (#10991) Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 7.14.0 to 7.14.1. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.14.0...7.14.1) --- updated-dependencies: - dependency-name: "@sentry/node" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 60 ++++++++++++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index 6f0b4f7bb4..83cfe57ea3 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "dependencies": { "@koa/router": "12.0.0", "@postlight/parser": "2.2.2", - "@sentry/node": "7.14.0", + "@sentry/node": "7.14.1", "aes-js": "3.1.2", "art-template": "4.13.2", "bbcodejs": "0.0.4", diff --git a/yarn.lock b/yarn.lock index 8ec650f384..3402641c8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1544,50 +1544,50 @@ domhandler "^4.2.0" selderee "^0.6.0" -"@sentry/core@7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.14.0.tgz#89178822de75c6023e1718c29bee8d588687cedd" - integrity sha512-Hgn7De6CiCFnz868/Lrtei+9rj7/TIwhbDe3J+NeH+2ffXYn4VI8FxrlR/p2XfIq9iCfmG80EQXDtSh+Kh7mOw== +"@sentry/core@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.14.1.tgz#6b046181a1c13ed0fbc90d88d9c18ab1d70d98da" + integrity sha512-sjk60Gf5o9zynhWe1e0ro9uQO4OrKZ3H9xfgBf2ExgKXeMfKzYp5r2v2OKNevEde36Sr/DzlpiPj8EK67xrWPA== dependencies: - "@sentry/hub" "7.14.0" - "@sentry/types" "7.14.0" - "@sentry/utils" "7.14.0" + "@sentry/hub" "7.14.1" + "@sentry/types" "7.14.1" + "@sentry/utils" "7.14.1" tslib "^1.9.3" -"@sentry/hub@7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.14.0.tgz#cf8e8a345c63a75ea1f3a2d7169a47ab73ff9603" - integrity sha512-O+pxsipeiURC6Mxuivz1pX3yHlkQCI2yjP38bISxUZv1NIijHuxiDmgqrrcCJltiIfyY2+f9LAezKVCAXnPFuw== +"@sentry/hub@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.14.1.tgz#f24d8ac65ff39dab6dbaa859c06a0651359f20d2" + integrity sha512-BWh5jUvGmzCsJtYy6EX3qA6gTOxwGhA64IEXHbzwIAnBoG+VWao3addaL77AGR9pIgAqn6ssfkX665OZa+GPGw== dependencies: - "@sentry/types" "7.14.0" - "@sentry/utils" "7.14.0" + "@sentry/types" "7.14.1" + "@sentry/utils" "7.14.1" tslib "^1.9.3" -"@sentry/node@7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.14.0.tgz#51f69a0a75388100cc06b332cffd995009ca558f" - integrity sha512-dI5kluEkvnKlW2dMYQGM9rAYmL+dVdaZPSnqnP2DcuW3taquCoBX1POXokD/GS6Qdv/eNeMu+rDxEGYTTkBXBg== +"@sentry/node@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.14.1.tgz#96e0dcafa7b8f2471c9b67ccb4c4a37933914502" + integrity sha512-A+FSEjC0BKwSLaEhB3OW6ipPCajAb7aZvHEk7bzHnkPI/ADPzqSZ41C2pr7+F5DZ8FOdE6//fqXAQi+Cn0FGpg== dependencies: - "@sentry/core" "7.14.0" - "@sentry/hub" "7.14.0" - "@sentry/types" "7.14.0" - "@sentry/utils" "7.14.0" + "@sentry/core" "7.14.1" + "@sentry/hub" "7.14.1" + "@sentry/types" "7.14.1" + "@sentry/utils" "7.14.1" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/types@7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.14.0.tgz#8069e58a0104190e328647963036c7597e2e5fa8" - integrity sha512-9iFZS9Hr5hAoL+M9oUH2dY9burOaQh+CHGH66fortuTp++YDWKdbPEeKcz8hRJaUyBBn53rdxiBmAyHsrlE6KA== +"@sentry/types@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.14.1.tgz#8d46c41595b2730f3426d54d1d0a9376b8739e33" + integrity sha512-PxAfrIwBci6ouHOuRsfVq1B16i92nQNV5IvlqfJIYciazVhDWJvbF52caJAPOFS1WnuQZ4zqBDMYvtnwld3JCA== -"@sentry/utils@7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.14.0.tgz#58dab9e53ad662231c3289842edbc7f885ebc7cb" - integrity sha512-q9em4ZBcaUk7J1WULiltZVEcbyCE0wwAIjqRaoNmHVe4FeK++uAPo2ULZM1kQgN8syZnQ1jcfLktIKkWfnE2cg== +"@sentry/utils@7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.14.1.tgz#95f408853129197fce5841ed0c9b2ed87400e183" + integrity sha512-CErQFbJMuhnHFKGkfIazQj5ETKoS7hG8PkoQEBt19F5QMh4+sbrJgnpIrIW8fVGtp0qKWKuIxQwD3b+1cFBozA== dependencies: - "@sentry/types" "7.14.0" + "@sentry/types" "7.14.1" tslib "^1.9.3" "@sinclair/typebox@^0.24.1": From 221050735af52601830c0f5f0e99271c1b435f1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 22:33:15 +0000 Subject: [PATCH 28/30] chore(deps): bump rand-user-agent from 1.0.83 to 1.0.84 (#10988) Bumps [rand-user-agent](https://github.com/WebScrapingAPI/rand-user-agent) from 1.0.83 to 1.0.84. - [Release notes](https://github.com/WebScrapingAPI/rand-user-agent/releases) - [Commits](https://github.com/WebScrapingAPI/rand-user-agent/commits) --- updated-dependencies: - dependency-name: rand-user-agent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 83cfe57ea3..0e741da089 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "puppeteer-extra": "3.3.4", "puppeteer-extra-plugin-stealth": "2.11.1", "query-string": "7.1.1", - "rand-user-agent": "1.0.83", + "rand-user-agent": "1.0.84", "re2": "1.17.7", "require-all": "3.0.0", "rss-parser": "3.12.0", diff --git a/yarn.lock b/yarn.lock index 3402641c8b..6d6e867fbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11612,10 +11612,10 @@ ramda@^0.26.1: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== -rand-user-agent@1.0.83: - version "1.0.83" - resolved "https://registry.yarnpkg.com/rand-user-agent/-/rand-user-agent-1.0.83.tgz#645afa4ab189ba129130e13dfdfaf947639eb271" - integrity sha512-HmNgyAXWArb+6jNpVq1HTDl8atbFY+J2YwnWBd4HZZDMoA5NcywVi6y0Tha29mbouSpyEkwWBUNLrrkQY7fzPw== +rand-user-agent@1.0.84: + version "1.0.84" + resolved "https://registry.yarnpkg.com/rand-user-agent/-/rand-user-agent-1.0.84.tgz#f1bf31374185ce61fd870e4c39ae09a69cf35942" + integrity sha512-OvK4PozS1C6Q1mn57E+F0umGqxOtDm7xhDc9WDnUOMuiVbCgTiUQlj79AJNHbLoxJW9AhF5pV6gHFYprwunfEg== randexp@0.4.6: version "0.4.6" From 01fb2aa58b082fd84c1162350939d5e51d79715d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 06:36:10 +0800 Subject: [PATCH 29/30] chore(deps): bump proxy-chain from 2.0.7 to 2.1.0 (#10990) Bumps [proxy-chain](https://github.com/apify/proxy-chain) from 2.0.7 to 2.1.0. - [Release notes](https://github.com/apify/proxy-chain/releases) - [Changelog](https://github.com/apify/proxy-chain/blob/master/CHANGELOG.md) - [Commits](https://github.com/apify/proxy-chain/compare/v2.0.7...v2.1.0) --- updated-dependencies: - dependency-name: proxy-chain dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0e741da089..b2027babb0 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "parse-torrent": "9.1.5", "pidusage": "3.0.0", "plist": "3.0.6", - "proxy-chain": "2.0.7", + "proxy-chain": "2.1.0", "puppeteer": "18.0.5", "puppeteer-extra": "3.3.4", "puppeteer-extra-plugin-stealth": "2.11.1", diff --git a/yarn.lock b/yarn.lock index 6d6e867fbc..514abaefbb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11354,10 +11354,10 @@ proxy-agent@^4.0.0: proxy-from-env "^1.0.0" socks-proxy-agent "^5.0.0" -proxy-chain@2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-chain/-/proxy-chain-2.0.7.tgz#ce368e7783ddd204231b284874323af32270cbe7" - integrity sha512-JYoszbLmEWkjltnzpe7XImWqTLBs1mIwYtObznqm3DF8z1P33iLvZKHrv2Guh+FwRcmjxOiJUzjrjpOMGvEk2Q== +proxy-chain@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/proxy-chain/-/proxy-chain-2.1.0.tgz#aa887029505656c9ff2899197b97f3e6f951e922" + integrity sha512-i5JC8YGYpW27eQf4dFoV8N5NsEfqmgG2SOG3csa3lcdCCev4J8LH5UaKej1kXXtDkhaREXKivqw0LOLY21BiEQ== dependencies: tslib "^2.3.1" From 79e0237f74bfa4a51d19a65c6fb5b809fa31c483 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 23:37:33 +0000 Subject: [PATCH 30/30] chore(deps-dev): bump meilisearch from 0.27.0 to 0.28.0 (#10992) Bumps [meilisearch](https://github.com/meilisearch/meilisearch-js) from 0.27.0 to 0.28.0. - [Release notes](https://github.com/meilisearch/meilisearch-js/releases) - [Commits](https://github.com/meilisearch/meilisearch-js/compare/v0.27.0...v0.28.0) --- updated-dependencies: - dependency-name: meilisearch dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b2027babb0..d1ff5b1525 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "eslint-plugin-yml": "1.2.0", "fs-extra": "10.1.0", "jest": "29.1.2", - "meilisearch": "0.27.0", + "meilisearch": "0.28.0", "mockdate": "3.0.5", "nock": "13.2.9", "nodemon": "2.0.20", diff --git a/yarn.lock b/yarn.lock index 514abaefbb..974ddd72e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9479,7 +9479,14 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -meilisearch@0.27.0, meilisearch@^0.27.0: +meilisearch@0.28.0: + version "0.28.0" + resolved "https://registry.yarnpkg.com/meilisearch/-/meilisearch-0.28.0.tgz#650f08a56ef0a989a41d13233f7a744cfa7f54df" + integrity sha512-zC50xLyPWBtfAIZiFTSJyYJp/a5bO+dSSigBKUEoShFkuv9+/KC4J3T3ZejNVHXG2DU0ohOMf8TZ3HAHXNd3EA== + dependencies: + cross-fetch "^3.1.5" + +meilisearch@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/meilisearch/-/meilisearch-0.27.0.tgz#8bd57ddb77b975f93e054cb977b951c488ece297" integrity sha512-kZOZFIuSO7c6xRf+Y2/9/h6A9pl0sCl/G44X4KuaSwxGbruOZPhmxbeVEgLHBv4pUFvQ56rNVTA/2d/5GCU1YA==