feat(input): use RAG/운곡교P1입력.xlsx as the P1 input
- public/samples/운곡교P1입력.xlsx is a byte copy of RAG/운곡교P1입력.xlsx - loadP1 and the sample loader read the three-sheet input - spec workbook (intent.PR) stays for the single-sheet regression tests - test: input file has sheets 교각 · IP · 받침 and parses to P1 with no issues Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
def1e1b9fc
commit
68e56d1037
4 files changed
+23
-6
No files matched your search
Binary file not shown.
+2
-2
@@ -492,7 +492,7 @@ function openImport(): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function fetchSample(): Promise<Uint8Array> {
|
async function fetchSample(): Promise<Uint8Array> {
|
||||||
const res = await fetch(new URL('samples/P1.xlsx', document.baseURI));
|
const res = await fetch(new URL('samples/운곡교P1입력.xlsx', document.baseURI));
|
||||||
if (!res.ok) throw new Error(`샘플 응답 ${res.status}`);
|
if (!res.ok) throw new Error(`샘플 응답 ${res.status}`);
|
||||||
return new Uint8Array(await res.arrayBuffer());
|
return new Uint8Array(await res.arrayBuffer());
|
||||||
}
|
}
|
||||||
@@ -535,7 +535,7 @@ $<HTMLInputElement>('file').addEventListener('change', async (ev) => {
|
|||||||
});
|
});
|
||||||
$<HTMLButtonElement>('pick-sample').addEventListener('click', async () => {
|
$<HTMLButtonElement>('pick-sample').addEventListener('click', async () => {
|
||||||
try {
|
try {
|
||||||
loadBytes(await fetchSample(), '샘플 P1 (Pier ui_xxx.xlsx)');
|
loadBytes(await fetchSample(), '샘플 P1 (운곡교P1입력.xlsx)');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setStatus(`샘플을 불러오지 못했습니다: ${(err as Error).message}`);
|
setStatus(`샘플을 불러오지 못했습니다: ${(err as Error).message}`);
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-3
@@ -4,14 +4,21 @@ import * as XLSX from 'xlsx';
|
|||||||
import { parseWorkbook } from '../src/core/parseWorkbook';
|
import { parseWorkbook } from '../src/core/parseWorkbook';
|
||||||
import type { PierInput } from '../src/core/types';
|
import type { PierInput } from '../src/core/types';
|
||||||
|
|
||||||
const P1_PATH = fileURLToPath(new URL('../public/samples/P1.xlsx', import.meta.url));
|
/** Spec workbook (RAG/Pier ui_xxx.xlsx, sheet intent.PR, all tables on one sheet). Used by single-sheet tests. */
|
||||||
|
const SPEC_PATH = fileURLToPath(new URL('../public/samples/P1.xlsx', import.meta.url));
|
||||||
|
/** User input (RAG/운곡교P1입력.xlsx, three sheets 교각 · IP · 받침). This is the P1 input used by the app and tests. */
|
||||||
|
const INPUT_PATH = fileURLToPath(new URL('../public/samples/운곡교P1입력.xlsx', import.meta.url));
|
||||||
|
|
||||||
export function loadWorkbook(path: string = P1_PATH): XLSX.WorkBook {
|
export function loadWorkbook(path: string = SPEC_PATH): XLSX.WorkBook {
|
||||||
return XLSX.read(readFileSync(path), { type: 'buffer' });
|
return XLSX.read(readFileSync(path), { type: 'buffer' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function loadInputWorkbook(): XLSX.WorkBook {
|
||||||
|
return loadWorkbook(INPUT_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
export function loadP1(): PierInput {
|
export function loadP1(): PierInput {
|
||||||
const { piers, issues } = parseWorkbook(loadWorkbook());
|
const { piers, issues } = parseWorkbook(loadInputWorkbook());
|
||||||
if (issues.length) throw new Error(`P1 parse issues: ${JSON.stringify(issues)}`);
|
if (issues.length) throw new Error(`P1 parse issues: ${JSON.stringify(issues)}`);
|
||||||
const p1 = piers.find((p) => p.name === 'P1');
|
const p1 = piers.find((p) => p.name === 'P1');
|
||||||
if (!p1) throw new Error('P1 not found');
|
if (!p1) throw new Error('P1 not found');
|
||||||
|
|||||||
+11
-1
@@ -1,7 +1,7 @@
|
|||||||
import * as XLSX from 'xlsx';
|
import * as XLSX from 'xlsx';
|
||||||
import { describe, expect, it } from 'vitest';
|
import { describe, expect, it } from 'vitest';
|
||||||
import { parseWorkbook } from '../src/core/parseWorkbook';
|
import { parseWorkbook } from '../src/core/parseWorkbook';
|
||||||
import { loadP1, loadWorkbook } from './helpers';
|
import { loadInputWorkbook, loadP1, loadWorkbook } from './helpers';
|
||||||
|
|
||||||
describe('parseWorkbook (P1 sheet intent.PR)', () => {
|
describe('parseWorkbook (P1 sheet intent.PR)', () => {
|
||||||
it('finds exactly one pier P1 with the input values of the sheet', () => {
|
it('finds exactly one pier P1 with the input values of the sheet', () => {
|
||||||
@@ -92,3 +92,13 @@ describe('three-sheet input (교각 · IP · 받침 on separate sheets, joined b
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('user input file (RAG/운곡교P1입력.xlsx)', () => {
|
||||||
|
it('has the three sheets 교각 · IP · 받침 and parses to one pier, P1, with no issues', () => {
|
||||||
|
const wb = loadInputWorkbook();
|
||||||
|
expect(wb.SheetNames).toEqual(['교각', 'IP', '받침']);
|
||||||
|
const { piers, issues } = parseWorkbook(wb);
|
||||||
|
expect(issues).toEqual([]);
|
||||||
|
expect(piers.map((p) => [p.name, p.sheet])).toEqual([['P1', '교각']]);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in new issue
Block a user