Files
HeuJung cd189190c2 fix(core,extensions): 창 크기 변경 후 저장 시 편집기 본문이 사라지던 문제
저장소 B(_global._local)를 동기화하는 두 지점이 저장소 A 계열 스냅샷을 그대로
넘겨 왔다. setGlobalState 는 _local 을 얕게 병합하므로 그 쓰기는 patch 가 아니라
통째 교체이며, A 가 아직 받지 못한 값 — CKEditor 가 setLocal({render:false,
selfManaged:true}) 로 B 에만 쓴 본문 — 이 예외도 로그도 없이 사라진다.

handleSetState COMPONENT 분기의 B 쓰기와 sequence 반환값을 함께 live B 기반으로
바꾼다. 요청 body 는 B 가 아니라 그 반환값에서 오므로, B 쓰기만 고치면 저장은
여전히 422 가 난다. 같은 형태의 setParentLocal 도 함께 정정했다.

트리거는 브레이크포인트 교차가 아니라 19px 폭 변경이다 — 모바일 URL바 숨김·
가상키보드·화면 회전이 모두 해당한다. 작성 화면은 422 로, 수정 화면은 성공
토스트와 함께 조용한 데이터 손실로 나타났다.

함께 담은 것:
- ckeditor5: 미리보기 입력이 설정으로 저장되던 문제, 본문만 고치면 저장 버튼이
 비활성으로 남던 문제
- board: 일괄 적용 확인 창의 항목 목록이 통째로 렌더되지 않던 문제(표현식
 평가기가 콜백 안 멤버 대입을 거부), 「금지어」 라벨 누락
- 확장 문서의 Playwright 명령이 코어 config 를 잡아 "No tests found" 로 조용히
 0건이 지나가던 문제
2026-09-01 18:08:40 +09:00

107 lines
2.6 KiB
TypeScript

/**
* 템플릿 엔진 헬퍼 함수 통합 모듈
*
* 템플릿 개발자를 위한 헬퍼 함수들을 통합 export합니다.
* 향후 추가되는 헬퍼 모듈들은 여기서 re-export하여
* 일관된 진입점을 제공합니다.
*
* @packageDocumentation
*
* @example
* ```typescript
* // 템플릿 엔진에서 import
* import { renderItemChildren } from './template-engine/helpers';
*
* // 또는 개별 모듈에서 직접 import
* import { renderItemChildren } from './template-engine/helpers/RenderHelpers';
* ```
*/
// ============================================
// 렌더링 헬퍼
// ============================================
export {
renderItemChildren,
bindComponentActions,
evaluateIfCondition,
evaluateRenderCondition,
resolveClassMap,
type RenderItemChildrenOptions,
type BindComponentActionsOptions,
type EvaluateRenderConditionOptions,
type ClassMapDefinition,
type ResolveClassMapOptions,
} from './RenderHelpers';
// ============================================
// 이벤트 헬퍼
// ============================================
export {
createChangeEvent,
createClickEvent,
createSubmitEvent,
createKeyboardEvent,
type CreateChangeEventOptions,
type CreateClickEventOptions,
} from './EventHelpers';
// ============================================
// 스타일 헬퍼
// ============================================
export {
mergeClasses,
conditionalClass,
joinClasses,
} from './StyleHelpers';
// ============================================
// 파이프 함수
// ============================================
export {
PipeRegistry,
pipeRegistry,
hasPipes,
splitPipes,
executePipeChain,
parsePipeExpression,
type PipeFunction,
type ParsedPipe,
} from '../PipeRegistry';
// ============================================
// 조건 평가 헬퍼
// ============================================
export {
evaluateStringCondition,
evaluateConditionExpression,
evaluateConditionBranches,
evaluateConditions,
isConditionExpression,
isConditionBranches,
type ConditionExpression,
type ConditionBranch,
type ConditionsProperty,
type ConditionBranchResult,
type ActionDefinition,
} from './ConditionEvaluator';
// ============================================
// 상태 병합 헬퍼
// ============================================
export {
addMissingLeafKeys,
} from './StateMerge';
// ============================================
// 향후 추가 예정 헬퍼 모듈 예시
// ============================================
// export { formatValue, formatCurrency, formatDate } from './FormatHelpers';
// export { validateField, validateForm } from './ValidationHelpers';