diff --git a/docs/cli.md b/docs/cli.md index 9d25110..41abac8 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -26,6 +26,7 @@ $ random-bunny Archived = false Author = Rabbit_Owner Downvotes = 0 +Gallery = https://i.redd.it/sfz0srdrimjc1.png, https://i.redd.it/sfz0srdrimjc1.png Hidden = false Permalink = /r/Rabbits/comments/1av1rg9/cute_baby_bun/ Subreddit = Rabbits @@ -35,6 +36,8 @@ Upvotes = 211 Url = https://i.redd.it/sfz0srdrimjc1.png ``` +- The `Gallery` field is only shown when there is more than 1 image returned, which then the `Url` field is the first image of that list. + ## Help The command also includes a help option in case you are stuck. @@ -72,9 +75,11 @@ $ random-bunny --json $ randon-bunny -j -{"Archived":false,"Author":"Rabbit_Owner","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1av1rg9/cute_baby_bun/","Subreddit":"Rabbits","SubredditSubscribers":486085,"Title":"Cute baby bun","Ups":210,"Url":"https://i.redd.it/sfz0srdrimjc1.png"} +{"Archived":false,"Author":"Rabbit_Owner","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1av1rg9/cute_baby_bun/","Subreddit":"Rabbits","SubredditSubscribers":486085,"Title":"Cute baby bun","Ups":210,"Url":"https://i.redd.it/sfz0srdrimjc1.png","Gallery":["https://i.redd.it/sfz0srdrimjc1.png"]} ``` +- The `Url` field is the first image of the `Gallery` array + ## Sort You can also choose the sorting option which reddit will use to return the available posts to randomise from. diff --git a/readme.md b/readme.md index e7ba49c..570625a 100644 --- a/readme.md +++ b/readme.md @@ -39,6 +39,7 @@ The json string which gets returned consists of: - archived - author - downs +- gallery - hidden - permalink - subreddit diff --git a/src/contracts/IRedditResult.ts b/src/contracts/IRedditResult.ts index 13fef75..2c78e78 100644 --- a/src/contracts/IRedditResult.ts +++ b/src/contracts/IRedditResult.ts @@ -2,11 +2,12 @@ export default interface IRedditResult { Archived: boolean, Author: string, Downs: number, + Gallery: string[], Hidden: boolean, Permalink: string, Subreddit: string, SubredditSubscribers: number, Title: string, Ups: number, - Url: string + Url: string, } \ No newline at end of file diff --git a/src/helpers/imageHelper.ts b/src/helpers/imageHelper.ts index 3da0fc9..5c096ea 100644 --- a/src/helpers/imageHelper.ts +++ b/src/helpers/imageHelper.ts @@ -2,17 +2,19 @@ import fetch from "got-cjs"; import * as htmlparser from "htmlparser2"; export default class ImageHelper { - public static async FetchImageFromRedditGallery(url: string): Promise { + public static async FetchImageFromRedditGallery(url: string): Promise { const fetched = await fetch(url); if (!fetched || fetched.errored || fetched.statusCode != 200) { - return undefined; + return []; } const dom = htmlparser.parseDocument(fetched.body); - const img = htmlparser.DomUtils.findOne((x => x.tagName == "img" && x.attributes.find(y => y.value.includes("https://preview.redd.it")) != null), dom.children, true); + const img = htmlparser.DomUtils.findAll((x => x.tagName == "img" && x.attributes.find(y => y.value.includes("https://preview.redd.it")) != null), dom.children); - const imgSrc = img?.attributes.find(x => x.name == "src")?.value; + const imgSrc = img + .flatMap(x => x.attributes.find(x => x.name == "src")?.value) + .filter(x => x != undefined); return imgSrc; } diff --git a/src/helpers/outputHelper.ts b/src/helpers/outputHelper.ts index 808634d..0cee9d6 100644 --- a/src/helpers/outputHelper.ts +++ b/src/helpers/outputHelper.ts @@ -14,7 +14,13 @@ export default class OutputHelper { outputLines.push(`Archived = ${result.Archived}`); outputLines.push(`Author = ${result.Author}`); outputLines.push(`Downvotes = ${result.Downs}`); + + if (result.Gallery.length > 1) { + outputLines.push(`Gallery = ${result.Gallery.join(", ")}`); + } + outputLines.push(`Hidden = ${result.Hidden}`); + outputLines.push(`Permalink = ${result.Permalink}`); outputLines.push(`Subreddit = ${result.Subreddit}`); outputLines.push(`Subreddit Subscribers = ${result.SubredditSubscribers}`); @@ -22,6 +28,7 @@ export default class OutputHelper { outputLines.push(`Upvotes = ${result.Ups}`); outputLines.push(`Url = ${result.Url}`); + if (options.queryMetadata != null) { outputLines.push(`Query.Subreddit = ${response.Query.subreddit}`); outputLines.push(`Query.Sort By = ${response.Query.sortBy}`); diff --git a/src/index.ts b/src/index.ts index 056fe1f..b9ed5f9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -93,6 +93,7 @@ export default async function randomBunny(subreddit: string, sortBy: "new" | "ho const randomData = randomSelect.data; let url: string; + let gallery: string[]; if (randomData.url.includes("/gallery")) { const galleryImage = await ImageHelper.FetchImageFromRedditGallery(randomData.url); @@ -112,9 +113,11 @@ export default async function randomBunny(subreddit: string, sortBy: "new" | "ho } } - url = galleryImage; + url = galleryImage[0]; + gallery = galleryImage; } else { url = randomData.url; + gallery = [randomData.url]; } const redditResult: IRedditResult = { @@ -128,6 +131,7 @@ export default async function randomBunny(subreddit: string, sortBy: "new" | "ho Title: randomData['title'], Ups: randomData['ups'], Url: url, + Gallery: gallery, }; return { diff --git a/tests/helpers/__snapshots__/outputHelper.test.ts.snap b/tests/helpers/__snapshots__/outputHelper.test.ts.snap index 39e952e..73d61c6 100644 --- a/tests/helpers/__snapshots__/outputHelper.test.ts.snap +++ b/tests/helpers/__snapshots__/outputHelper.test.ts.snap @@ -13,7 +13,7 @@ Upvotes = 17 Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d" `; -exports[`GenerateOutput GIVEN options.json is true, EXPECT output to be returned as JSON 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"}"`; +exports[`GenerateOutput GIVEN options.json is true, EXPECT output to be returned as JSON 1`] = `"{"Archived":false,"Author":"author","Downs":0,"Hidden":false,"Permalink":"/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/","Subreddit":"Rabbits","SubredditSubscribers":654751,"Title":"This is my Ms Bear!","Ups":17,"Url":"https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d","Gallery":["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"]}"`; exports[`GenerateOutput GIVEN options.queryMetadata is supplied, EXPECT query metadata to be added 1`] = ` "Archived = false @@ -30,3 +30,17 @@ Query.Subreddit = rabbits Query.Sort By = hot Query.Limit = 100" `; + +exports[`GenerateOutput GIVEN the Gallery input has more than 1 item, EXPECT Gallery line to be added 1`] = ` +"Archived = false +Author = author +Downvotes = 0 +Gallery = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d, https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d +Hidden = false +Permalink = /r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/ +Subreddit = Rabbits +Subreddit Subscribers = 654751 +Title = This is my Ms Bear! +Upvotes = 17 +Url = https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d" +`; diff --git a/tests/helpers/imageHelper.test.ts b/tests/helpers/imageHelper.test.ts index 3c6f44e..3eeb789 100644 --- a/tests/helpers/imageHelper.test.ts +++ b/tests/helpers/imageHelper.test.ts @@ -17,18 +17,19 @@ describe("FetchImageFromRedditGallery", () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith("https://redd.it/gallery/image"); - expect(result).toBe("https://preview.redd.it/image.png"); + expect(result.length).toBe(1); + expect(result[0]).toBe("https://preview.redd.it/image.png"); }); - test("GIVEN fetch is unable to return data, EXPECT undefined returned", async () => { + test("GIVEN fetch is unable to return data, EXPECT empty array returned", async () => { fetchMock.mockResolvedValue(null); const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result).toBeUndefined(); + expect(result.length).toBe(0); }); - test("GIVEN fetch is an error, EXPECT undefined returned", async () => { + test("GIVEN fetch is an error, EXPECT empty array returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: "Error", @@ -37,10 +38,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result).toBeUndefined(); + expect(result.length).toBe(0); }); - test("GIVEN fetch is not status code of 200, EXPECT undefined returned", async () => { + test("GIVEN fetch is not status code of 200, EXPECT empty array returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -49,10 +50,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result).toBeUndefined(); + expect(result.length).toBe(0); }); - test("GIVEN image tag is not found, EXPECT undefined returned", async () => { + test("GIVEN image tag is not found, EXPECT empty array returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -61,10 +62,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result).toBeUndefined(); + expect(result.length).toBe(0); }); - test("GIVEN image source attribute is not found, EXPECT undefined returned", async () => { + test("GIVEN image source attribute is not found, EXPECT empty array returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -73,10 +74,10 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result).toBeUndefined(); + expect(result.length).toBe(0); }); - test("GIVEN image source attribute is not found that is a preview.redd.it url, EXPECT undefined returned", async () => { + test("GIVEN image source attribute is not found that is a preview.redd.it url, EXPECT empty array returned", async () => { fetchMock.mockResolvedValue({ body: "", errored: undefined, @@ -85,6 +86,6 @@ describe("FetchImageFromRedditGallery", () => { const result = await ImageHelper.FetchImageFromRedditGallery("https://redd.it/gallery/image"); - expect(result).toBeUndefined(); + expect(result.length).toBe(0); }); }); \ No newline at end of file diff --git a/tests/helpers/outputHelper.test.ts b/tests/helpers/outputHelper.test.ts index 5e90dc8..1581964 100644 --- a/tests/helpers/outputHelper.test.ts +++ b/tests/helpers/outputHelper.test.ts @@ -23,6 +23,7 @@ describe("GenerateOutput", () => { Title: "This is my Ms Bear!", Ups: 17, Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", + Gallery: ["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"], }, } as IReturnResult; @@ -55,6 +56,7 @@ describe("GenerateOutput", () => { Title: "This is my Ms Bear!", Ups: 17, Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", + Gallery: ["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"], }, } as IReturnResult; @@ -89,6 +91,7 @@ describe("GenerateOutput", () => { Title: "This is my Ms Bear!", Ups: 17, Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", + Gallery: ["https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d"], }, } as IReturnResult; @@ -102,4 +105,40 @@ describe("GenerateOutput", () => { // Assert expect(result).toMatchSnapshot(); }); + + test("GIVEN the Gallery input has more than 1 item, EXPECT Gallery line to be added", () => { + // Arrange + const response = { + IsSuccess: true, + Query: { + subreddit: "rabbits", + sortBy: "hot", + limit: 100, + }, + Result: { + Archived: false, + Author: 'author', + Downs: 0, + Hidden: false, + Permalink: "/r/Rabbits/comments/1dj8pbt/this_is_my_ms_bear/", + Subreddit: "Rabbits", + SubredditSubscribers: 654751, + Title: "This is my Ms Bear!", + Ups: 17, + Url: "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", + Gallery: [ + "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d", + "https://preview.redd.it/d5yno653zf7d1.jpg?width=640&crop=smart&auto=webp&s=5064d1caec3c12ac2855eb57ff131d0b313d5e9d" + ], + }, + } as IReturnResult; + + const options = {} as ICliOptions; + + // Act + const result = OutputHelper.GenerateOutput(response, options); + + // Assert + expect(result).toMatchSnapshot(); + }); }); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1088016..7ce55d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -401,7 +401,12 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": +"@eslint-community/regexpp@^4.10.0": + version "4.11.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" + integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== + +"@eslint-community/regexpp@^4.11.0": version "4.11.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== @@ -430,11 +435,16 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.10.0", "@eslint/js@^9.8.0": +"@eslint/js@9.10.0": version "9.10.0" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.10.0.tgz#eaa3cb0baec497970bb29e43a153d0d5650143c6" integrity sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g== +"@eslint/js@^9.8.0": + version "9.13.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.13.0.tgz#c5f89bcd57eb54d5d4fa8b77693e9c28dc97e547" + integrity sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA== + "@eslint/object-schema@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.4.tgz#9e69f8bb4031e11df79e03db09f9dbbae1740843" @@ -908,9 +918,9 @@ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/node@*", "@types/node@^22.0.0": - version "22.5.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.5.tgz#52f939dd0f65fc552a4ad0b392f3c466cc5d7a44" - integrity sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA== + version "22.7.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.7.tgz#6cd9541c3dccb4f7e8b141b491443f4a1570e307" + integrity sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q== dependencies: undici-types "~6.19.2" @@ -959,15 +969,15 @@ ts-api-utils "^1.3.0" "@typescript-eslint/eslint-plugin@^8.0.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz#bf50e9c8dac6bdf15dd1b52ca29448550903558e" - integrity sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A== + version "8.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.10.0.tgz#9c8218ed62f9a322df10ded7c34990f014df44f2" + integrity sha512-phuB3hoP7FFKbRXxjl+DRlQDuJqhpOnm5MmtROXyWi3uS/Xg2ZXqiQfcG2BJHiN4QKyzdOJi3NEn/qTnjUlkmQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.2.0" - "@typescript-eslint/type-utils" "8.2.0" - "@typescript-eslint/utils" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/scope-manager" "8.10.0" + "@typescript-eslint/type-utils" "8.10.0" + "@typescript-eslint/utils" "8.10.0" + "@typescript-eslint/visitor-keys" "8.10.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" @@ -985,14 +995,14 @@ debug "^4.3.4" "@typescript-eslint/parser@^8.0.0": - version "8.10.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.10.0.tgz#3cbe7206f5e42835878a74a76da533549f977662" - integrity sha512-E24l90SxuJhytWJ0pTQydFT46Nk0Z+bsLKo/L8rtQSL93rQ6byd1V/QbDpHUTdLPOMsBCcYXZweADNCfOCmOAg== + version "8.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.11.0.tgz#2ad1481388dc1c937f50b2d138c9ca57cc6c5cce" + integrity sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg== dependencies: - "@typescript-eslint/scope-manager" "8.10.0" - "@typescript-eslint/types" "8.10.0" - "@typescript-eslint/typescript-estree" "8.10.0" - "@typescript-eslint/visitor-keys" "8.10.0" + "@typescript-eslint/scope-manager" "8.11.0" + "@typescript-eslint/types" "8.11.0" + "@typescript-eslint/typescript-estree" "8.11.0" + "@typescript-eslint/visitor-keys" "8.11.0" debug "^4.3.4" "@typescript-eslint/scope-manager@7.18.0": @@ -1011,13 +1021,13 @@ "@typescript-eslint/types" "8.10.0" "@typescript-eslint/visitor-keys" "8.10.0" -"@typescript-eslint/scope-manager@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz#4a4bd7e7df5522acc8795c3b6f21e8c41b951138" - integrity sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw== +"@typescript-eslint/scope-manager@8.11.0": + version "8.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz#9d399ce624118966732824878bc9a83593a30405" + integrity sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ== dependencies: - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/types" "8.11.0" + "@typescript-eslint/visitor-keys" "8.11.0" "@typescript-eslint/type-utils@7.18.0": version "7.18.0" @@ -1029,13 +1039,13 @@ debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/type-utils@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz#5cd7fef50f492e5a0f508bdd40678861a57c3549" - integrity sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w== +"@typescript-eslint/type-utils@8.10.0": + version "8.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.10.0.tgz#99f1d2e21f8c74703e7d9c4a67a87271eaf57597" + integrity sha512-PCpUOpyQSpxBn230yIcK+LeCQaXuxrgCm2Zk1S+PTIRJsEfU6nJ0TtwyH8pIwPK/vJoA+7TZtzyAJSGBz+s/dg== dependencies: - "@typescript-eslint/typescript-estree" "8.2.0" - "@typescript-eslint/utils" "8.2.0" + "@typescript-eslint/typescript-estree" "8.10.0" + "@typescript-eslint/utils" "8.10.0" debug "^4.3.4" ts-api-utils "^1.3.0" @@ -1049,10 +1059,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.10.0.tgz#eb29c4bc2ed23489348c297469c76d28c38fb618" integrity sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w== -"@typescript-eslint/types@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.2.0.tgz#dfe9895a2812f7c6bf7af863054c22a67060420c" - integrity sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ== +"@typescript-eslint/types@8.11.0": + version "8.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.11.0.tgz#7c766250502097f49bbc2e651132e6bf489e20b8" + integrity sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw== "@typescript-eslint/typescript-estree@7.18.0": version "7.18.0" @@ -1082,15 +1092,15 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz#fbdb93a1c7ac7f1f96ae2de4fc97cd64c60ae894" - integrity sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA== +"@typescript-eslint/typescript-estree@8.11.0": + version "8.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz#35fe5d3636fc5727c52429393415412e552e222b" + integrity sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg== dependencies: - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/types" "8.11.0" + "@typescript-eslint/visitor-keys" "8.11.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" @@ -1106,15 +1116,15 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/utils@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.2.0.tgz#02d442285925f28d520587185f295f932702e733" - integrity sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg== +"@typescript-eslint/utils@8.10.0": + version "8.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.10.0.tgz#d78d1ce3ea3d2a88a2593ebfb1c98490131d00bf" + integrity sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.2.0" - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/typescript-estree" "8.2.0" + "@typescript-eslint/scope-manager" "8.10.0" + "@typescript-eslint/types" "8.10.0" + "@typescript-eslint/typescript-estree" "8.10.0" "@typescript-eslint/visitor-keys@7.18.0": version "7.18.0" @@ -1132,12 +1142,12 @@ "@typescript-eslint/types" "8.10.0" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz#f6abb3b6508898a117175ddc11f9b9869cc96834" - integrity sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q== +"@typescript-eslint/visitor-keys@8.11.0": + version "8.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz#273de1cbffe63d9f9cd7dfc20b5a5af66310cb92" + integrity sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw== dependencies: - "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/types" "8.11.0" eslint-visitor-keys "^3.4.3" "@yao-pkg/pkg-fetch@3.5.10": @@ -2595,12 +2605,12 @@ ignore-walk@^6.0.4: dependencies: minimatch "^9.0.0" -ignore@^5.2.0: +ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -ignore@^5.2.4, ignore@^5.3.1: +ignore@^5.2.4: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==