From 4a6e0ffb3a7d752f7aa263f839a87e99dc91e492 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 27 Sep 2026 19:58:39 +0900 Subject: [PATCH] =?UTF-8?q?fix(B07):=20CAD=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=BF=8C=EB=A6=AC=20=EC=84=9C=EC=8B=9D=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=90=98=EB=8F=8C=EB=A6=BC(=EB=B0=A9=EA=B8=88=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B=EC=97=90=20=EB=94=B8=EB=A0=A4=20=EC=98=A8=20=EC=84=9C?= =?UTF-8?q?=EC=8B=9D=20=EC=82=AC=EA=B3=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 바로 앞 커밋에 뿌리 prettier 서식(큰따옴표·스페이스)이 실수로 같이 실려 옴 — 이 파일은 openwebcad 자기 서식(biome · tab · 홑따옴표)을 그대로 씀 · 논리는 그대로. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01K7JS47SacjPxZ718QsZKyr --- .../import-entities-from-json.ts | 168 +++++++++--------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/B07_DesignDetail/openwebcad/src/helpers/import-export-handlers/import-entities-from-json.ts b/B07_DesignDetail/openwebcad/src/helpers/import-export-handlers/import-entities-from-json.ts index f02d5cd2..6783c378 100644 --- a/B07_DesignDetail/openwebcad/src/helpers/import-export-handlers/import-entities-from-json.ts +++ b/B07_DesignDetail/openwebcad/src/helpers/import-export-handlers/import-entities-from-json.ts @@ -1,22 +1,22 @@ -import { compact } from "es-toolkit"; -import { ArcEntity, type ArcJsonData } from "../../entities/ArcEntity"; -import { CircleEntity, type CircleJsonData } from "../../entities/CircleEntity"; -import { type Entity, EntityName, type JsonEntity } from "../../entities/Entity"; -import { HatchEntity, type HatchJsonData } from "../../entities/HatchEntity"; -import { ImageEntity, type ImageJsonData } from "../../entities/ImageEntity.ts"; -import { LineEntity, type LineJsonData } from "../../entities/LineEntity"; -import { MeasurementEntity, type MeasurementJsonData } from "../../entities/MeasurementEntity.ts"; -import { PointEntity, type PointJsonData } from "../../entities/PointEntity"; -import { PolyLineEntity, type PolyLineJsonData } from "../../entities/PolyLineEntity.ts"; -import { RectangleEntity, type RectangleJsonData } from "../../entities/RectangleEntity"; -import { TableEntity, type TableJsonData } from "../../entities/TableEntity.ts"; -import { TextEntity, type TextJsonData } from "../../entities/TextEntity.ts"; -import { setActiveLayerId, setEntities, setLayers } from "../../state"; -import { getNewLayer } from "../get-new-layer.ts"; +import { compact } from 'es-toolkit'; +import { ArcEntity, type ArcJsonData } from '../../entities/ArcEntity'; +import { CircleEntity, type CircleJsonData } from '../../entities/CircleEntity'; +import { type Entity, EntityName, type JsonEntity } from '../../entities/Entity'; +import { HatchEntity, type HatchJsonData } from '../../entities/HatchEntity'; +import { ImageEntity, type ImageJsonData } from '../../entities/ImageEntity.ts'; +import { LineEntity, type LineJsonData } from '../../entities/LineEntity'; +import { MeasurementEntity, type MeasurementJsonData } from '../../entities/MeasurementEntity.ts'; +import { PointEntity, type PointJsonData } from '../../entities/PointEntity'; +import { PolyLineEntity, type PolyLineJsonData } from '../../entities/PolyLineEntity.ts'; +import { RectangleEntity, type RectangleJsonData } from '../../entities/RectangleEntity'; +import { TableEntity, type TableJsonData } from '../../entities/TableEntity.ts'; +import { TextEntity, type TextJsonData } from '../../entities/TextEntity.ts'; +import { setActiveLayerId, setEntities, setLayers } from '../../state'; +import { getNewLayer } from '../get-new-layer.ts'; import type { - JsonDrawingFileDeserialized, - JsonDrawingFileSerialized, -} from "./export-entities-to-json"; + JsonDrawingFileDeserialized, + JsonDrawingFileSerialized, +} from './export-entities-to-json'; /** * Open a file selection dialog to select *.json files @@ -25,83 +25,83 @@ import type { * Set the entities in the state */ export function importEntitiesFromJsonFile(file: File | null | undefined) { - return new Promise((resolve) => { - if (!file) return; + return new Promise((resolve) => { + if (!file) return; - const reader = new FileReader(); - reader.addEventListener("load", async () => { - const json = reader.result as string; - const file = await getEntitiesAndLayersFromJsonString(json); - setEntities(file.entities); - setLayers(file.layers); - setActiveLayerId(file.layers[0].id); - resolve(); - }); - reader.readAsText(file, "utf-8"); - }); + const reader = new FileReader(); + reader.addEventListener('load', async () => { + const json = reader.result as string; + const file = await getEntitiesAndLayersFromJsonString(json); + setEntities(file.entities); + setLayers(file.layers); + setActiveLayerId(file.layers[0].id); + resolve(); + }); + reader.readAsText(file, 'utf-8'); + }); } export async function getEntitiesAndLayersFromJsonObject( - data: JsonDrawingFileSerialized, + data: JsonDrawingFileSerialized ): Promise { - const entityPromises: Promise[] = compact( - data.entities.map((entity) => { - switch (entity.type) { - case EntityName.Arc: - return ArcEntity.fromJson(entity as JsonEntity); - case EntityName.Circle: - return CircleEntity.fromJson(entity as JsonEntity); - case EntityName.Line: - return LineEntity.fromJson(entity as JsonEntity); - case EntityName.Point: - return PointEntity.fromJson(entity as JsonEntity); - case EntityName.Rectangle: - return RectangleEntity.fromJson(entity as JsonEntity); - case EntityName.Text: - return TextEntity.fromJson(entity as JsonEntity); - case EntityName.Measurement: - return MeasurementEntity.fromJson(entity as JsonEntity); - case EntityName.Image: - return ImageEntity.fromJson(entity as JsonEntity); - case EntityName.PolyLine: - return PolyLineEntity.fromJson(entity as JsonEntity); - case EntityName.Hatch: - return HatchEntity.fromJson(entity as JsonEntity); - case EntityName.Table: - return TableEntity.fromJson(entity as JsonEntity); + const entityPromises: Promise[] = compact( + data.entities.map((entity) => { + switch (entity.type) { + case EntityName.Arc: + return ArcEntity.fromJson(entity as JsonEntity); + case EntityName.Circle: + return CircleEntity.fromJson(entity as JsonEntity); + case EntityName.Line: + return LineEntity.fromJson(entity as JsonEntity); + case EntityName.Point: + return PointEntity.fromJson(entity as JsonEntity); + case EntityName.Rectangle: + return RectangleEntity.fromJson(entity as JsonEntity); + case EntityName.Text: + return TextEntity.fromJson(entity as JsonEntity); + case EntityName.Measurement: + return MeasurementEntity.fromJson(entity as JsonEntity); + case EntityName.Image: + return ImageEntity.fromJson(entity as JsonEntity); + case EntityName.PolyLine: + return PolyLineEntity.fromJson(entity as JsonEntity); + case EntityName.Hatch: + return HatchEntity.fromJson(entity as JsonEntity); + case EntityName.Table: + return TableEntity.fromJson(entity as JsonEntity); - default: - throw new Error(`Invalid entity type: ${entity.type}`); - } - }), - ); + default: + throw new Error(`Invalid entity type: ${entity.type}`); + } + }) + ); - const entities = compact(await Promise.all(entityPromises)); - // 순번이 아니라 id로 되돌린다 — compact가 null을 걷어 index가 어긋날 수 있다. - const groupIdById = new Map(data.entities.map((entity) => [entity.id, entity.groupId])); - for (const entity of entities) { - const groupId = groupIdById.get(entity.id); - if (groupId) entity.groupId = groupId; - } - let layers = data.layers; - if (!layers || layers.length === 0) { - layers = [getNewLayer()]; - } - return { - entities, - layers, - }; + const entities = compact(await Promise.all(entityPromises)); + // 순번이 아니라 id로 되돌린다 — compact가 null을 걷어 index가 어긋날 수 있다. + const groupIdById = new Map(data.entities.map((entity) => [entity.id, entity.groupId])); + for (const entity of entities) { + const groupId = groupIdById.get(entity.id); + if (groupId) entity.groupId = groupId; + } + let layers = data.layers; + if (!layers || layers.length === 0) { + layers = [getNewLayer()]; + } + return { + entities, + layers, + }; } export async function getEntitiesAndLayersFromJsonString( - json: string, + json: string ): Promise { - const data = JSON.parse(json) as JsonDrawingFileSerialized; + const data = JSON.parse(json) as JsonDrawingFileSerialized; - if (!data.entities) { - throw new Error("Invalid JSON file"); - } + if (!data.entities) { + throw new Error('Invalid JSON file'); + } - // TODO use map limit to avoid overloading the event loop - return await getEntitiesAndLayersFromJsonObject(data); + // TODO use map limit to avoid overloading the event loop + return await getEntitiesAndLayersFromJsonObject(data); }