{"version":3,"file":"parse.cjs","names":["getYearMonth","getHeaders","getHeaderIndexes","extractWorktime"],"sources":["../src/parse.ts"],"sourcesContent":["import { type HTMLInputElement, parseHTML } from \"linkedom\";\nimport type { WorktimeRow } from \"./common.js\";\nimport { extractWorktime, getHeaderIndexes, getHeaders, getYearMonth } from \"./common.js\";\nexport { toCSVString, toWideArray } from \"./common.js\";\nexport type { WorktimeRow };\n\nfunction getValueNode(el: Element | null): string {\n\treturn (el as unknown as HTMLInputElement | null)?.value || \"\";\n}\n\n/**\n * 指定されたDocumentから、IDが \"Grid1ContainerTbl\" のテーブル要素内にある全ての行(tr要素)を取得する\n * @param document - 解析対象のDocumentオブジェクト\n * @returns テーブル行要素(HTMLTableRowElement)の配列。テーブルが存在しない場合は空の配列を返す\n */\nfunction getTableRowsNode(document: Document): HTMLTableRowElement[] {\n\tconst table = document.getElementById(\"Grid1ContainerTbl\");\n\tif (!table) return [];\n\treturn Array.from(table.querySelectorAll(\"tr\"));\n}\n\n/**\n * 工数管理HTMLのDocumentから勤務時間データを抽出し、`WorktimeRow`の配列として返す\n * @param doc - 勤務時間データを含むDocumentオブジェクト\n * @returns 抽出された勤務時間データの配列。テーブルが見つからない場合やデータが無い場合は空配列を返す\n */\nexport function parseWorktimeDomToData(doc: Document): WorktimeRow[] {\n\tconst { year, month } = getYearMonth(doc, getValueNode);\n\tconst rows = getTableRowsNode(doc);\n\tif (rows.length < 2 || !rows[0]) return [];\n\tconst headers = getHeaders(rows[0] as Element);\n\tconst indexes = getHeaderIndexes(headers);\n\tconst result: WorktimeRow[] = [];\n\tlet currentDate = \"\";\n\tfor (let i = 1; i < rows.length; ++i) {\n\t\tconst rowElement = rows[i];\n\t\tif (!rowElement) continue;\n\t\tconst cells = Array.from(rowElement.querySelectorAll(\"td\"));\n\t\tif (cells.length < headers.length) continue;\n\t\tconst row = extractWorktime(cells, indexes, year, month, currentDate);\n\t\tif (!row) continue;\n\t\tcurrentDate = row.date;\n\t\tresult.push(row);\n\t}\n\treturn result;\n}\n\n/**\n * 指定されたHTML文字列から勤務時間データを抽出し、`WorktimeRow`の配列として返す\n * @param html - 勤務時間データを含むHTML文字列\n * @returns 抽出された勤務時間データの配列。テーブルが見つからない場合やデータが無い場合は空配列を返す\n */\nexport function parseWorktimeHtmlToData(html: string): WorktimeRow[] {\n\tconst { document } = parseHTML(html);\n\treturn parseWorktimeDomToData(document);\n}\n"],"mappings":";;;;;;;;;;;AAMA,SAAS,aAAa,IAA4B;AACjD,QAAQ,IAA2C,SAAS;;;;;;;AAQ7D,SAAS,iBAAiB,UAA2C;CACpE,MAAM,QAAQ,SAAS,eAAe,oBAAoB;AAC1D,KAAI,CAAC,MAAO,QAAO,EAAE;AACrB,QAAO,MAAM,KAAK,MAAM,iBAAiB,KAAK,CAAC;;;;;;;AAQhD,SAAgB,uBAAuB,KAA8B;CACpE,MAAM,EAAE,MAAM,UAAUA,4BAAa,KAAK,aAAa;CACvD,MAAM,OAAO,iBAAiB,IAAI;AAClC,KAAI,KAAK,SAAS,KAAK,CAAC,KAAK,GAAI,QAAO,EAAE;CAC1C,MAAM,UAAUC,0BAAW,KAAK,GAAc;CAC9C,MAAM,UAAUC,gCAAiB,QAAQ;CACzC,MAAM,SAAwB,EAAE;CAChC,IAAI,cAAc;AAClB,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;EACrC,MAAM,aAAa,KAAK;AACxB,MAAI,CAAC,WAAY;EACjB,MAAM,QAAQ,MAAM,KAAK,WAAW,iBAAiB,KAAK,CAAC;AAC3D,MAAI,MAAM,SAAS,QAAQ,OAAQ;EACnC,MAAM,MAAMC,+BAAgB,OAAO,SAAS,MAAM,OAAO,YAAY;AACrE,MAAI,CAAC,IAAK;AACV,gBAAc,IAAI;AAClB,SAAO,KAAK,IAAI;;AAEjB,QAAO;;;;;;;AAQR,SAAgB,wBAAwB,MAA6B;CACpE,MAAM,EAAE,qCAAuB,KAAK;AACpC,QAAO,uBAAuB,SAAS"}