From 448b565835f734dafaca9279d185a5f5e237c17b Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Wed, 25 Mar 2026 10:41:24 +0100 Subject: [PATCH] perf: Do not read worksheet twice --- scrape/parse.ts | 9 +++++++-- scrape/parse/v1_v2.ts | 6 ++---- scrape/parse/v3.ts | 8 ++------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/scrape/parse.ts b/scrape/parse.ts index 97bb810..6f0394a 100644 --- a/scrape/parse.ts +++ b/scrape/parse.ts @@ -12,10 +12,15 @@ * GNU General Public License for more details. */ +import ExcelJS from "exceljs" + import parseV1V2 from "./parse/v1_v2.js"; import parseV3 from "./parse/v3.js"; export default async function parseThisShit(downloadedFilePath: string) { - await parseV1V2(downloadedFilePath); - await parseV3(downloadedFilePath); + const workbook = new ExcelJS.Workbook(); + await workbook.xlsx.readFile(downloadedFilePath); + + await parseV1V2(workbook); + await parseV3(workbook, downloadedFilePath); } diff --git a/scrape/parse/v1_v2.ts b/scrape/parse/v1_v2.ts index db4ea1c..344931c 100644 --- a/scrape/parse/v1_v2.ts +++ b/scrape/parse/v1_v2.ts @@ -12,7 +12,7 @@ * GNU General Public License for more details. */ -import ExcelJS, { Worksheet } from "exceljs" +import { Workbook, Worksheet } from "exceljs" import fs from "fs" import parseAbsence, { AbsenceResult } from "../utils/parseAbsence.js" import parseTeachers from "../utils/parseTeachers.js" @@ -27,9 +27,7 @@ interface ScheduleDay { ABSENCE?: AbsenceResult[]; } -export default async function parseV1V2(downloadedFilePath: string) { - const workbook = new ExcelJS.Workbook(); - await workbook.xlsx.readFile(downloadedFilePath); +export default async function parseV1V2(workbook: Workbook) { const teacherMap = await parseTeachers(); const dateRegex = /^(pondělí|úterý|středa|čtvrtek|pátek|po|út|ut|st|čt|ct|pa|pá)\s+(\d{1,2})\.\s*(\d{1,2})\.\s*(\d{4}|\d{2})/i; diff --git a/scrape/parse/v3.ts b/scrape/parse/v3.ts index 479bba5..8e84608 100644 --- a/scrape/parse/v3.ts +++ b/scrape/parse/v3.ts @@ -15,7 +15,7 @@ import fs from "fs"; import parseAbsence from "../utils/parseAbsence.js" import parseTeachers from "../utils/parseTeachers.js" -import ExcelJS, { Worksheet, Cell, Row } from "exceljs" +import ExcelJS, { Worksheet, Cell, Row, Workbook } from "exceljs" import JSZip from "jszip"; import { parseStringPromise } from "xml2js"; @@ -42,8 +42,6 @@ async function getThemeColors(filePath: string): Promise { const data = fs.readFileSync(filePath); const zip = await JSZip.loadAsync(data); - // list all files for debug - const themeFile = zip.file("xl/theme/theme1.xml"); if (!themeFile) { return null; @@ -118,9 +116,7 @@ function resolveCellColor(cell: Cell, themeColors: ThemeColors | null) { return null; } -export default async function parseV3(downloadedFilePath: string) { - const workbook = new ExcelJS.Workbook(); - await workbook.xlsx.readFile(downloadedFilePath); +export default async function parseV3(workbook: Workbook, downloadedFilePath: string) { const themeColors = await getThemeColors(downloadedFilePath); const teacherMap = await parseTeachers();