@g1cloud/entity-modeler-next 5.0.0-alpha.4 → 5.0.0-alpha.6
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/adapter/persisted.d.ts +4 -0
- package/dist/agent/resolver.d.ts +32 -1
- package/dist/agent/symbolicOp.d.ts +47 -0
- package/dist/core/dbTypes.d.ts +9 -0
- package/dist/core/types.d.ts +11 -0
- package/dist/entity-modeler-next.css +1 -1
- package/dist/entity-modeler.js +9049 -8859
- package/dist/entity-modeler.umd.cjs +11 -11
- package/package.json +1 -1
|
@@ -47,6 +47,10 @@ export interface PAttribute {
|
|
|
47
47
|
identifier: boolean;
|
|
48
48
|
notNull: boolean;
|
|
49
49
|
transient_?: boolean;
|
|
50
|
+
/** Hibernate @NaturalId(자연키/비즈니스 키). 속성 레벨. v1 레거시엔 없는 신규 옵션. */
|
|
51
|
+
naturalId?: boolean;
|
|
52
|
+
/** @NaturalId(mutable=true). undefined/false=불변(Hibernate 기본). */
|
|
53
|
+
naturalIdMutable?: boolean;
|
|
50
54
|
description?: MultiLangText;
|
|
51
55
|
attributeGroup?: string;
|
|
52
56
|
groupCode?: string;
|
package/dist/agent/resolver.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LogicalModel, ModelId } from '../core/types';
|
|
1
|
+
import { EmbeddableCatalog, LogicalModel, ModelId } from '../core/types';
|
|
2
2
|
import { OpShape } from '../command/op';
|
|
3
3
|
import { AssocHandle, Handle, SymbolicOp } from './symbolicOp';
|
|
4
4
|
/** 해소 실패 — 어느 심볼릭 op(`opIndex`)의 어떤 핸들이 0개/복수 매칭인지. */
|
|
@@ -104,6 +104,31 @@ export type ResolveError = {
|
|
|
104
104
|
code: 'pending-entity-ref';
|
|
105
105
|
opIndex: number;
|
|
106
106
|
handle: Handle;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* embeddableOverrides가 있으나 `type`이 주입된 임베더블 카탈로그의 어떤 엔트리와도 매칭되지 않음
|
|
110
|
+
* (카탈로그 미주입이거나 embeddable 아닌 type). 서브컬럼 오버라이드 silent drop 방지.
|
|
111
|
+
*/
|
|
112
|
+
| {
|
|
113
|
+
code: 'embeddable-type-unresolved';
|
|
114
|
+
opIndex: number;
|
|
115
|
+
entity: Handle;
|
|
116
|
+
handle: Handle;
|
|
117
|
+
}
|
|
118
|
+
/** EMBED_PREDEF SHARED_REF 서브컬럼의 공유 대상 물리명이 소속 엔터티 내 컬럼과 0개 매칭. */
|
|
119
|
+
| {
|
|
120
|
+
code: 'shared-column-target-not-found';
|
|
121
|
+
opIndex: number;
|
|
122
|
+
entity: Handle;
|
|
123
|
+
handle: Handle;
|
|
124
|
+
}
|
|
125
|
+
/** EMBED_PREDEF SHARED_REF 공유 대상 물리명이 복수 컬럼과 매칭(모호). */
|
|
126
|
+
| {
|
|
127
|
+
code: 'shared-column-target-ambiguous';
|
|
128
|
+
opIndex: number;
|
|
129
|
+
entity: Handle;
|
|
130
|
+
handle: Handle;
|
|
131
|
+
matches: ModelId[];
|
|
107
132
|
};
|
|
108
133
|
export type ResolveResult = {
|
|
109
134
|
ok: true;
|
|
@@ -115,6 +140,12 @@ export type ResolveResult = {
|
|
|
115
140
|
export interface ResolverOptions {
|
|
116
141
|
/** modelId 발급기(주입 시 테스트 결정성). 기본 newId. */
|
|
117
142
|
mkId?: () => ModelId;
|
|
143
|
+
/**
|
|
144
|
+
* predefined 임베더블 카탈로그(호스트 주입). `attribute.add`/inline fold의 `spec.type`이 엔트리 `type`과
|
|
145
|
+
* 매칭되면 EMBED_PREDEF(다중 dbAttr)로 확장한다. 미주입(기본 [])이면 확장 없이 NORMAL — 카탈로그 없이는
|
|
146
|
+
* type이 embeddable인지 판정 불가하므로 graceful degrade(현행 동작 유지). 서버 resolve 경로가 주입 책임.
|
|
147
|
+
*/
|
|
148
|
+
embeddableCatalog?: EmbeddableCatalog;
|
|
118
149
|
}
|
|
119
150
|
/**
|
|
120
151
|
* 심볼릭 op 배치를 OpShape 배치로 해소한다.
|
|
@@ -34,6 +34,14 @@ export interface EntitySpec {
|
|
|
34
34
|
stereotype?: ClassStereotype;
|
|
35
35
|
/** 설정 시 `table.physicalName`. */
|
|
36
36
|
physicalName?: string;
|
|
37
|
+
/**
|
|
38
|
+
* JPA `@Version`(낙관적 락) 사용 여부 → `Entity.jpaAttrs.useVersion`. 코드의 `@Version` 필드는 별도 속성으로
|
|
39
|
+
* 모델링하지 않고 이 엔티티 레벨 플래그로 흡수한다(버전 컬럼은 호스트 코드젠 소유). resolver가 true일 때만
|
|
40
|
+
* `jpaAttrs.useVersion:true`를 세팅(false/미설정은 생략 — round-trip diff 방지). *기존* 엔티티에 켤 땐 이 스펙이
|
|
41
|
+
* 아니라 `entity.update` patch의 **dotted key** `{'jpaAttrs.useVersion': true}`를 써야 형제 jpaAttrs 플래그를
|
|
42
|
+
* 통째 $set로 덮어쓰지 않는다(호스트 opInterpreter는 patch를 per-key $set).
|
|
43
|
+
*/
|
|
44
|
+
useVersion?: boolean;
|
|
37
45
|
/** inline 속성 — 배열 순서가 곧 `order`. GroupCodeEnum+groupCode 규칙은 `attribute.add`와 동일하게 강제. */
|
|
38
46
|
attributes?: AttrSpec[];
|
|
39
47
|
/** inline 인덱스 — 컬럼 핸들은 *이 엔티티가 inline으로 만드는* dbAttr 내에서 해소된다(속성 inline 동반 전제). */
|
|
@@ -52,6 +60,12 @@ export interface AttrSpec {
|
|
|
52
60
|
type: string;
|
|
53
61
|
identifier?: boolean;
|
|
54
62
|
notNull?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* JPA `@Transient` — 비영속 속성. true면 `Attribute.transient:true`(속성 레벨 플래그). 컬럼을 만들지 않는
|
|
65
|
+
* 속성이므로 physicalName/dataType 등 컬럼 필드는 함께 주지 않는다(주면 dbAttr가 생성됨). false/미설정은
|
|
66
|
+
* 생략(round-trip diff 방지). *기존* 속성에 켤 땐 `attribute.update` patch `{transient:true}`로도 가능.
|
|
67
|
+
*/
|
|
68
|
+
transient?: boolean;
|
|
55
69
|
/** 설정 시 단일 dbAttr 컬럼 생성(미설정이면 name을 물리명으로). */
|
|
56
70
|
physicalName?: string;
|
|
57
71
|
/** dbAttr 물리 타입(예: 'BIGINT'). physicalName/dataType/length/scale 중 하나라도 있으면 dbAttr 생성. */
|
|
@@ -80,6 +94,39 @@ export interface AttrSpec {
|
|
|
80
94
|
unique?: boolean;
|
|
81
95
|
/** dbAttr 갱신 가능 여부(JPA @Column(updatable=)). */
|
|
82
96
|
updatable?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* predefined 임베더블 서브컬럼 오버라이드 — `type`이 호스트 주입 임베더블 카탈로그 엔트리와 매칭될 때만
|
|
99
|
+
* 의미. resolver가 카탈로그 fields를 그대로 펼친 뒤(EMBED_PREDEF, 다중 dbAttr) 이 배열을 **필드명**으로
|
|
100
|
+
* 매칭해 서브컬럼을 덮어쓴다(JPA `@AttributeOverride` 대응). 미설정 서브컬럼은 카탈로그 기본을 상속한다.
|
|
101
|
+
* 카탈로그 미매칭 type에 이 배열을 주면 resolver가 `embeddable-type-unresolved`로 거부(silent drop 방지).
|
|
102
|
+
*/
|
|
103
|
+
embeddableOverrides?: EmbeddableColumnOverride[];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* predefined 임베더블(EMBED_PREDEF)의 개별 서브컬럼 오버라이드. 매칭 키는 카탈로그 필드명
|
|
107
|
+
* (`EmbeddableCatalogField.name`, 예: 'amount'·'currency') — 순서 독립. 미설정 필드는 오버라이드 없음(카탈로그 상속).
|
|
108
|
+
*/
|
|
109
|
+
export interface EmbeddableColumnOverride {
|
|
110
|
+
/** 대상 카탈로그 필드명(EmbeddableCatalogField.name). 예: 'amount', 'currency'. */
|
|
111
|
+
field: string;
|
|
112
|
+
/** 서브컬럼 물리명 오버라이드(@AttributeOverride column name). 미설정 시 카탈로그 기본 컬럼명 상속. */
|
|
113
|
+
physicalName?: string;
|
|
114
|
+
/** 서브컬럼 길이 오버라이드. */
|
|
115
|
+
length?: number;
|
|
116
|
+
/** 서브컬럼 소수 자릿수 오버라이드. */
|
|
117
|
+
scale?: number;
|
|
118
|
+
/** JPA @Column(insertable=). OWN 컬럼에만 저장(SHARED_REF는 타깃 파생). */
|
|
119
|
+
insertable?: boolean;
|
|
120
|
+
/** JPA @Column(updatable=). OWN 컬럼에만 저장(SHARED_REF는 타깃 파생). */
|
|
121
|
+
updatable?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* SHARED_REF — 이 서브컬럼이 자체 물리 컬럼을 갖지 않고 같은 엔터티의 다른 컬럼(**물리명**)을 공유해
|
|
124
|
+
* read-only 투영됨(대표: Money의 currency가 별도 스칼라 통화 컬럼 공유). 설정 시 resolver가 그 물리명을
|
|
125
|
+
* 소속 엔터티 내 기존 컬럼 modelId로 해소해 `DbColumn.sharedColumnRef`로 바인딩하고 physicalName·
|
|
126
|
+
* insertable·updatable은 저장하지 않는다(타깃 파생). 타깃 컬럼은 해소 시점 존재해야 한다(부재=거부).
|
|
127
|
+
* JPA 코드에서 currency 서브컬럼의 `insertable=false && updatable=false`가 이 모드의 시그니처.
|
|
128
|
+
*/
|
|
129
|
+
sharedColumnPhysicalName?: string;
|
|
83
130
|
}
|
|
84
131
|
/** association.add 페이로드 — from/to 엔티티는 resolver가 해소, modelId 발급 + end 조립. */
|
|
85
132
|
export interface AssocSpec {
|
package/dist/core/dbTypes.d.ts
CHANGED
|
@@ -31,6 +31,15 @@ export declare function dbTypeLabel(value: string): string;
|
|
|
31
31
|
* TEXT류(LONGVARCHAR·CLOB·BLOB)·고정 폭 타입(INTEGER·DATE·BOOLEAN 등)은 길이 무의미라 제외.
|
|
32
32
|
*/
|
|
33
33
|
export declare const LENGTH_REQUIRED_DATA_TYPES: ReadonlySet<string>;
|
|
34
|
+
/**
|
|
35
|
+
* scale(소수점 이하 자릿수)이 의미를 갖는 타입 — 정확 수치형(NUMERIC·DECIMAL)뿐이다. 여기서 length는
|
|
36
|
+
* precision(전체 자릿수), scale은 그중 소수부. VARCHAR·CHAR 등 문자/이진 길이 타입과 정수·날짜·불리언
|
|
37
|
+
* 같은 고정 폭 타입엔 scale이 무의미하고, 근사 수치형(FLOAT·REAL·DOUBLE)은 precision만 가질 뿐 scale이 없다.
|
|
38
|
+
*
|
|
39
|
+
* 편집 UI가 이 집합 밖 타입에서 scale 입력을 비활성화하는 어포던스의 단일 출처(타입 메타데이터는 이 카탈로그
|
|
40
|
+
* 소유 — LENGTH_REQUIRED_DATA_TYPES와 대칭). 타입을 이 집합 밖으로 바꾸면 무의미해진 scale은 자동 환원한다.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SCALE_APPLICABLE_DATA_TYPES: ReadonlySet<string>;
|
|
34
43
|
/**
|
|
35
44
|
* dataType 셀렉트 items — 실 컬럼 후보 + 현재값 폴백 합성.
|
|
36
45
|
*
|
package/dist/core/types.d.ts
CHANGED
|
@@ -141,6 +141,17 @@ export interface Attribute {
|
|
|
141
141
|
identifier: boolean;
|
|
142
142
|
notNull: boolean;
|
|
143
143
|
transient?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Hibernate `@NaturalId` — 이 속성이 엔터티의 자연키(비즈니스 키)임을 표시. PK(@Id)와는 별개 개념
|
|
146
|
+
* (자연키는 정의상 대리키가 아닌 도메인 유일 식별자). 프로퍼티 어노테이션이라 컬럼 레벨(unique)이 아니라
|
|
147
|
+
* 속성 레벨. false는 undefined로 환원해 라운드트립 diff 방지. v1 레거시엔 없는 신규 옵션(forward).
|
|
148
|
+
*/
|
|
149
|
+
naturalId?: boolean;
|
|
150
|
+
/**
|
|
151
|
+
* `@NaturalId(mutable = true)` — 자연키 값의 변경 허용. Hibernate 기본은 불변(mutable=false)이므로
|
|
152
|
+
* undefined/false면 불변(어노테이션 인자 생략). naturalId=false일 땐 무의미(직렬화 시 정리).
|
|
153
|
+
*/
|
|
154
|
+
naturalIdMutable?: boolean;
|
|
144
155
|
description?: MultiLangText;
|
|
145
156
|
attributeGroup?: string;
|
|
146
157
|
groupCode?: string;
|