diff --git a/.nvmrc b/.nvmrc index 2efc7e11..20625513 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.11.1 \ No newline at end of file +v21.7.3 \ No newline at end of file diff --git a/package.json b/package.json index ab800eee..604567f9 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "prepare": "husky" }, "engines": { - "node": "20.11.1" + "node": "21.7.3" }, "lint-staged": { "*.{ts,tsx,js,jsx}": "eslint --fix --cache" diff --git a/src/lib/data/Chapters.ts b/src/lib/data/Chapters.ts index 565d6cce..e6bb01d5 100644 --- a/src/lib/data/Chapters.ts +++ b/src/lib/data/Chapters.ts @@ -300,18 +300,17 @@ export class Chapters { } static removeDuplicates(currentChapter: T, chapters: T[]): T[] { - const chapterNumberToChapters = new Map(); - chapters.forEach((chapter) => { - const duplicateChapters = chapterNumberToChapters.get(chapter.chapterNumber) ?? []; - chapterNumberToChapters.set(chapter.chapterNumber, [...duplicateChapters, chapter]); - }); + const chapterNumberToChapters = Object.groupBy(chapters, ({ chapterNumber }) => chapterNumber); - return [...chapterNumberToChapters.values()].map( - (groupedChapters) => - groupedChapters.find((chapter) => chapter.id === currentChapter.id) ?? - groupedChapters.findLast((chapter) => chapter.scanlator === currentChapter.scanlator) ?? - groupedChapters.slice(-1)[0], - ); + return Object.values(chapterNumberToChapters) + .map( + (groupedChapters) => + // the result of groupBy can't result in undefined values + groupedChapters!.find((chapter) => chapter.id === currentChapter.id) ?? + groupedChapters!.findLast((chapter) => chapter.scanlator === currentChapter.scanlator) ?? + groupedChapters!.slice(-1)[0], + ) + .sort((a, b) => b.chapterNumber - a.chapterNumber); } static getNextChapter( diff --git a/vite.config.ts b/vite.config.ts index ab717004..ad69c208 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -41,6 +41,7 @@ export default defineConfig(() => ({ 'es/array/to-sorted', 'es/array/find-last', 'es/array/find-last-index', + 'es/object/group-by', ], }), ],