@g1cloud/entity-modeler-next 5.2.8 → 5.2.10
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/symbolicOp.d.ts +7 -0
- package/dist/core/columnResolve.d.ts +25 -1
- package/dist/core/types.d.ts +30 -0
- package/dist/entity-modeler-next.css +1 -1
- package/dist/entity-modeler.js +10039 -9976
- package/dist/entity-modeler.umd.cjs +27 -27
- package/dist/i18n/ko.d.ts +1 -0
- package/dist/view/useAttributeEditing.d.ts +3 -0
- package/package.json +1 -1
|
@@ -112,6 +112,13 @@ export interface AttrSpec {
|
|
|
112
112
|
* 속성 자체는 단일 식별자 `name`만 갖고, 다국어 업무명은 컬럼에 붙는다. 컬럼 생성 시에만 의미.
|
|
113
113
|
*/
|
|
114
114
|
columnLogicalName?: MultiLangText;
|
|
115
|
+
/**
|
|
116
|
+
* **필드** 논리명(다국어) — `Attribute.fieldLogicalName`. 위 `columnLogicalName`(컬럼에 붙는 논리명)과
|
|
117
|
+
* **다른 축**이고, 컬럼이 없는 자리(직렬화 타입 `SERIALIZED_TYPE` 의 자기 필드)의 논리명이 여기 산다.
|
|
118
|
+
* 그 자리는 `dbAttrs` 가 구조적으로 0이라 컬럼 논리명을 줄 데가 없다.
|
|
119
|
+
* ⚠️컬럼이 있는 자리에서는 컬럼 논리명이 이긴다(`core/columnResolve.effectiveLogicalName`).
|
|
120
|
+
*/
|
|
121
|
+
fieldLogicalName?: MultiLangText;
|
|
115
122
|
/** dbAttr UNIQUE 제약. */
|
|
116
123
|
unique?: boolean;
|
|
117
124
|
/** dbAttr 갱신 가능 여부(JPA @Column(updatable=)). */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Attribute, DbColumn, EmbeddableCatalog, Entity, LogicalModel, ModelId } from './types';
|
|
1
|
+
import { Attribute, DbColumn, EmbeddableCatalog, Entity, LogicalModel, ModelId, MultiLangText } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* 임베더블이 **선언하는 슬롯** 하나 — 배열 인덱스가 곧 사용처(owner) 슬롯 위치다.
|
|
4
4
|
*
|
|
@@ -62,6 +62,30 @@ export interface ColumnResolveContext {
|
|
|
62
62
|
* 대다수 정상 데이터가 도로 빈 값이 된다. 캔버스 `EntityNode.effectiveAttr`가 쓰던 시맨틱과 동일.
|
|
63
63
|
*/
|
|
64
64
|
export declare function resolveEffectiveColumn(attr: Attribute, col: DbColumn, index: number, entity: Entity | undefined, model: LogicalModel, ctx?: ColumnResolveContext): DbColumn;
|
|
65
|
+
/**
|
|
66
|
+
* MultiLangText 에 실제로 값이 있는가 — 빈 객체·전 로케일 공백은 없는 것으로 본다.
|
|
67
|
+
*
|
|
68
|
+
* ★**모듈 밖으로 열어 둔다**(종전 비공개 `hasText`) — 논리명은 객체 축이라 `||`·`??` 로는 갈리지 않고,
|
|
69
|
+
* 그 판정을 소비처가 각자 재기술하면 어긋난다. 지금 셋이 같은 것을 물어야 한다: 실효 컬럼 해소(아래),
|
|
70
|
+
* 스테레오타입 전환 시 논리명 이전(`editor/commandPlans`), 편집·표시 뷰의 폴백 판정.
|
|
71
|
+
*/
|
|
72
|
+
export declare function hasMultiLangText(t: MultiLangText | undefined): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* **실효 논리명** — 컬럼 논리명이 있으면 그것, 없으면 «필드» 논리명(`Attribute.logicalName`).
|
|
75
|
+
*
|
|
76
|
+
* ★두 저장 자리를 한 값으로 접는 **단일 출처**다. 논리명은 원래 `DbColumn` 에만 있었는데 컬럼이 없는
|
|
77
|
+
* 자리(직렬화 타입)에는 넣을 데가 없었고, 그래서 `Attribute.fieldLogicalName` 이 신설됐다(그 필드 주석 참조).
|
|
78
|
+
* 소비처가 넷이라(캔버스 행 · 탐색기 라벨·검색 · 코드젠 javadoc) 각자 `?? ` 로 재기술하면 어긋난다 —
|
|
79
|
+
* 이 리포가 `excludeDDLGeneration` 에서 정확히 그렇게 당했다.
|
|
80
|
+
*
|
|
81
|
+
* ★**컬럼이 이긴다.** 컬럼 논리명이 더 구체적인 자리이고(임베드 슬롯 상속을 이미 지난 값일 수 있다),
|
|
82
|
+
* 필드 논리명은 「컬럼이 말해 주지 않을 때」의 값이다. 그래서 직렬화 → 일반 전환 후에도 표시가 유지되고
|
|
83
|
+
* (컬럼이 없거나 논리명이 비어 필드 값이 나온다), 사용자가 컬럼 논리명을 입력하면 그쪽으로 넘어간다.
|
|
84
|
+
*
|
|
85
|
+
* ⚠️판정은 **내용 유무**다(`??` 아님) — 빈 객체 `{}` 는 편집 중간 상태로 실재하고, 그것을 「값 있음」으로
|
|
86
|
+
* 읽으면 폴백이 조용히 막힌다(`resolveEffectiveColumn` 의 임베드 상속이 같은 이유로 같은 판정을 쓴다).
|
|
87
|
+
*/
|
|
88
|
+
export declare function effectiveLogicalName(attr: Pick<Attribute, 'fieldLogicalName'>, col: Pick<DbColumn, 'logicalName'> | undefined): MultiLangText | undefined;
|
|
65
89
|
/**
|
|
66
90
|
* 실효 물리명 — override(비어있지 않은 physicalName)가 있으면 그 값, 없으면 상속 기본값.
|
|
67
91
|
* 컬럼 충돌 판정(CHK-NAME-2)은 raw `''`가 아니라 이 값으로 해야 한다: 한 테이블에 같은 임베더블
|
package/dist/core/types.d.ts
CHANGED
|
@@ -230,6 +230,36 @@ export interface Attribute {
|
|
|
230
230
|
* undefined/false면 불변(어노테이션 인자 생략). naturalId=false일 땐 무의미(직렬화 시 정리).
|
|
231
231
|
*/
|
|
232
232
|
naturalIdMutable?: boolean;
|
|
233
|
+
/**
|
|
234
|
+
* 이 **필드**의 업무 논리명 — **컬럼 없는 자리 전용**(직렬화 타입 `SERIALIZED_TYPE` 의 자기 필드).
|
|
235
|
+
*
|
|
236
|
+
* ★**`DbColumn.logicalName` 과 다른 축이다.** 종전엔 논리명이 컬럼에만 있었고(`DbColumn`), 그 자리가
|
|
237
|
+
* 「필드의 표시명」 역할까지 겸했다. 컬럼 축을 지우는 전환(`columnAxisCleanupCommands`)이 들어오면서
|
|
238
|
+
* 논리명이 **딸려 나갔고**, 채울 자리도 함께 사라졌다 — 캔버스 LOGICAL 모드가 직렬화 타입의 모든 행에
|
|
239
|
+
* `(논리명)` 플레이스홀더를 띄우는데 **넣을 수단이 없는** 상태였다(2026-08-31 사용자 보고 ·
|
|
240
|
+
* 실측 13종 45필드 전량). 규율 ①(*넣는 자리 / 보이는 자리*)의 재발이고, 규율 ②의 **반대편 실수**다:
|
|
241
|
+
* 논리명은 컬럼 축에 «저장»돼 있었을 뿐 컬럼 축의 «필드»가 아니었다.
|
|
242
|
+
*
|
|
243
|
+
* ★**편집 노출은 `isColumnlessStereotype` 자리에서만** — 컬럼 있는 자리는 컬럼 논리명을 계속 쓴다.
|
|
244
|
+
* 전 속성에 열면 일반 속성에서 논리명 입력란이 **둘로 보인다**(같은 개념의 두 저장 자리). 자리마다
|
|
245
|
+
* 하나만 유효한 것이 의도다.
|
|
246
|
+
*
|
|
247
|
+
* ★**전환 시 값이 이전된다** — 컬럼 축을 비우는 자리(`columnAxisCleanupCommands` 단일 출처)가
|
|
248
|
+
* `dbAttrs[0].logicalName` 을 여기로 옮긴다(대상이 비었을 때만 = 비파괴). 반대 방향(직렬화 → 일반)은
|
|
249
|
+
* **비대칭**이다: 옮길 컬럼이 없으므로 값을 그대로 남기고, 실효 해소(`columnResolve`)가 「컬럼 논리명이
|
|
250
|
+
* 비면 이 값」 폴백으로 흡수한다(임베드 슬롯 상속과 같은 관용구). 그래서 이탈 후에도 표시가 유지되고
|
|
251
|
+
* 사용자가 컬럼 논리명을 입력하면 그쪽이 이긴다.
|
|
252
|
+
*
|
|
253
|
+
* ⚠️`description` 과 다르다 — 논리명은 **짧은 이름**(캔버스 라벨·탐색기 검색에 들어간다)이고 설명은
|
|
254
|
+
* 문장이다. 코드젠 javadoc 은 논리명 우선 · 없으면 설명으로 폴백한다(사용자 결정 2026-08-31).
|
|
255
|
+
*
|
|
256
|
+
* ★**이름에 `field` 를 박은 이유** — `DbColumn.logicalName` 과 같은 이름을 쓰면 세 자리가 깨진다:
|
|
257
|
+
* ①`attribute.update` 의 **평탄 patch 어휘**에서 충돌한다(resolver 의 `DBATTR_FLAT_KEYS` 가 평탄
|
|
258
|
+
* `logicalName` 을 이미 «컬럼 논리명» 으로 소유하고, 그 분리는 분할 검증이 지키는 불변식이다)
|
|
259
|
+
* ②그래서 어휘 키만 다르게 두면 *「patch 키 = 모델 필드명」* 원칙이 깨진다 ③코드에서 `a.logicalName`
|
|
260
|
+
* 과 `col.logicalName` 이 한 글자 차이라 오독하고 grep 이 두 축을 못 가른다.
|
|
261
|
+
*/
|
|
262
|
+
fieldLogicalName?: MultiLangText;
|
|
233
263
|
description?: MultiLangText;
|
|
234
264
|
attributeGroup?: string;
|
|
235
265
|
groupCode?: string;
|