@g1cloud/entity-modeler-next 5.2.18 → 5.2.19
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 +9 -2
- package/dist/core/indexCleanup.d.ts +7 -1
- package/dist/core/javaTypes.d.ts +13 -4
- package/dist/editor/attribute.d.ts +1 -1
- package/dist/editor/commandPlans.d.ts +2 -1
- package/dist/editor/controller.d.ts +6 -0
- package/dist/entity-modeler-next.css +1 -1
- package/dist/entity-modeler.js +4157 -4098
- package/dist/entity-modeler.umd.cjs +16 -16
- package/dist/i18n/ko.d.ts +1 -0
- package/package.json +3 -2
package/dist/agent/resolver.d.ts
CHANGED
|
@@ -287,9 +287,16 @@ export type ResolveError = {
|
|
|
287
287
|
}
|
|
288
288
|
/**
|
|
289
289
|
* attribute.update patch의 평탄 dbAttr 키를 스칼라 단일 컬럼으로 매핑할 수 없음. 스칼라(NORMAL·단일 dbAttr)면
|
|
290
|
-
* `dbAttrs[0]`로 자동 매핑되지만, 모호/불가한 대상은 거부한다: EMBED_PREDEF/다중 dbAttr(어느 컬럼인지 모호
|
|
291
|
-
*
|
|
290
|
+
* `dbAttrs[0]`로 자동 매핑되지만, 모호/불가한 대상은 거부한다: EMBED_PREDEF/다중 dbAttr(어느 컬럼인지 모호),
|
|
291
|
+
* dbAttrs 0개/transient(머지할 컬럼 없음), `sharedColumnRef` 평탄(opaque modelId),
|
|
292
292
|
* flat + dotted-dbAttrs 혼용($set 충돌). 통과 시 논리 노드 blind-write로 orphan 오염이라 거부.
|
|
293
|
+
*
|
|
294
|
+
* ★★**거부는 «갈 곳»을 함께 말해야 한다**(2026-09-02 정정 — 「모르는 값을 발명하지 말 것」의 짝):
|
|
295
|
+
* - **다중 dbAttr** → *바인딩* 축(물리명·정밀도·공유)은 `embeddableOverrides`, **개별 컬럼 필드**(논리명 등)는
|
|
296
|
+
* **dotted `dbAttrs.<i>.<field>`**. ⚠️종전엔 이 분기가 `embeddableOverrides` «만» 지목했는데 그 배열엔
|
|
297
|
+
* 논리명 축이 없어 **열린 문(dotted) 옆에서 막힌 문을 가리키고** 있었다(실사용에서 raw `/ops` 우회를
|
|
298
|
+
* 유발했다 — 불필요했다). dotted 는 아래 `attribute-patch-unknown-key` 가 이미 허용하는 접두다.
|
|
299
|
+
* - **dbAttrs 0개** → `fieldLogicalName`(아래 주석 — 이쪽은 처음부터 대안을 지목하고 있었다).
|
|
293
300
|
*/
|
|
294
301
|
| {
|
|
295
302
|
code: 'attribute-patch-dbattr-flat-key';
|
|
@@ -12,5 +12,11 @@ export type IndexColumnCleanup = {
|
|
|
12
12
|
*
|
|
13
13
|
* ⚠️한 조작에서 여러 속성이 사라지면 **한 번에** 넘길 것 — 속성마다 따로 호출하면 각 산출이 원본 기준이라
|
|
14
14
|
* 나중 패치가 앞의 정리를 되돌린다.
|
|
15
|
+
*
|
|
16
|
+
* ★`survivingColumnIds` — **속성은 사라지지만 그 컬럼은 살아남는** 조작용(`convertToPredefinedEmbed` 의
|
|
17
|
+
* 자리 보존 전환이 그렇다: 삭제+추가 합성이라 속성 id 는 갈리는데 승계된 dbAttr 은 modelId 째 다음
|
|
18
|
+
* 속성으로 넘어간다). 그 id 는 «이번 조작이 깨뜨린 ref» 가 아니므로 위 규율대로 정리 대상이 아니다 —
|
|
19
|
+
* 빼지 않으면 살아있는 컬럼을 가리키던 인덱스가 조용히 비고, 그것이 이 모듈이 막으려던 **무신호 소실**
|
|
20
|
+
* 그 자체가 된다. 미지정이면 종전과 같다(전부 고아).
|
|
15
21
|
*/
|
|
16
|
-
export declare function planIndexColumnCleanup(entity: Entity, removedAttributeIds: readonly ModelId[]): IndexColumnCleanup[];
|
|
22
|
+
export declare function planIndexColumnCleanup(entity: Entity, removedAttributeIds: readonly ModelId[], survivingColumnIds?: ReadonlySet<ModelId>): IndexColumnCleanup[];
|
package/dist/core/javaTypes.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Entity, Association, Attribute, DisplayMode, PredefinedCustomTypeCatalog } from './types';
|
|
1
|
+
import { Entity, Association, Attribute, DisplayMode, EmbeddableCatalog, PredefinedCustomTypeCatalog } from './types';
|
|
2
2
|
export interface JavaTypeDef {
|
|
3
3
|
/** 저장값 = 레거시 enum 상수명. Attribute.type에 그대로 들어간다. */
|
|
4
4
|
value: string;
|
|
@@ -81,10 +81,19 @@ export declare function isNullLoadUnsafePrimitive(javaType: string | undefined,
|
|
|
81
81
|
*/
|
|
82
82
|
export declare const SELECTABLE_JAVA_TYPES: readonly JavaTypeDef[];
|
|
83
83
|
/**
|
|
84
|
-
* 타입 셀렉트 items — ① 스칼라 후보 + ③ 주입 customtype 카탈로그 + 현재값 폴백 합성.
|
|
84
|
+
* 타입 셀렉트 items — ① 스칼라 후보 + ③ 주입 customtype 카탈로그 + ② 임베더블 + 현재값 폴백 합성.
|
|
85
85
|
*
|
|
86
86
|
* ③ `predefinedCustomTypes`(호스트 주입)는 ① 후보 뒤에 병합 노출한다 — 단일 컬럼이라 ①과 컬럼 구조가
|
|
87
|
-
* 같고
|
|
87
|
+
* 같고 ④ CustomType과 동질이므로 별도 진입이 아니라 같은 셀렉트에 둔다.
|
|
88
|
+
*
|
|
89
|
+
* ★②`embeddables`는 **컬럼 개수가 바뀌는** 선택지라 성격이 다르지만 그래도 여기 둔다(2026-09-02) —
|
|
90
|
+
* 목록에 없으면 EMBED_PREDEF 속성의 현재값이 아래 폴백으로만 보이고 **다른 타입으로 바꾸는 순간
|
|
91
|
+
* 되돌아갈 수 없다**. 그것이 직렬화 타입에서 실사용 보고로 드러났던 바로 그 함정이고(`serializedTypes`
|
|
92
|
+
* 주석), ②는 그 **두 번째 사본**이었다. 선택 시 부수효과(자리 보존 전환 = 삭제+추가 합성)는
|
|
93
|
+
* `editor/attribute.convertToPredefinedEmbed`가 소유한다 — 이 함수는 «고를 수 있게» 할 뿐이다.
|
|
94
|
+
* ⇒ 부수효과로 레거시 ③`CustomMoneyType`(1컬럼, 라벨 `Money`) 속성을 GUI에서 ②`Money`(2컬럼)로
|
|
95
|
+
* 승격할 수 있게 된다 — 종전엔 v1→v2 마이그레이션(`migrateLegacyMoney`)만이 그 경로였다. 두 항목은
|
|
96
|
+
* `Money` ↔ `Money (금액)` 로 갈려 보이고, 그것이 **레거시 값을 잃지 않으면서 옮겨 갈 수 있는** 상태다.
|
|
88
97
|
*
|
|
89
98
|
* open-bluesea BSSelect는 model-value가 items에 없으면 placeholder로 떨어뜨려 값이 빈칸으로 보인다(표시
|
|
90
99
|
* 손상). 현재값이 후보(① + 주입 ③) 밖(②임베더블 타입명·미주입 ③ customtype명·⑤ GroupCodeEnum·미지
|
|
@@ -100,7 +109,7 @@ export declare const SELECTABLE_JAVA_TYPES: readonly JavaTypeDef[];
|
|
|
100
109
|
* 타입으로 돌릴수 없는 상태」*). 폴백은 **밖에서 들어온 미지 타입**을 잃지 않기 위한 안전망이지
|
|
101
110
|
* «선택 가능한 타입»의 출처가 아니다 — 그 둘을 섞으면 편집이 한 방향으로만 흐른다.
|
|
102
111
|
*/
|
|
103
|
-
export declare function typeSelectItems(currentType: string, predefinedCustomTypes?: PredefinedCustomTypeCatalog, serializedTypes?: readonly string[]): JavaTypeDef[];
|
|
112
|
+
export declare function typeSelectItems(currentType: string, predefinedCustomTypes?: PredefinedCustomTypeCatalog, serializedTypes?: readonly string[], embeddables?: EmbeddableCatalog): JavaTypeDef[];
|
|
104
113
|
/**
|
|
105
114
|
* EMBED 표시 속성의 컬렉션 모드(`@ElementCollection`)를 판정한다 — 컬렉션이면 `collectionType`(기본
|
|
106
115
|
* LIST), 단일(`@Embedded`)이거나 EMBED가 아니면 undefined. 판정 권위는 임베더블을 가리키는 end의
|
|
@@ -22,4 +22,4 @@ export interface AttributeContext {
|
|
|
22
22
|
/** 삭제된 행을 선택이 가리키지 않도록 해제하는 쓰기(`removeAttributes`). */
|
|
23
23
|
selection: Ref<Selection>;
|
|
24
24
|
}
|
|
25
|
-
export declare function createAttributeApi(ctx: AttributeContext): Pick<EditorController, 'addPredefinedEmbed' | 'addSerializedTypeAttribute' | 'addAttribute' | 'addDivider' | 'updateAttribute' | 'setAttributeGroupCode' | 'setEmbedColumns' | 'removeAttribute' | 'removeAttributes' | 'setAttributeSwatch' | 'setAttributeSwatches' | 'reorderAttributes'>;
|
|
25
|
+
export declare function createAttributeApi(ctx: AttributeContext): Pick<EditorController, 'addPredefinedEmbed' | 'convertToPredefinedEmbed' | 'addSerializedTypeAttribute' | 'addAttribute' | 'addDivider' | 'updateAttribute' | 'setAttributeGroupCode' | 'setEmbedColumns' | 'removeAttribute' | 'removeAttributes' | 'setAttributeSwatch' | 'setAttributeSwatches' | 'reorderAttributes'>;
|
|
@@ -23,8 +23,9 @@ export declare function removeAttributeCommands(entityId: ModelId, attributeIds:
|
|
|
23
23
|
/**
|
|
24
24
|
* 누산된 제거가 남길 인덱스 dangling 정리 명령 — 조작의 서브명령 **맨 끝**에 한 번 붙인다.
|
|
25
25
|
* `logical`은 제거 **전** 상태여야 한다(사라지는 속성의 dbAttr modelId를 알아야 하므로).
|
|
26
|
+
* `survivingColumnIds`는 그대로 통과시킨다 — 의미·근거는 `core/indexCleanup.planIndexColumnCleanup` 소유.
|
|
26
27
|
*/
|
|
27
|
-
export declare function indexCleanupCommands(logical: LogicalModel, removed: RemovedAttributes): Command[];
|
|
28
|
+
export declare function indexCleanupCommands(logical: LogicalModel, removed: RemovedAttributes, survivingColumnIds?: ReadonlySet<ModelId>): Command[];
|
|
28
29
|
/**
|
|
29
30
|
* 식별자 전파 reconcile 계획을 자식 엔터티 대상 서브명령 배열로 변환.
|
|
30
31
|
* 1차 변경(관계 생성/삭제 등)과 함께 composite로 묶으면 전파 FK 동기화가 하나의 undo/redo
|
|
@@ -379,6 +379,12 @@ export interface EditorController {
|
|
|
379
379
|
* 대상 엔티티가 없으면 no-op(null).
|
|
380
380
|
*/
|
|
381
381
|
addPredefinedEmbed(entityId: ModelId, embeddableType: string): ModelId | null;
|
|
382
|
+
/**
|
|
383
|
+
* 기존 속성을 ② predefined 임베더블(EMBED_PREDEF)로 **자리 보존 전환** — 타입 셀렉트에서 임베더블을
|
|
384
|
+
* 고르는 경로. `addPredefinedEmbed`가 꼬리에 **새 행**을 만드는 것과 달리 이쪽은 그 자리에서 형상을
|
|
385
|
+
* 바꾼다(사용처 순서를 어긋내지 않는다). 대상이 없거나 전환 불가(FK 파생·식별자·이미 EMBED)면 no-op(null).
|
|
386
|
+
*/
|
|
387
|
+
convertToPredefinedEmbed(entityId: ModelId, attributeId: ModelId, embeddableType: string): ModelId | null;
|
|
382
388
|
addAttribute(entityId: ModelId, partial?: Partial<Attribute>): ModelId | null;
|
|
383
389
|
/**
|
|
384
390
|
* 시각 구획 행(DIVIDER) 추가 — 거대 엔티티에서 속성 묶음을 끊는 구분선. DB 컬럼·타입·식별자 없이
|