@hatiolab/things-scene 10.0.0-beta.92 → 10.0.0-beta.93
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/dist-types/diagnostics/contract-inspector.d.ts +103 -0
- package/dist-types/diagnostics/contract-inspector.d.ts.map +1 -0
- package/dist-types/diagnostics/inspector.d.ts +44 -0
- package/dist-types/diagnostics/inspector.d.ts.map +1 -1
- package/dist-types/math/component-pose.d.ts +51 -0
- package/dist-types/math/component-pose.d.ts.map +1 -0
- package/dist-types/math/index.d.ts +3 -0
- package/dist-types/math/index.d.ts.map +1 -0
- package/dist-types/math/pose6dof.d.ts +93 -0
- package/dist-types/math/pose6dof.d.ts.map +1 -0
- package/dist-types/navigation/index.d.ts +7 -0
- package/dist-types/navigation/index.d.ts.map +1 -0
- package/dist-types/navigation/nav-graph.d.ts +55 -0
- package/dist-types/navigation/nav-graph.d.ts.map +1 -0
- package/dist-types/navigation/path-planner.d.ts +29 -0
- package/dist-types/navigation/path-planner.d.ts.map +1 -0
- package/dist-types/navigation/reservation-table.d.ts +103 -0
- package/dist-types/navigation/reservation-table.d.ts.map +1 -0
- package/dist-types/navigation/types.d.ts +145 -0
- package/dist-types/navigation/types.d.ts.map +1 -0
- package/dist-types/things-scene/index.d.ts +8 -2
- package/dist-types/things-scene/index.d.ts.map +1 -1
- package/dist-types/transfer/container-capacity.d.ts +72 -0
- package/dist-types/transfer/container-capacity.d.ts.map +1 -1
- package/dist-types/transfer/index.d.ts +7 -1
- package/dist-types/transfer/index.d.ts.map +1 -1
- package/dist-types/transfer/pickup-helpers.d.ts +65 -0
- package/dist-types/transfer/pickup-helpers.d.ts.map +1 -0
- package/dist-types/transfer/transfer.d.ts +168 -0
- package/dist-types/transfer/transfer.d.ts.map +1 -0
- package/dist-types/transfer/types.d.ts +104 -0
- package/dist-types/transfer/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/things-scene-min.js +10 -10
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +6 -1
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { transferLog } from '../transfer/transfer.js';
|
|
2
|
+
import type { Reservation } from '../navigation/types.js';
|
|
3
|
+
export interface InspectorComponentSummary {
|
|
4
|
+
type: string;
|
|
5
|
+
id: string;
|
|
6
|
+
category?: string;
|
|
7
|
+
parentId?: string;
|
|
8
|
+
parentPath?: string;
|
|
9
|
+
pose?: {
|
|
10
|
+
position: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
rotation: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
z: number;
|
|
19
|
+
w: number;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
state?: Record<string, unknown>;
|
|
23
|
+
isCarriable?: boolean;
|
|
24
|
+
isPickable?: boolean;
|
|
25
|
+
isMover?: boolean;
|
|
26
|
+
isHolder?: boolean;
|
|
27
|
+
toolType?: string;
|
|
28
|
+
childIds?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface InspectorSimStatus {
|
|
31
|
+
simTime: number;
|
|
32
|
+
realTime: number;
|
|
33
|
+
speed: number;
|
|
34
|
+
paused: boolean;
|
|
35
|
+
carrierCount: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ContractInspector {
|
|
38
|
+
/** Scene 의 모든 component 를 평탄화한 list — 각자 contract markers + parent path. */
|
|
39
|
+
collectComponents(): InspectorComponentSummary[];
|
|
40
|
+
/** ID 로 단일 컴포넌트 조회 — 더 풍부한 정보 (e.g. pickupFrames, slots). */
|
|
41
|
+
getComponent(id: string): (InspectorComponentSummary & {
|
|
42
|
+
pickupFrames?: any[];
|
|
43
|
+
slots?: any[];
|
|
44
|
+
acceptanceWorldQuat?: {
|
|
45
|
+
x: number;
|
|
46
|
+
y: number;
|
|
47
|
+
z: number;
|
|
48
|
+
w: number;
|
|
49
|
+
};
|
|
50
|
+
deliveryWorldPosition?: {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
z: number;
|
|
54
|
+
};
|
|
55
|
+
}) | null;
|
|
56
|
+
/** Sim clock 상태. */
|
|
57
|
+
simStatus(): InspectorSimStatus;
|
|
58
|
+
/** TransferLog snapshot (read-only). */
|
|
59
|
+
transferLog(): {
|
|
60
|
+
entries: ReturnType<typeof transferLog.toJSON>;
|
|
61
|
+
stats: ReturnType<typeof transferLog.stats>;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Phase K — ReservationTable snapshot. Atlas 의 Reservations / Conflicts /
|
|
65
|
+
* Heat 모드가 활용. all reservations + per-resource grouped + 현재 sim time.
|
|
66
|
+
*/
|
|
67
|
+
reservations(): {
|
|
68
|
+
simTime: number;
|
|
69
|
+
all: Reservation[];
|
|
70
|
+
byResource: Record<string, Reservation[]>;
|
|
71
|
+
byReserver: Record<string, Reservation[]>;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Phase K — 충돌 누적 로그 + 통계. Atlas 의 Conflicts mode 가 활용.
|
|
75
|
+
*/
|
|
76
|
+
conflicts(): {
|
|
77
|
+
simTime: number;
|
|
78
|
+
log: readonly any[];
|
|
79
|
+
total: number;
|
|
80
|
+
rejected: number;
|
|
81
|
+
preempted: number;
|
|
82
|
+
byResource: Record<string, number>;
|
|
83
|
+
byReserver: Record<string, number>;
|
|
84
|
+
};
|
|
85
|
+
/** Inspector 의 self-version (extension 의 호환성 검사용). */
|
|
86
|
+
readonly version: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* ContractInspector 인스턴스 빌드 — root 컴포넌트 (rootModel) 를 받아 inspector
|
|
90
|
+
* 객체 반환. install(rootModel) 로 window.__SCENE_INSPECTOR__ 에 연결.
|
|
91
|
+
*/
|
|
92
|
+
export declare function buildContractInspector(rootModel: any): ContractInspector;
|
|
93
|
+
/**
|
|
94
|
+
* Inspector 를 window.__SCENE_INSPECTOR__ 에 설치. browser 환경에서만.
|
|
95
|
+
* Chrome extension 의 content script 가 이걸 query.
|
|
96
|
+
*
|
|
97
|
+
* usage:
|
|
98
|
+
* import { installContractInspector } from '@hatiolab/things-scene'
|
|
99
|
+
* const scene = create(model, { isViewMode: true })
|
|
100
|
+
* installContractInspector(scene) // 또는 scene.rootModel
|
|
101
|
+
*/
|
|
102
|
+
export declare function installContractInspector(rootModel: any): ContractInspector;
|
|
103
|
+
//# sourceMappingURL=contract-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/contract-inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -151,6 +151,50 @@ declare class SceneInspector {
|
|
|
151
151
|
private _safeBounds;
|
|
152
152
|
private _safeClone;
|
|
153
153
|
private _safeValue;
|
|
154
|
+
/** TransferLog 의 entries + stats snapshot. */
|
|
155
|
+
transferLog(): {
|
|
156
|
+
entries: any[];
|
|
157
|
+
stats: {
|
|
158
|
+
total: number;
|
|
159
|
+
committed: number;
|
|
160
|
+
rolledBack: number;
|
|
161
|
+
rejectionRate: number;
|
|
162
|
+
avgTransferDurationMs: number;
|
|
163
|
+
byPhase: Record<string, number>;
|
|
164
|
+
};
|
|
165
|
+
} | null;
|
|
166
|
+
/** ReservationTable 의 active reservations + groupings. */
|
|
167
|
+
reservations(): {
|
|
168
|
+
simTime: number;
|
|
169
|
+
all: any[];
|
|
170
|
+
byResource: Record<string, any[]>;
|
|
171
|
+
byReserver: Record<string, any[]>;
|
|
172
|
+
} | null;
|
|
173
|
+
/** Conflict 누적 + outcome 통계. */
|
|
174
|
+
conflicts(): {
|
|
175
|
+
simTime: number;
|
|
176
|
+
log: any[];
|
|
177
|
+
total: number;
|
|
178
|
+
rejected: number;
|
|
179
|
+
preempted: number;
|
|
180
|
+
byResource: Record<string, number>;
|
|
181
|
+
byReserver: Record<string, number>;
|
|
182
|
+
} | null;
|
|
183
|
+
/**
|
|
184
|
+
* 단일 component 의 contract 요약 — Phase H/G2 의 markers.
|
|
185
|
+
* existing getComponentInfo 보다 contract 측면에 특화.
|
|
186
|
+
*/
|
|
187
|
+
contractSummary(componentId: string, sceneIndex?: number): {
|
|
188
|
+
type: string;
|
|
189
|
+
id: string;
|
|
190
|
+
isCarriable?: boolean;
|
|
191
|
+
isPickable?: boolean;
|
|
192
|
+
isMover?: boolean;
|
|
193
|
+
isHolder?: boolean;
|
|
194
|
+
toolType?: string;
|
|
195
|
+
pickupFrames?: any[];
|
|
196
|
+
slots?: any[];
|
|
197
|
+
} | null;
|
|
154
198
|
}
|
|
155
199
|
export declare const inspector: SceneInspector;
|
|
156
200
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/inspector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/inspector.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE9E,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAG7B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,WAAW,EAAE,OAAO,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,GAAG,CAAA;IACT,KAAK,EAAE,GAAG,CAAA;IACV,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,cAAM,cAAc;IAClB,OAAO,CAAC,OAAO,CAAqB;IAEpC;;;OAGG;IACH,aAAa,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IAO3D,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,eAAe,CAAmD;IAC1E;;;OAGG;IACH,wBAAwB,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAO;IAEhG;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,SAAI,GAAG,OAAO;IAwBxE,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAM1B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAU5B;;OAEG;IACH,SAAS,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE;IAkBxF;;OAEG;IACH,gBAAgB,CAAC,UAAU,SAAI,GAAG,iBAAiB,EAAE;IAarD;;;OAGG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,iBAAiB,EAAE;IAmBtE;;;OAGG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,aAAa,GAAG,IAAI;IAsC3E;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO;IAmB7D;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,SAAI,GAAG,OAAO;IAyB3F;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO;IAkBpD;;;OAGG;IACH,cAAc,CAAC,UAAU,SAAI,GAAG,GAAG;IAiBnC;;;OAGG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO;IAkB1D;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,GAAG;IAetD;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,GAAG;IAevD;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,iBAAiB,EAAE;IAgCpE;;;OAGG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,MAAM,EAAE;IAiB/D;;;OAGG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,UAAU,GAAG,IAAI;IAkDrE,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,UAAU;IAkBlB,8CAA8C;IAC9C,WAAW,IAAI;QACb,OAAO,EAAE,GAAG,EAAE,CAAA;QACd,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,qBAAqB,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAA;KACvJ,GAAG,IAAI;IAYR,0DAA0D;IAC1D,YAAY,IAAI;QACd,OAAO,EAAE,MAAM,CAAA;QACf,GAAG,EAAE,GAAG,EAAE,CAAA;QACV,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;KAClC,GAAG,IAAI;IA0BR,gCAAgC;IAChC,SAAS,IAAI;QACX,OAAO,EAAE,MAAM,CAAA;QACf,GAAG,EAAE,GAAG,EAAE,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACnC,GAAG,IAAI;IA8BR;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG;QACpD,IAAI,EAAE,MAAM,CAAA;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,UAAU,CAAC,EAAE,OAAO,CAAA;QACpB,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,GAAG,EAAE,CAAA;QACpB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;KACd,GAAG,IAAI;CAiCT;AAED,eAAO,MAAM,SAAS,gBAAuB,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Pose6DOF } from './pose6dof.js';
|
|
2
|
+
/**
|
|
3
|
+
* Component 의 parent-local pose 를 읽는다.
|
|
4
|
+
*
|
|
5
|
+
* 정의: component 가 부모의 좌표계 안에서 차지하는 위치+자세.
|
|
6
|
+
* 3D pipeline 의 RealObject.center / RealObject.rotation 과 동일한 의미축.
|
|
7
|
+
*
|
|
8
|
+
* 좌표 매핑 (state → Pose6DOF):
|
|
9
|
+
* pos.x = component.center.x + tx - parent.width/2 (parent-centered 3D X)
|
|
10
|
+
* pos.y = cz (3D vertical Y, cz 공식)
|
|
11
|
+
* pos.z = component.center.y + ty - parent.height/2 (parent-centered 3D Z)
|
|
12
|
+
* rot = Euler(state.rotationX, -state.rotation, state.rotationY, 'XYZ')
|
|
13
|
+
*
|
|
14
|
+
* 컴포넌트가 RealObject 를 안 가지면 cz=0 으로 평면 처리.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPose(component: any): Pose6DOF;
|
|
17
|
+
/**
|
|
18
|
+
* Component 의 world pose 를 읽는다.
|
|
19
|
+
*
|
|
20
|
+
* 우선순위:
|
|
21
|
+
* 1. _realObject.object3d.matrixWorld 가 있으면 거기서 분해 (정확)
|
|
22
|
+
* 2. 부모 chain 을 따라가며 getPose() 합성 (fallback, 2D-only 환경)
|
|
23
|
+
*
|
|
24
|
+
* 호출 전에 `obj3d.updateWorldMatrix(true, false)` 보장 책임은 호출자.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getWorldPose(component: any): Pose6DOF;
|
|
27
|
+
/**
|
|
28
|
+
* Component 에 parent-local pose 를 단일 atomic setState 로 적용.
|
|
29
|
+
*
|
|
30
|
+
* 한 번의 호출이 left/top/zPos/rotation/rotationX/rotationY 를 동시에 갱신 →
|
|
31
|
+
* onchange 가 한 번만 fire → pipeline 이 obj3d 를 한 번 다시 계산. 부분 상태가
|
|
32
|
+
* frame 사이에 노출되지 않는다 (Phase G 의 핵심 invariant).
|
|
33
|
+
*
|
|
34
|
+
* 좌표 역매핑 (Pose6DOF → state):
|
|
35
|
+
* center.x = pos.x + parent.width/2 - tx
|
|
36
|
+
* center.y = pos.z + parent.height/2 - ty
|
|
37
|
+
* zPos = pos.y - tz - syncZPosOffset + parent.geometricOffsetY
|
|
38
|
+
* Euler decompose 'XYZ' → (rotationX = e.x, rotation = -e.y, rotationY = e.z)
|
|
39
|
+
*
|
|
40
|
+
* 기존 syncFromObject3D 의 로직과 동일 — 그것을 명시적 API 로 노출.
|
|
41
|
+
*/
|
|
42
|
+
export declare function setPose(component: any, pose: Pose6DOF): void;
|
|
43
|
+
/**
|
|
44
|
+
* Component 에 world pose 를 적용. 부모의 world pose 의 inverse 로 곱해서
|
|
45
|
+
* parent-local 로 변환 후 setPose.
|
|
46
|
+
*
|
|
47
|
+
* 부모가 root 거나 parent.worldPose 를 못 구하면 setPose 와 동일 (world =
|
|
48
|
+
* parent-local 로 가정).
|
|
49
|
+
*/
|
|
50
|
+
export declare function setWorldPose(component: any, worldPose: Pose6DOF): void;
|
|
51
|
+
//# sourceMappingURL=component-pose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-pose.d.ts","sourceRoot":"","sources":["../../src/math/component-pose.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAOxC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,GAAG,GAAG,QAAQ,CA0BhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,GAAG,QAAQ,CAgBrD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAuC5D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,CAStE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export interface PoseLike {
|
|
3
|
+
position: {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
z: number;
|
|
7
|
+
};
|
|
8
|
+
rotation: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
z: number;
|
|
12
|
+
w: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare class Pose6DOF {
|
|
16
|
+
/**
|
|
17
|
+
* Position in the implied coordinate system. World, parent-local, etc — Pose6DOF
|
|
18
|
+
* 자체는 좌표계를 알지 않는다. 호출자가 어떤 frame 의 값인지 명시할 책임.
|
|
19
|
+
*/
|
|
20
|
+
readonly position: THREE.Vector3;
|
|
21
|
+
/**
|
|
22
|
+
* Orientation as unit quaternion in the implied coordinate system.
|
|
23
|
+
*/
|
|
24
|
+
readonly rotation: THREE.Quaternion;
|
|
25
|
+
constructor(position?: THREE.Vector3 | {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
z: number;
|
|
29
|
+
}, rotation?: THREE.Quaternion | {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
z: number;
|
|
33
|
+
w: number;
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Compose: this 의 frame "안" 에서 child 를 적용. 합성된 결과는 부모(this)의
|
|
37
|
+
* 좌표계 기준이다.
|
|
38
|
+
*
|
|
39
|
+
* result.position = this.position + this.rotation × child.position
|
|
40
|
+
* result.rotation = this.rotation × child.rotation
|
|
41
|
+
*
|
|
42
|
+
* 예: holder.worldPose.compose(carrier.localPose) = carrier.worldPose
|
|
43
|
+
*/
|
|
44
|
+
compose(child: Pose6DOF): Pose6DOF;
|
|
45
|
+
/**
|
|
46
|
+
* Inverse: this 가 적용 전으로 되돌리는 변환.
|
|
47
|
+
*
|
|
48
|
+
* inv.rotation = this.rotation⁻¹
|
|
49
|
+
* inv.position = -inv.rotation × this.position
|
|
50
|
+
*
|
|
51
|
+
* 항등식: this.compose(this.inverse()) = identity = this.inverse().compose(this).
|
|
52
|
+
*/
|
|
53
|
+
inverse(): Pose6DOF;
|
|
54
|
+
/**
|
|
55
|
+
* Transform a point: p' = this.rotation × p + this.position.
|
|
56
|
+
* 입력은 변경하지 않는다 — 새 Vector3 반환.
|
|
57
|
+
*/
|
|
58
|
+
transformPoint(p: THREE.Vector3): THREE.Vector3;
|
|
59
|
+
/**
|
|
60
|
+
* Transform a pose. compose 의 의미상 동치.
|
|
61
|
+
* parent.transformPose(child_local) = child_world
|
|
62
|
+
*/
|
|
63
|
+
transformPose(child: Pose6DOF): Pose6DOF;
|
|
64
|
+
toMatrix4(out?: THREE.Matrix4): THREE.Matrix4;
|
|
65
|
+
/**
|
|
66
|
+
* Matrix4 의 translation + rotation 만 추출. scale 은 무시 (rigid).
|
|
67
|
+
* scale 이 1 이 아닌 행렬을 넣으면 scale 분해 후 폐기.
|
|
68
|
+
*/
|
|
69
|
+
static fromMatrix4(m: THREE.Matrix4): Pose6DOF;
|
|
70
|
+
/**
|
|
71
|
+
* Object3D 의 pose 를 캡처. world=true 이면 world matrix (부모 chain 통과)
|
|
72
|
+
* 를, 아니면 local position/quaternion 을 사용.
|
|
73
|
+
*
|
|
74
|
+
* world=true 호출 전에 객체의 worldMatrix 가 최신이어야 한다 (호출자가
|
|
75
|
+
* `obj.updateWorldMatrix(true, false)` 보장).
|
|
76
|
+
*/
|
|
77
|
+
static fromObject3D(obj: THREE.Object3D, world?: boolean): Pose6DOF;
|
|
78
|
+
/**
|
|
79
|
+
* Object3D 의 local position/quaternion 에 이 pose 를 적용. scale 은 건드리지
|
|
80
|
+
* 않는다.
|
|
81
|
+
*/
|
|
82
|
+
applyToObject3D(obj: THREE.Object3D): void;
|
|
83
|
+
static identity(): Pose6DOF;
|
|
84
|
+
/**
|
|
85
|
+
* Numerical equality 검사. position 은 component-wise abs diff, rotation 은
|
|
86
|
+
* dot product (둘은 sign 다른 같은 회전 — abs(dot) ≈ 1).
|
|
87
|
+
*/
|
|
88
|
+
equals(other: Pose6DOF, tol?: number): boolean;
|
|
89
|
+
clone(): Pose6DOF;
|
|
90
|
+
toJSON(): PoseLike;
|
|
91
|
+
static fromJSON(j: PoseLike): Pose6DOF;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=pose6dof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pose6dof.d.ts","sourceRoot":"","sources":["../../src/math/pose6dof.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACzD;AAED,qBAAa,QAAQ;IACnB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAA;IAEhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAA;gBAEvB,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBxJ;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAMlC;;;;;;;OAOG;IACH,OAAO,IAAI,QAAQ;IAMnB;;;OAGG;IACH,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAI/C;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAIxC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAM7C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,QAAQ;IAQ9C;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAE,OAAe,GAAG,QAAQ;IAW1E;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;IAK1C,MAAM,CAAC,QAAQ,IAAI,QAAQ;IAI3B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAE,MAAa,GAAG,OAAO;IAapD,KAAK,IAAI,QAAQ;IAIjB,MAAM,IAAI,QAAQ;IAOlB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ;CAGvC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { LaneGeometry, Lane, ConflictPair, Intersection, NavPolygon, OpenZone, TimeWindow, Reservation, SpeedProfile, PathSegment, PathPlan, PathPlanOptions, Navigable, YieldDecision, YieldPolicy } from './types.js';
|
|
2
|
+
export { ReservationTable, reservationTable, standardYieldPolicy } from './reservation-table.js';
|
|
3
|
+
export type { ReservationEvent, AddResult, Conflict, ConflictRecord } from './reservation-table.js';
|
|
4
|
+
export { NavGraph, buildNavGraph } from './nav-graph.js';
|
|
5
|
+
export type { NavNode, NavEdge, BuildNavGraphOptions } from './nav-graph.js';
|
|
6
|
+
export { planPathAStar, planToReservations } from './path-planner.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAaA,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEnG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACxD,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Lane, Intersection } from './types.js';
|
|
2
|
+
import type { Vec3 } from '../transfer/types.js';
|
|
3
|
+
export interface NavNode {
|
|
4
|
+
id: string;
|
|
5
|
+
position: Vec3;
|
|
6
|
+
/** 'lane-start' | 'lane-end' | 'intersection' | 'goal' (planner 가 임시 추가). */
|
|
7
|
+
type: string;
|
|
8
|
+
}
|
|
9
|
+
export interface NavEdge {
|
|
10
|
+
fromNode: string;
|
|
11
|
+
toNode: string;
|
|
12
|
+
/** 통과하는 resource id (충돌 검사용). lane id 또는 intersection id. */
|
|
13
|
+
resource: string;
|
|
14
|
+
/** 거리 (scene unit). cost 의 기본 단위. */
|
|
15
|
+
distance: number;
|
|
16
|
+
/** 통과 sim time (ms). speed 가 결정. lane.speedLimit 또는 vehicle.maxSpeed 기준. */
|
|
17
|
+
durationMs: number;
|
|
18
|
+
/** 이 edge 의 통과 방향이 lane 의 정방향과 같으면 true. twoway 의 역방향이면 false. */
|
|
19
|
+
forward: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class NavGraph {
|
|
22
|
+
readonly nodes: Map<string, NavNode>;
|
|
23
|
+
/** adjacency list — fromNode → outgoing edges. */
|
|
24
|
+
readonly edges: Map<string, NavEdge[]>;
|
|
25
|
+
/** Lane 별 endpoint node id 매핑. graph augmentation (start/goal 추가) 시 유용. */
|
|
26
|
+
readonly laneEndpoints: Map<string, {
|
|
27
|
+
startNodeId: string;
|
|
28
|
+
endNodeId: string;
|
|
29
|
+
}>;
|
|
30
|
+
addNode(node: NavNode): void;
|
|
31
|
+
addEdge(edge: NavEdge): void;
|
|
32
|
+
edgesFrom(nodeId: string): NavEdge[];
|
|
33
|
+
/** 가장 가까운 node 찾기 (start/goal 진입용). bruteforce — 큰 그래프엔 spatial index 권장. */
|
|
34
|
+
findNearestNode(pos: Vec3): NavNode | null;
|
|
35
|
+
}
|
|
36
|
+
export interface BuildNavGraphOptions {
|
|
37
|
+
/** Lane 별 default speed (없으면 lane.speedLimit, 그것도 없으면 fallback 100). */
|
|
38
|
+
defaultSpeed?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Lane / Intersection 으로부터 NavGraph 를 빌드.
|
|
42
|
+
*
|
|
43
|
+
* 노드 명명 규약:
|
|
44
|
+
* - lane endpoint: `${lane.id}:start`, `${lane.id}:end`
|
|
45
|
+
* - intersection: `${intersection.id}` (intersection 자체가 단일 노드 — 통과 cost 는
|
|
46
|
+
* intersection.crossingTimeMs 로 모델링)
|
|
47
|
+
*
|
|
48
|
+
* Edge 종류:
|
|
49
|
+
* - lane traversal: lane.id 가 resource. oneway 면 start→end 만, twoway 면
|
|
50
|
+
* 양방향 두 edge. distance = lane.geometry.centerPoints 누적.
|
|
51
|
+
* - intersection crossing: intersection.id 가 resource. 만나는 lane 들의
|
|
52
|
+
* endpoint 간 edge (직선 거리 + crossingTimeMs).
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildNavGraph(lanes: Lane[], intersections: Intersection[], options?: BuildNavGraphOptions): NavGraph;
|
|
55
|
+
//# sourceMappingURL=nav-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-graph.d.ts","sourceRoot":"","sources":["../../src/navigation/nav-graph.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,IAAI,CAAA;IACd,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAY;IAChD,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAY;IAElD,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAY;IAE3F,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO5B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAW5B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAIpC,6EAA6E;IAC7E,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI;CAY3C;AAaD,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CA0GV"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NavGraph } from './nav-graph.js';
|
|
2
|
+
import type { PathPlan, PathPlanOptions } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A* 경로 계획.
|
|
5
|
+
*
|
|
6
|
+
* @param graph navigation graph
|
|
7
|
+
* @param startNodeId 출발 node id
|
|
8
|
+
* @param goalNodeId 도착 node id
|
|
9
|
+
* @param options vehicle 의 speed / priority / startSimMs / deadline
|
|
10
|
+
* @returns PathPlan 또는 null (도달 불가 / deadline 초과)
|
|
11
|
+
*/
|
|
12
|
+
export declare function planPathAStar(graph: NavGraph, startNodeId: string, goalNodeId: string, options?: PathPlanOptions): PathPlan | null;
|
|
13
|
+
/**
|
|
14
|
+
* PathPlan 의 segments 를 ReservationTable 의 add 입력 형태로 변환.
|
|
15
|
+
*
|
|
16
|
+
* 호출자가 ReservationTable.add 를 segment 별로 시도하고, 실패 시 rollback
|
|
17
|
+
* (이미 add 된 것들 release) 책임. helper 는 단순 매핑.
|
|
18
|
+
*/
|
|
19
|
+
export declare function planToReservations(plan: PathPlan, reserverId: string, priority?: number, metadata?: Record<string, any>): Array<{
|
|
20
|
+
resource: string;
|
|
21
|
+
timeWindow: {
|
|
22
|
+
startSimMs: number;
|
|
23
|
+
endSimMs: number;
|
|
24
|
+
};
|
|
25
|
+
reserverId: string;
|
|
26
|
+
priority: number;
|
|
27
|
+
metadata?: Record<string, any>;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=path-planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-planner.d.ts","sourceRoot":"","sources":["../../src/navigation/path-planner.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAe,eAAe,EAAE,MAAM,YAAY,CAAA;AA+BxE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC5B,QAAQ,GAAG,IAAI,CAqGjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAU,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,CAQzJ"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { Reservation, TimeWindow, YieldDecision, YieldPolicy } from './types.js';
|
|
2
|
+
/** 기본 yield policy: priority 낮은(수치 높은) 쪽이 양보, 같으면 fifo. */
|
|
3
|
+
export declare const standardYieldPolicy: YieldPolicy;
|
|
4
|
+
/**
|
|
5
|
+
* Conflict — 두 reservation 의 충돌 정보. yield policy 가 어느 쪽이 양보할지 결정.
|
|
6
|
+
*/
|
|
7
|
+
export interface Conflict {
|
|
8
|
+
a: Reservation;
|
|
9
|
+
b: Reservation;
|
|
10
|
+
decision: YieldDecision;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Phase K — 충돌 발생 기록. observability 의 입력 — Atlas 의 Conflicts mode 가
|
|
14
|
+
* 활용. 시간순 누적 (ring buffer 로 maxEntries 제한).
|
|
15
|
+
*/
|
|
16
|
+
export interface ConflictRecord {
|
|
17
|
+
/** 충돌 발생 sim time (proposed reservation 의 시작 시간으로 추정). */
|
|
18
|
+
simTime: number;
|
|
19
|
+
resource: string;
|
|
20
|
+
/** 시도된 reservation (table 에 안 들어감). */
|
|
21
|
+
proposed: Omit<Reservation, 'id'>;
|
|
22
|
+
/** 충돌한 기존 reservations. */
|
|
23
|
+
existing: Reservation[];
|
|
24
|
+
/** 결과 — 'rejected' (proposed 가 양보) | 'preempted' (기존이 evict 됨). */
|
|
25
|
+
outcome: 'rejected' | 'preempted';
|
|
26
|
+
}
|
|
27
|
+
export declare class ReservationTable {
|
|
28
|
+
private readonly _byResource;
|
|
29
|
+
private readonly _byReserver;
|
|
30
|
+
private readonly _yieldPolicy;
|
|
31
|
+
private readonly _listeners;
|
|
32
|
+
private readonly _conflictLog;
|
|
33
|
+
private _maxConflictLog;
|
|
34
|
+
constructor(yieldPolicy?: YieldPolicy);
|
|
35
|
+
/**
|
|
36
|
+
* Reservation 을 추가. 같은 resource + 겹치는 window 에 다른 reservation 이
|
|
37
|
+
* 있으면 yield policy 가 어느 쪽이 양보할지 결정.
|
|
38
|
+
*
|
|
39
|
+
* 반환:
|
|
40
|
+
* - { ok: true, reservation } 충돌 없음
|
|
41
|
+
* - { ok: false, conflicts } 이 reservation 이 양보 (추가 안 됨)
|
|
42
|
+
* - { ok: 'preempted', reservation, evicted } 기존 reservation 들이 양보 (제거됨)
|
|
43
|
+
*
|
|
44
|
+
* preempted 케이스는 호출자가 evicted reservation 의 reserver 들에게
|
|
45
|
+
* notification 하고 reroute 하도록 함.
|
|
46
|
+
*/
|
|
47
|
+
add(input: Omit<Reservation, 'id'>): AddResult;
|
|
48
|
+
/** Phase K — 충돌 로그 (rejected / preempted). 시간순 누적. */
|
|
49
|
+
conflictLog(): readonly ConflictRecord[];
|
|
50
|
+
/** maxEntries 설정 (테스트용). */
|
|
51
|
+
setMaxConflictLog(n: number): void;
|
|
52
|
+
private _appendConflictLog;
|
|
53
|
+
/**
|
|
54
|
+
* 미리 충돌 가능성 검사 (add 안 함). plan 단계에서 reservation 을 사전 검증할 때.
|
|
55
|
+
*/
|
|
56
|
+
conflicts(resource: string, window: TimeWindow): Reservation[];
|
|
57
|
+
/** 한 reservation 회수. 도착 완료 또는 cancel 시. */
|
|
58
|
+
release(reservation: Reservation): void;
|
|
59
|
+
/** 같은 reserver 의 모든 reservation 일괄 해제. */
|
|
60
|
+
releaseAllOf(reserverId: string): Reservation[];
|
|
61
|
+
/** 특정 resource 의 모든 reservation (read-only 사본). */
|
|
62
|
+
forResource(resource: string): readonly Reservation[];
|
|
63
|
+
/** 특정 reserver 의 모든 reservation. */
|
|
64
|
+
forReserver(reserverId: string): readonly Reservation[];
|
|
65
|
+
/** 모든 reservation. */
|
|
66
|
+
all(): readonly Reservation[];
|
|
67
|
+
/** 청소 (테스트용). */
|
|
68
|
+
clear(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Listener 등록. observability (Atlas extension 등) 를 위함.
|
|
71
|
+
*/
|
|
72
|
+
subscribe(listener: (event: ReservationEvent) => void): () => void;
|
|
73
|
+
private _insert;
|
|
74
|
+
private _remove;
|
|
75
|
+
private _emit;
|
|
76
|
+
}
|
|
77
|
+
export type ReservationEvent = {
|
|
78
|
+
kind: 'added';
|
|
79
|
+
reservation: Reservation;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'released';
|
|
82
|
+
reservation: Reservation;
|
|
83
|
+
} | {
|
|
84
|
+
kind: 'evicted';
|
|
85
|
+
reservation: Reservation;
|
|
86
|
+
by: Reservation;
|
|
87
|
+
};
|
|
88
|
+
export type AddResult = {
|
|
89
|
+
ok: true;
|
|
90
|
+
reservation: Reservation;
|
|
91
|
+
} | {
|
|
92
|
+
ok: 'preempted';
|
|
93
|
+
reservation: Reservation;
|
|
94
|
+
evicted: Reservation[];
|
|
95
|
+
} | {
|
|
96
|
+
ok: false;
|
|
97
|
+
conflicts: Conflict[];
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Singleton — 단일 시뮬레이션 instance 내 공유. 테스트는 자체 인스턴스 만드는 걸 권장.
|
|
101
|
+
*/
|
|
102
|
+
export declare const reservationTable: ReservationTable;
|
|
103
|
+
//# sourceMappingURL=reservation-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reservation-table.d.ts","sourceRoot":"","sources":["../../src/navigation/reservation-table.ts"],"names":[],"mappings":"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"}
|