@things-factory/board-import 10.0.0-beta.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/config.development.js +44 -0
- package/config/config.production.js +18 -0
- package/dist-server/index.d.ts +7 -0
- package/dist-server/index.js +11 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/service/adapters/dxf-adapter.d.ts +8 -0
- package/dist-server/service/adapters/dxf-adapter.js +206 -0
- package/dist-server/service/adapters/dxf-adapter.js.map +1 -0
- package/dist-server/service/ai/types.d.ts +93 -0
- package/dist-server/service/ai/types.js +169 -0
- package/dist-server/service/ai/types.js.map +1 -0
- package/dist-server/service/converters/generic-to.d.ts +16 -0
- package/dist-server/service/converters/generic-to.js +78 -0
- package/dist-server/service/converters/generic-to.js.map +1 -0
- package/dist-server/service/import-session/import-session-resolver.d.ts +18 -0
- package/dist-server/service/import-session/import-session-resolver.js +135 -0
- package/dist-server/service/import-session/import-session-resolver.js.map +1 -0
- package/dist-server/service/import-session/import-session.d.ts +28 -0
- package/dist-server/service/import-session/import-session.js +152 -0
- package/dist-server/service/import-session/import-session.js.map +1 -0
- package/dist-server/service/import-session/import-worker.d.ts +1 -0
- package/dist-server/service/import-session/import-worker.js +79 -0
- package/dist-server/service/import-session/import-worker.js.map +1 -0
- package/dist-server/service/import-session/index.d.ts +6 -0
- package/dist-server/service/import-session/index.js +12 -0
- package/dist-server/service/import-session/index.js.map +1 -0
- package/dist-server/service/index.d.ts +22 -0
- package/dist-server/service/index.js +47 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/pipeline/index.d.ts +33 -0
- package/dist-server/service/pipeline/index.js +58 -0
- package/dist-server/service/pipeline/index.js.map +1 -0
- package/dist-server/service/pipeline/stage2-mapping.d.ts +14 -0
- package/dist-server/service/pipeline/stage2-mapping.js +173 -0
- package/dist-server/service/pipeline/stage2-mapping.js.map +1 -0
- package/dist-server/service/pipeline/stage3-board.d.ts +52 -0
- package/dist-server/service/pipeline/stage3-board.js +53 -0
- package/dist-server/service/pipeline/stage3-board.js.map +1 -0
- package/dist-server/service/pipeline/stage4-binding.d.ts +9 -0
- package/dist-server/service/pipeline/stage4-binding.js +28 -0
- package/dist-server/service/pipeline/stage4-binding.js.map +1 -0
- package/dist-server/service/registry/index.d.ts +27 -0
- package/dist-server/service/registry/index.js +108 -0
- package/dist-server/service/registry/index.js.map +1 -0
- package/dist-server/service/types/index.d.ts +117 -0
- package/dist-server/service/types/index.js +3 -0
- package/dist-server/service/types/index.js.map +1 -0
- package/dist-server/service/types/registry.d.ts +175 -0
- package/dist-server/service/types/registry.js +3 -0
- package/dist-server/service/types/registry.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -0
- package/package.json +34 -0
- package/server/index.ts +7 -0
- package/server/service/adapters/dxf-adapter.ts +217 -0
- package/server/service/ai/types.ts +284 -0
- package/server/service/converters/generic-to.ts +98 -0
- package/server/service/import-session/import-session-resolver.ts +113 -0
- package/server/service/import-session/import-session.ts +141 -0
- package/server/service/import-session/import-worker.ts +88 -0
- package/server/service/import-session/index.ts +8 -0
- package/server/service/index.ts +96 -0
- package/server/service/pipeline/index.ts +89 -0
- package/server/service/pipeline/stage2-mapping.ts +195 -0
- package/server/service/pipeline/stage3-board.ts +114 -0
- package/server/service/pipeline/stage4-binding.ts +31 -0
- package/server/service/registry/index.ts +127 -0
- package/server/service/types/index.ts +133 -0
- package/server/service/types/registry.ts +186 -0
- package/things-factory.config.js +1 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { EntityKind, UniversalEntity } from './index'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Universal Component Category — 도메인 비종속 분류 체계.
|
|
5
|
+
* 코어가 정의하며, 모든 앱이 공유. 새 카테고리 추가는 코어 변경 필요.
|
|
6
|
+
*
|
|
7
|
+
* 도메인 type ('Stocker', 'AGV') 과 별개로, 모든 컴포넌트는 카테고리에 속함.
|
|
8
|
+
* AI 추론 / 기본 3D Preset / Cross-app 호환성의 기반.
|
|
9
|
+
*/
|
|
10
|
+
export type ComponentCategory =
|
|
11
|
+
| 'container' // Stocker, Buffer, Shelf, Rack — 정적 보관소
|
|
12
|
+
| 'vehicle' // AGV, OHT, Forklift, AMR — 이동체
|
|
13
|
+
| 'path' // Conveyor, AGVLine, OHTLine — 이동 경로
|
|
14
|
+
| 'region' // Zone, Area, Floor — 영역
|
|
15
|
+
| 'equipment' // Machine, Workstation, Robot — 작업 설비
|
|
16
|
+
| 'io' // Port, Dock, Gate — 입출력 지점
|
|
17
|
+
| 'marker' // Label, Sign, Gauge — 표시·계측
|
|
18
|
+
| 'structure' // Wall, Pillar, Door — 건축 구조
|
|
19
|
+
| 'unknown' // 분류 미상 (GenericObject 로 변환됨)
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* ImportRule — 앱이 등록하는 매핑 규칙.
|
|
23
|
+
* 한 entity 가 어떤 컴포넌트 type 으로 변환될지 결정.
|
|
24
|
+
*/
|
|
25
|
+
export interface ImportRule {
|
|
26
|
+
/** 결과 컴포넌트 type (예: 'Stocker', 'AGV', 'Conveyor') */
|
|
27
|
+
componentType: string
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Universal Category. 권장값. 누락 시 'unknown'.
|
|
31
|
+
* AI 추론 / 기본 3D preset 폴백의 기반.
|
|
32
|
+
*/
|
|
33
|
+
category?: ComponentCategory
|
|
34
|
+
|
|
35
|
+
/** 매칭 조건 — 하나라도 해당되면 매칭. 모두 비어있으면 항상 매칭 안 됨. */
|
|
36
|
+
match: ImportMatcher
|
|
37
|
+
|
|
38
|
+
/** 결과 변환 정책 */
|
|
39
|
+
build: ImportBuildSpec
|
|
40
|
+
|
|
41
|
+
/** 충돌 시 우선순위 (높을수록 먼저). 기본 0 */
|
|
42
|
+
priority?: number
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface ImportMatcher {
|
|
46
|
+
/** CAD (DXF/SVG) 매칭 */
|
|
47
|
+
cad?: {
|
|
48
|
+
/** INSERT 블록 이름 패턴 */
|
|
49
|
+
blockNamePattern?: RegExp
|
|
50
|
+
/** 레이어 이름 (정확 일치 또는 정규식) */
|
|
51
|
+
layer?: string | RegExp
|
|
52
|
+
/** entity 종류 화이트리스트 */
|
|
53
|
+
entityKinds?: EntityKind[]
|
|
54
|
+
/** 인접 텍스트 패턴 (라벨 매칭) */
|
|
55
|
+
textAdjacent?: RegExp
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** IFC 매칭 */
|
|
59
|
+
ifc?: {
|
|
60
|
+
/** IFC 클래스명 (예: 'IfcStockerStorage', 또는 정규식) */
|
|
61
|
+
ifcClass?: string | RegExp
|
|
62
|
+
/** PropertySet 의 특정 속성 */
|
|
63
|
+
propertySet?: { name: string; value?: any }
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** 이미지(VLM) 매칭 — VLM 응답의 라벨 후보 */
|
|
67
|
+
image?: {
|
|
68
|
+
labels: string[]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** 모양/크기 기반 매칭 (모든 형식 공통) */
|
|
72
|
+
geometry?: {
|
|
73
|
+
shape?: 'rect' | 'circle' | 'polyline' | 'polygon'
|
|
74
|
+
sizeRange?: { minArea?: number; maxArea?: number }
|
|
75
|
+
aspectRatio?: { min?: number; max?: number }
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface ImportBuildSpec {
|
|
80
|
+
/** 컴포넌트 기본 상태 */
|
|
81
|
+
defaultState?: Record<string, any>
|
|
82
|
+
/** ID 부여 전략 */
|
|
83
|
+
idStrategy?: IdStrategy
|
|
84
|
+
/** 사용자 정의 변환 (있으면 우선) */
|
|
85
|
+
transform?: (entity: UniversalEntity, draft: ComponentDraft) => ComponentDraft
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export type IdStrategy =
|
|
89
|
+
| 'fromAttribute' // attribs.name 사용
|
|
90
|
+
| 'fromAdjacentText' // 인접 텍스트 라벨
|
|
91
|
+
| 'fromIfcGlobalId'
|
|
92
|
+
| 'auto' // 'TYPE_001' 자동 생성
|
|
93
|
+
| { custom: (entity: UniversalEntity) => string }
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Stage 2/3 의 중간 결과. 보드 모델 컴포넌트로 변환되기 직전 상태.
|
|
97
|
+
*/
|
|
98
|
+
export interface ComponentDraft {
|
|
99
|
+
/** Universal category. 항상 채워짐 (rule 누락 시 'unknown') */
|
|
100
|
+
category: ComponentCategory
|
|
101
|
+
/** 도메인 type. 'unknown' 카테고리면 'GenericObject' */
|
|
102
|
+
type: string
|
|
103
|
+
id?: string
|
|
104
|
+
state: Record<string, any>
|
|
105
|
+
/** 매칭된 ImportRule (디버깅/검수용). 'unknown' 이면 undefined */
|
|
106
|
+
matchedBy?: ImportRule
|
|
107
|
+
/** 원본 entity (재참조 / 매핑 검토용 / 변환 시 단서) */
|
|
108
|
+
source?: UniversalEntity
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* 3D Preset — 컴포넌트 type 또는 카테고리에 대한 3D 기본 표현.
|
|
113
|
+
*
|
|
114
|
+
* 매칭 우선순위:
|
|
115
|
+
* 1) componentType 정확 일치
|
|
116
|
+
* 2) componentType 없으면 category 폴백
|
|
117
|
+
* 3) 둘 다 없으면 코어 기본 'unknown' preset
|
|
118
|
+
*/
|
|
119
|
+
export interface ThreeDPreset {
|
|
120
|
+
/** 정확 매칭용 도메인 type. category 와 둘 중 하나는 필수. */
|
|
121
|
+
componentType?: string
|
|
122
|
+
/** 카테고리 단위 폴백 매칭 */
|
|
123
|
+
category?: ComponentCategory
|
|
124
|
+
geometry: ThreeDGeometry
|
|
125
|
+
material?: ThreeDMaterial
|
|
126
|
+
/** bbox 기준점 — bottom: 바닥 닿음, center: 중심 */
|
|
127
|
+
origin?: 'bottom' | 'center'
|
|
128
|
+
/** 후처리 훅 */
|
|
129
|
+
postProcess?: (componentState: Record<string, any>) => void
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export type ThreeDGeometry =
|
|
133
|
+
| { kind: 'box'; height: number }
|
|
134
|
+
| { kind: 'cylinder'; height: number; radius: number }
|
|
135
|
+
| { kind: 'gltf'; url: string; scale?: number }
|
|
136
|
+
| { kind: 'extrude'; depth: number; bevel?: boolean }
|
|
137
|
+
|
|
138
|
+
export interface ThreeDMaterial {
|
|
139
|
+
color?: string
|
|
140
|
+
roughness?: number
|
|
141
|
+
metalness?: number
|
|
142
|
+
texture?: string
|
|
143
|
+
opacity?: number
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Subscription Rule — 컴포넌트 type ↔ 데이터 소스 태그 매핑.
|
|
148
|
+
*/
|
|
149
|
+
export interface SubscriptionRule {
|
|
150
|
+
componentType: string
|
|
151
|
+
/** 데이터 소스 태그 (예: 'MCS_LV_VEHICLE') */
|
|
152
|
+
tag: string
|
|
153
|
+
/** 응답 record 의 ID 필드 (default 'NAME') */
|
|
154
|
+
idField?: string
|
|
155
|
+
/** 추가 필드 매핑 (서버 필드 → 컴포넌트 상태) */
|
|
156
|
+
fieldMappings?: Record<string, string>
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* 매핑 결과 — Stage 2 의 출력.
|
|
161
|
+
*
|
|
162
|
+
* 모든 entity 가 ComponentDraft 가 됨:
|
|
163
|
+
* - 매칭 성공: 도메인 type (e.g. 'Stocker', category='container')
|
|
164
|
+
* - 매칭 실패: 'GenericObject' (category='unknown') — 좌표/원본 attribs 보존
|
|
165
|
+
*
|
|
166
|
+
* 사용자가 'GenericObject' 를 사후에 도메인 type 으로 변환 가능 (`convertGenericTo`).
|
|
167
|
+
*/
|
|
168
|
+
export interface MappingResult {
|
|
169
|
+
/** 모든 컴포넌트 draft (도메인 + GenericObject) */
|
|
170
|
+
components: ComponentDraft[]
|
|
171
|
+
/** 매핑 통계 */
|
|
172
|
+
stats: {
|
|
173
|
+
total: number
|
|
174
|
+
matched: number // 도메인 type 으로 분류
|
|
175
|
+
generic: number // GenericObject 로 폴백
|
|
176
|
+
skipped: number // 무시 (예: 레이어 제외 등)
|
|
177
|
+
}
|
|
178
|
+
/** 경고 / 충돌 정보 */
|
|
179
|
+
warnings: MappingWarning[]
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export interface MappingWarning {
|
|
183
|
+
level: 'info' | 'warn' | 'error'
|
|
184
|
+
entity?: UniversalEntity
|
|
185
|
+
message: string
|
|
186
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default {}
|