@g1cloud/entity-modeler-next 5.2.25 → 5.2.26
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/agent/resolver.d.ts +20 -0
- package/dist/editor/commandPlans.d.ts +24 -0
- package/dist/entity-modeler.js +4261 -4236
- package/dist/entity-modeler.umd.cjs +19 -19
- package/package.json +1 -1
package/dist/agent/resolver.d.ts
CHANGED
|
@@ -486,7 +486,27 @@ export type ResolveError = {
|
|
|
486
486
|
* 조용히 name으로 매칭하면 *지정하지 않은 키로 해소된 결과*가 성공으로 돌아온다(엔티티 핸들의 `by`는
|
|
487
487
|
* 실제로 키를 고정하므로 같은 필드가 대상에 따라 다르게 동작하는 무신호 비대칭). `by`를 빼거나 `'name'`으로.
|
|
488
488
|
*/
|
|
489
|
+
/**
|
|
490
|
+
* 핸들의 **형상**이 계약과 다르다 — 값이 아니라 «모양»이 틀렸다(`ref` 없음 · 객체 아님 ·
|
|
491
|
+
* 관계 핸들에 `from`/`to` 없음).
|
|
492
|
+
*
|
|
493
|
+
* ★★**왜 별 코드인가**: 종전엔 이 입력이 `matchEntities` 말단까지 흘러가 **`TypeError`(500)** 로 터졌다.
|
|
494
|
+
* 라우트가 그것을 잡지 못해 호출자는 «무엇이 틀렸는지» 없이 `Server Error` 만 받는다 — 이 파일의 다른
|
|
495
|
+
* 거부들이 전부 *고칠 방향*을 동봉하는 것과 정반대이고, **AI 무인 경로에 직접 해가 된다**(2026-09-03
|
|
496
|
+
* 실측: 그 500 을 「호스트 op 어휘가 죽었다」로 오진해 raw `/ops` 우회까지 했다).
|
|
497
|
+
* ⚠️말단에서 조용히 빈 배열을 돌려주는 방어는 **답이 아니다** — 그러면 `*-not-found` 로 둔갑해
|
|
498
|
+
* *「대상이 없다」* 로 읽힌다(실제로는 «찾아보지도 못했다»).
|
|
499
|
+
*
|
|
500
|
+
* `expected` 는 기대 형상을 문자열로 동봉한다 — 관계 핸들은 **`{from:{ref}, to:{ref}}`**(양 끝 엔티티로
|
|
501
|
+
* 지목)이고 `{ref, by}` 가 아니다. 그 혼동이 실제 발생한 형태다.
|
|
502
|
+
*/
|
|
489
503
|
| {
|
|
504
|
+
code: 'handle-shape-invalid';
|
|
505
|
+
opIndex: number;
|
|
506
|
+
where: string;
|
|
507
|
+
expected: string;
|
|
508
|
+
got: string;
|
|
509
|
+
} | {
|
|
490
510
|
code: 'handle-by-unsupported';
|
|
491
511
|
opIndex: number;
|
|
492
512
|
entity: Handle;
|
|
@@ -126,6 +126,30 @@ export declare function flattenEmbeddableColumns(embeddable: Entity): DbColumn[]
|
|
|
126
126
|
* plan은 construction 시점 고정(결정적 redo) — childReconcileWithCascade와 동일 산식을 인라인한다.
|
|
127
127
|
*/
|
|
128
128
|
export declare function leavingEmbeddableCommands(logical: LogicalModel, id: ModelId): Command[];
|
|
129
|
+
/**
|
|
130
|
+
* `end1.navigable` 토글의 동반 명령 — inverse nav(부모 `RELATION_REF` 속성) **생성/삭제**.
|
|
131
|
+
*
|
|
132
|
+
* ★**여기로 추출된 경위**(2026-09-03): 종전엔 `editor/association.ts` 의 `updateAssociationEnd` 에
|
|
133
|
+
* 인라인돼 있었고, 그래서 AI(op) 경로가 `navigable-toggle-unsupported` 로 **통째 거부**됐다. 조립을
|
|
134
|
+
* 순수 함수로 내리면 GUI 는 `Command` 로 실행하고 AI 는 `planOpsFromCommands` 로 op 로 펼친다
|
|
135
|
+
* (`enteringValueTypeCommands` 와 같은 처방 · 사용자 목표: *「사람이 조작 안 하는 게 목표」*).
|
|
136
|
+
*
|
|
137
|
+
* ★**불변식**: `navigable=true ⟺ 부모에 RELATION_REF nav 속성 존재`(단일 진실). 이것이 깨지면 로드
|
|
138
|
+
* 자가치유가 클라마다 비결정 실체화를 반복하거나(true) 실체화된 nav 가 고아로 남는다(false) —
|
|
139
|
+
* 그래서 「patch 만 흘리기」가 금지였고, 동반 명령을 함께 내는 이 함수가 그 답이다.
|
|
140
|
+
*
|
|
141
|
+
* ⚠️**end2 는 대상이 아니다** — JPA 소유측 참조는 관계 존재와 동치라 고정 true 이고, 그쪽은 **불변식이라
|
|
142
|
+
* 닫힌 채가 정답**이다(참조 없는 FK 는 관계가 아니라 일반 컬럼으로 모델링).
|
|
143
|
+
* ⚠️EMBED 관계는 제외 — 표시 속성 모델이 별도다.
|
|
144
|
+
*
|
|
145
|
+
* 반환은 **동반 명령만**이다(`updateAssociationEnd` 자체는 호출부가 낸다 — `leavingEmbeddableCommands`
|
|
146
|
+
* 와 같은 계약). ⚠️단 end patch 에 실어야 할 **`attributeRef`·`navFieldNameHint`** 가 이 계획에서
|
|
147
|
+
* 결정되므로 그 조각을 함께 돌려준다(호출부가 자기 patch 에 머지).
|
|
148
|
+
*/
|
|
149
|
+
export declare function navigableToggleCommands(logical: LogicalModel, assocId: ModelId, next: boolean): {
|
|
150
|
+
cmds: Command[];
|
|
151
|
+
endPatch: Record<string, unknown>;
|
|
152
|
+
} | null;
|
|
129
153
|
/**
|
|
130
154
|
* 값 타입(임베더블·직렬화 타입)으로 **진입**할 때의 동반 명령 — `updateEntity(stereotype)` 앞뒤에 합성한다.
|
|
131
155
|
*
|