Merge branch 'develop'
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@
|
||||
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
|
||||
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
|
||||
|
||||
## [7.0.1] - 2026-07-02
|
||||
## [7.0.1] - 2026-07-03
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@@ -606,7 +606,7 @@ iteration 내부에서 상태를 관리하는 컴포넌트(Input, Select, TagInp
|
||||
- id가 없으면 동적으로 행 추가/삭제 시 이전 인스턴스의 내부 상태가 새 인스턴스에 표시될 수 있음
|
||||
- 특히 내부 상태를 관리하는 컴포넌트(TagInput, Select, Input 등)에서 중요
|
||||
|
||||
> **iteration id 표현식 보간** (engine-v1.52.4+): 노드의 최상위 `id` 필드에 쓴 표현식(`id: "item_{{$idx}}"`, `id: "row_{{item.id}}"` 등)은 일반 렌더 경로(DynamicRenderer)에서 iteration 컨텍스트로 보간되어 행마다 고유 DOM id 가 된다. `index_var`(예 `"index_var": "$idx"`) 또는 `item_var` 의 필드를 활용한다. 정적 id 를 iteration 안에 그대로 두면 모든 행이 같은 HTML id 를 갖게 되어 W3C id 유일성을 위반하므로(렌더 누락까지 유발), 반복 항목 노드와 그 자식의 id 는 반드시 동적화한다. 내부 식별(slot 등록·React key)에는 원본 id 가 쓰이므로 보간은 DOM 출력에만 적용된다.
|
||||
> **iteration id 표현식 보간** (engine-v1.50.0+): 노드의 최상위 `id` 필드에 쓴 표현식(`id: "item_{{$idx}}"`, `id: "row_{{item.id}}"` 등)은 일반 렌더 경로(DynamicRenderer)에서 iteration 컨텍스트로 보간되어 행마다 고유 DOM id 가 된다. `index_var`(예 `"index_var": "$idx"`) 또는 `item_var` 의 필드를 활용한다. 정적 id 를 iteration 안에 그대로 두면 모든 행이 같은 HTML id 를 갖게 되어 W3C id 유일성을 위반하므로(렌더 누락까지 유발), 반복 항목 노드와 그 자식의 id 는 반드시 동적화한다. 내부 식별(slot 등록·React key)에는 원본 id 가 쓰이므로 보간은 DOM 출력에만 적용된다.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
|
||||
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
|
||||
|
||||
## [1.0.1] - 2026-07-02
|
||||
## [1.0.1] - 2026-07-03
|
||||
|
||||
### Added
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* loadDevToolsBundle 테스트 — DevTools lazy 번들 로더 (engine-v1.52.0)
|
||||
* loadDevToolsBundle 테스트 — DevTools lazy 번들 로더 (engine-v1.51.0)
|
||||
*
|
||||
* DevTools 디버그 전용 모듈(패널/진단엔진/서버커넥터/스타일추적기)은 별도 번들
|
||||
* (devtools.min.js)로 분리되어 디버그 모드에서만 <script> 주입으로 로드된다. 본 테스트는
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* devtools-entry.ts — DevTools lazy 번들 진입점
|
||||
*
|
||||
* @since engine-v1.52.0
|
||||
* @since engine-v1.51.0
|
||||
*
|
||||
* 개발자 진단도구(DevTools)는 디버그 모드(`G7Config.debug` / 환경설정)를 켰을 때만 쓰인다.
|
||||
* 그럼에도 메인 코어 번들(`template-engine.min.js`)에 정적 포함되면 모든 사용자가 받고도
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* G7DevToolsCore 런타임 shim — DevTools lazy 번들 전용 (vite.config.devtools.js alias 대상)
|
||||
* @since engine-v1.52.0
|
||||
* @since engine-v1.51.0
|
||||
*
|
||||
* DevTools 추적 코어는 디버그 무관 항상 필요해 메인 번들에 남는다. 디버그 lazy 번들
|
||||
* (DevToolsPanel 등)은 이 shim 으로 메인 번들의 단일 인스턴스를 빌려 쓴다(싱글톤 동일성).
|
||||
|
||||
@@ -66,7 +66,7 @@ export class IdentityGuardInterceptor {
|
||||
* 일반 본인인증 실패(본인확인 자체 실패/취소)는 이 플래그를 set 하지 않으므로
|
||||
* generic 가드 토스트가 그대로 유지된다 — provider 무지식의 범용 신호다.
|
||||
*
|
||||
* @since engine-v1.52.2
|
||||
* @since engine-v1.50.0
|
||||
*/
|
||||
private static domainNoticeShown = false;
|
||||
|
||||
@@ -97,7 +97,7 @@ export class IdentityGuardInterceptor {
|
||||
* 안내한 직후 호출한다. 코어 toast 핸들러가 동일 사이클의 generic IDV 가드 토스트를 1회 skip 한다.
|
||||
* 호출 시점은 항상 코어가 원 428 을 onError 로 흘려보내기 직전(resolveIdentityChallenge 통보 전)이어야 한다.
|
||||
*
|
||||
* @since engine-v1.52.2
|
||||
* @since engine-v1.50.0
|
||||
*/
|
||||
static markDomainNoticeShown(): void {
|
||||
this.domainNoticeShown = true;
|
||||
@@ -110,7 +110,7 @@ export class IdentityGuardInterceptor {
|
||||
* true 면 그 토스트를 skip 하고, 플래그는 소비되어 다음 토스트부터는 정상 표출된다.
|
||||
*
|
||||
* @returns 직전 challenge 가 도메인 안내를 표출했으면 true (그리고 플래그 해제)
|
||||
* @since engine-v1.52.2
|
||||
* @since engine-v1.50.0
|
||||
*/
|
||||
static consumeDomainNoticeShown(): boolean {
|
||||
const shown = this.domainNoticeShown;
|
||||
|
||||
@@ -5,18 +5,7 @@
|
||||
>
|
||||
> 형식: [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)
|
||||
|
||||
## [engine-v1.52.0] - 2026-07-02
|
||||
|
||||
### Changed
|
||||
|
||||
#### DevTools 번들 분리 (디버그 전용 코드 초기 로드 제거)
|
||||
|
||||
- 개발자 진단도구(DevTools)의 디버그 전용 무거운 모듈(패널 UI/진단엔진/서버커넥터/스타일추적기)을 메인 코어 번들에서 분리해 별도 `devtools.min.js` 로 빌드한다. `initDevToolsAPI()` 가 디버그 모드(`isEnabled()`)일 때만 런타임 `<script>` 주입으로 로드한다. 디버그 꺼진 일반 사용자는 이 코드를 받지 않는다. 편집기 분리(engine-v1.51.0)와 합쳐 초기 접속 gzip payload 458KB → 221KB (약 52% 감소).
|
||||
- `G7CoreGlobals.ts` — `DiagnosticEngine`/`ServerConnector`/`StyleTracker`/`DevToolsPanel` 정적 import 제거. `initDevToolsAPI()` 는 디버그 OFF 시 최소 API 만 노출(번들 미로드), ON 시 `loadDevToolsBundle()`(신규)로 `window.G7Core.__devtools` 를 지연 로드한 뒤 진단/서버덤프/패널을 활성화. `G7DevToolsCore`(추적 코어, 디버그 무관 항상 필요)는 메인 번들에 상주하며 `G7Core.__runtime` 으로 공유.
|
||||
- `devtools-entry.ts` + `vite.config.devtools.js`(신규) — DevTools 번들 엔트리/빌드. React external → `window.React` 단일 인스턴스, `G7DevToolsCore` 는 shim(`devtools/__runtime-shims/`)으로 메인 번들과 공유(재번들 0바이트, 싱글톤 동일성).
|
||||
- `core:build` — 엔진 + 편집기 + DevTools 3개 번들 순차 빌드. `--watch` 는 3개 `vite build --watch` 병렬.
|
||||
|
||||
## [engine-v1.51.0] - 2026-07-02
|
||||
## [engine-v1.51.0] - 2026-07-03
|
||||
|
||||
### Changed
|
||||
|
||||
@@ -29,6 +18,13 @@
|
||||
- `core:build`(`BuildCoreCommand.php`) — 엔진 번들 + 편집기 번들을 순차 빌드. `--watch` 는 양 번들을 `vite build --watch` 로 병렬 감시.
|
||||
- 기존 편집기 확장점 stub/큐 핸드셰이크(`initLayoutEditorStub` → `exposeLayoutEditorGlobals`, engine-v1.50.0)가 번들 경계를 넘어 그대로 동작(편집기 로드 시 큐 flush).
|
||||
|
||||
#### DevTools 번들 분리 (디버그 전용 코드 초기 로드 제거)
|
||||
|
||||
- 개발자 진단도구(DevTools)의 디버그 전용 무거운 모듈(패널 UI/진단엔진/서버커넥터/스타일추적기)을 메인 코어 번들에서 분리해 별도 `devtools.min.js` 로 빌드한다. `initDevToolsAPI()` 가 디버그 모드(`isEnabled()`)일 때만 런타임 `<script>` 주입으로 로드한다. 디버그 꺼진 일반 사용자는 이 코드를 받지 않는다. 레이아웃 편집기 분리와 합쳐 초기 접속 gzip payload 458KB → 221KB (약 52% 감소).
|
||||
- `G7CoreGlobals.ts` — `DiagnosticEngine`/`ServerConnector`/`StyleTracker`/`DevToolsPanel` 정적 import 제거. `initDevToolsAPI()` 는 디버그 OFF 시 최소 API 만 노출(번들 미로드), ON 시 `loadDevToolsBundle()`(신규)로 `window.G7Core.__devtools` 를 지연 로드한 뒤 진단/서버덤프/패널을 활성화. `G7DevToolsCore`(추적 코어, 디버그 무관 항상 필요)는 메인 번들에 상주하며 `G7Core.__runtime` 으로 공유.
|
||||
- `devtools-entry.ts` + `vite.config.devtools.js`(신규) — DevTools 번들 엔트리/빌드. React external → `window.React` 단일 인스턴스, `G7DevToolsCore` 는 shim(`devtools/__runtime-shims/`)으로 메인 번들과 공유(재번들 0바이트, 싱글톤 동일성).
|
||||
- `core:build` — 엔진 + 편집기 + DevTools 3개 번들 순차 빌드. `--watch` 는 3개 `vite build --watch` 병렬.
|
||||
|
||||
## [engine-v1.50.0] - 2026-06-29
|
||||
|
||||
### Added
|
||||
|
||||
@@ -2455,7 +2455,7 @@ const DynamicRenderer: React.FC<DynamicRendererProps> = memo(
|
||||
}, [resolvedProps]);
|
||||
|
||||
/**
|
||||
* DOM id 표현식 해석 (engine-v1.52.4)
|
||||
* DOM id 표현식 해석 (engine-v1.50.0)
|
||||
*
|
||||
* 노드의 최상위 `id` 필드는 props 가 아니므로 props 바인딩 경로를 타지 않는다.
|
||||
* iteration 내부에서 `id: "item_{{$idx}}"` 처럼 표현식을 쓰면 각 row 마다
|
||||
|
||||
@@ -32,7 +32,7 @@ import { WebSocketManager } from '../websocket/WebSocketManager';
|
||||
import { G7DevToolsCore } from '../devtools/G7DevToolsCore';
|
||||
// DiagnosticEngine/ServerConnector/StyleTracker/DevToolsPanel 은 정적 import 하지 않는다 —
|
||||
// 디버그 전용 무거운 모듈은 별도 lazy 번들(devtools.min.js)로 분리되어 initDevToolsAPI() 가
|
||||
// isEnabled() 참일 때만 런타임 <script> 주입으로 로드한다. @since engine-v1.52.0
|
||||
// isEnabled() 참일 때만 런타임 <script> 주입으로 로드한다. @since engine-v1.51.0
|
||||
import type { DiagnosticCategory } from '../devtools/types';
|
||||
import {
|
||||
renderItemChildren,
|
||||
@@ -804,7 +804,7 @@ function initCoreRuntimeExports(G7Core: any): void {
|
||||
// 인증/로거
|
||||
AuthManager,
|
||||
createLogger,
|
||||
// DevTools 추적 코어 (디버그 lazy 번들이 패널/진단엔진에서 공유) @since engine-v1.52.0
|
||||
// DevTools 추적 코어 (디버그 lazy 번들이 패널/진단엔진에서 공유) @since engine-v1.51.0
|
||||
G7DevToolsCore,
|
||||
};
|
||||
|
||||
@@ -3750,7 +3750,7 @@ export function initDevToolsInterface(): void {
|
||||
*/
|
||||
/**
|
||||
* DevTools 디버그 전용 모듈(패널 UI/진단엔진/서버커넥터/스타일추적기)의 lazy 번들 타입.
|
||||
* @since engine-v1.52.0
|
||||
* @since engine-v1.51.0
|
||||
*/
|
||||
interface DevToolsBundle {
|
||||
DiagnosticEngine: any;
|
||||
@@ -3764,7 +3764,7 @@ let devToolsBundleLoadPromise: Promise<DevToolsBundle> | null = null;
|
||||
/**
|
||||
* DevTools lazy 번들(devtools.min.js)을 로드하고 디버그 전용 모듈 4종을 반환한다.
|
||||
*
|
||||
* @since engine-v1.52.0
|
||||
* @since engine-v1.51.0
|
||||
*
|
||||
* 디버그 모드에서만 호출된다. 이미 로드됨(멱등)/진행 중(in-flight 병합)/미로드(1회 주입)
|
||||
* 를 구분한다.
|
||||
@@ -3858,7 +3858,7 @@ export function initDevToolsAPI(): void {
|
||||
/**
|
||||
* 디버그 모드에서 DevTools lazy 번들을 로드하고 전체 API 를 활성화한다.
|
||||
*
|
||||
* @since engine-v1.52.0
|
||||
* @since engine-v1.51.0
|
||||
*
|
||||
* @param G7Core - window.G7Core 전역 객체
|
||||
* @param devToolsCore - G7DevToolsCore 싱글톤 인스턴스
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* 안에서 `id: "item_{{$idx}}"` 처럼 표현식을 쓰면 각 row 마다 고유 DOM id 가 되어야 하지만,
|
||||
* 보간 없이 출력되면 같은 리터럴이 row 마다 반복되어 W3C HTML id 중복을 유발한다.
|
||||
*
|
||||
* engine-v1.52.4 수정: DOM 출력 지점이 effectiveComponentDef.id 를 iteration 컨텍스트로
|
||||
* engine-v1.50.0 수정: DOM 출력 지점이 effectiveComponentDef.id 를 iteration 컨텍스트로
|
||||
* 보간한 resolvedComponentId 를 쓴다. slot 등록·React key 등 내부 식별은 원본 id 유지(격리).
|
||||
*/
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ describe('IdentityGuardInterceptor', () => {
|
||||
});
|
||||
|
||||
/**
|
||||
* 도메인 안내 표출 신호 (engine-v1.52.0) — 부가 목적(성인인증 등) 실패 시 provider 가
|
||||
* 도메인 안내 표출 신호 (engine-v1.50.0) — 부가 목적(성인인증 등) 실패 시 provider 가
|
||||
* 고유 안내를 표출했음을 표시하면, 코어 toast 핸들러가 동일 사이클의 generic IDV 가드
|
||||
* 토스트("본인 확인이 필요합니다") 1건을 skip 한다. 일반 본인인증 실패는 무영향.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* DevTools — 번들 분리 (lazy/debug 로드) 검증. (engine-v1.52.0)
|
||||
* DevTools — 번들 분리 (lazy/debug 로드) 검증. (engine-v1.51.0)
|
||||
*
|
||||
* 개발자 진단도구(DevTools)는 디버그 모드에서만 쓰이므로 코어 번들에서 분리해 별도
|
||||
* devtools.min.js 로 빌드하고, `initDevToolsAPI()` 가 `isEnabled()` 참일 때만 런타임
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* reconciliation 이 행을 합쳐 렌더 누락. 슬롯에 주입된 컴포넌트(헤더 통화 셀렉터)도 데스크톱/
|
||||
* 모바일 SlotContainer 양쪽 마운트 시 정적 root id 중복.
|
||||
*
|
||||
* 수정(engine-v1.52.4):
|
||||
* 수정(engine-v1.50.0):
|
||||
* - DynamicRenderer 가 id 표현식을 iteration 컨텍스트로 보간(resolvedComponentId).
|
||||
* - SlotContainer 가 주입 컴포넌트 root id 를 컨테이너 id 로 스코프.
|
||||
* - 대시보드 반복 목록·게시판/이커머스 위젯 id 동적화.
|
||||
|
||||
@@ -3,7 +3,7 @@ import react from '@vitejs/plugin-react';
|
||||
import path from 'path';
|
||||
|
||||
/**
|
||||
* DevTools lazy 번들 빌드 설정 (engine-v1.52.0)
|
||||
* DevTools lazy 번들 빌드 설정 (engine-v1.51.0)
|
||||
*
|
||||
* 개발자 진단도구(패널 UI/진단엔진/서버커넥터/스타일추적기)는 디버그 모드에서만 쓰이므로
|
||||
* 메인 코어 번들에서 분리해 별도 `devtools.min.js` 로 빌드한다. `initDevToolsAPI()` 가
|
||||
|
||||
Reference in New Issue
Block a user