@nine-lab/nine-mu 0.1.335 → 0.1.336

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nine-lab/nine-mu",
3
- "version": "0.1.335",
3
+ "version": "0.1.336",
4
4
  "description": "AI-Driven Full-Stack Code Fabrication Engine",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-mu.umd.js",
@@ -943,7 +943,7 @@
943
943
  }
944
944
 
945
945
  :host(nine-exception-hook) {
946
- display: block;
946
+ display: flex;
947
947
  width: 100%;
948
948
  height: 100%;
949
949
  color: inherit;
@@ -11,11 +11,10 @@ export class ExceptionHook extends HTMLElement {
11
11
  this.attachShadow({ mode: 'open' });
12
12
  }
13
13
 
14
+ // src/components/exception/ExceptionHook.js 내부 수정
15
+
14
16
  connectedCallback() {
15
- // 기본 스켈레톤 마크업 렌더링
16
17
  this.#renderer();
17
-
18
- // 정적 외부 스타일시트 링크 안전하게 결합
19
18
  this.#injectShadowStylesheet();
20
19
 
21
20
  window.addEventListener('error', this.#handleRuntimeError, true);
@@ -31,6 +30,7 @@ export class ExceptionHook extends HTMLElement {
31
30
  document.removeEventListener('click', this.#handleLocationChange, true);
32
31
  }
33
32
 
33
+
34
34
  #renderer = () => {
35
35
  const customImport = nine.cssPath ? `@import "${nine.cssPath}/nine-mu.css";` : "";
36
36
 
@@ -57,11 +57,26 @@ export class ExceptionHook extends HTMLElement {
57
57
  this.shadowRoot.appendChild(link);
58
58
  }
59
59
 
60
+ // src/components/exception/ExceptionHook.js
61
+
60
62
  #handleRuntimeError = (event) => {
61
63
  if (this.#hasError) return;
62
64
 
63
- if (this.contains(event.target) || event.error) {
64
- this.#renderError(event.error?.message || event.message, event.error?.stack);
65
+ // 🎯 핵심 1: 리액트 에러는 내부 가상 DOM에서 발생하므로
66
+ // event.error 존재하거나, 에러 타겟이 이 컴포넌트 하위에 속해있는지 확인합니다.
67
+ const isReactError = event.error || (event.target && this.contains(event.target));
68
+
69
+ if (isReactError) {
70
+ // 에러 스택과 메시지 추출
71
+ const message = event.error?.message || event.message || "알 수 없는 런타임 에러";
72
+ const stack = event.error?.stack || "Stack trace unavailable";
73
+
74
+ // 🎯 핵심 2: 리액트가 에러 때문에 화면을 통째로 날려버리기 전에
75
+ // 기본 렌더링 슬롯(<slot>)을 즉시 숨기고 Web Component 자체 에러 보드를 띄웁니다.
76
+ this.#renderError(message, stack);
77
+
78
+ // 브라우저 기본 에러 동작(콘솔 중복 출력 등)을 필요에 따라 제어하려면 추가
79
+ // event.preventDefault();
65
80
  }
66
81
  }
67
82