From 218ff6fbfc027be9ef36db9bffdd9236921680b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=A5=EC=88=98=20=5BFrontend=5D?= Date: Tue, 28 Oct 2025 17:37:51 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20persist=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/executeJS/src/features/execute-code/model.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/executeJS/src/features/execute-code/model.ts b/apps/executeJS/src/features/execute-code/model.ts index 367c97b..7d80cea 100644 --- a/apps/executeJS/src/features/execute-code/model.ts +++ b/apps/executeJS/src/features/execute-code/model.ts @@ -66,6 +66,21 @@ export const useExecutionStore = create()( partialize: (state) => ({ result: state.result, }), + onRehydrateStorage: () => (state, error) => { + if (error) { + console.error('hydration failed:', error); + // persist 실패 시 localStorage 정리 + localStorage.removeItem('executejs-execution-storage'); + + return; + } + + if (state) { + console.log('hydration success'); + // 앱 재시작 시 실행 중이었던 상태를 초기화 + state.setExecuting(false); + } + }, } ) ); From 4d7c4fb21e0d92476a5e6661e1592115d8357bd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=A5=EC=88=98=20=5BFrontend=5D?= Date: Tue, 28 Oct 2025 17:43:31 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=EC=8B=A4=ED=96=89=20=EC=9D=B4?= =?UTF-8?q?=EB=A0=A5=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EC=B4=88=EA=B8=B0=20?= =?UTF-8?q?=EC=83=81=ED=83=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/playground/playground-page.tsx | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/apps/executeJS/src/pages/playground/playground-page.tsx b/apps/executeJS/src/pages/playground/playground-page.tsx index 11962a0..0de3049 100644 --- a/apps/executeJS/src/pages/playground/playground-page.tsx +++ b/apps/executeJS/src/pages/playground/playground-page.tsx @@ -5,8 +5,30 @@ import { OutputPanel } from '@/widgets/output-panel'; import { useExecutionStore } from '@/features/execute-code'; import { PlayIcon, StopIcon } from '@radix-ui/react-icons'; -export const PlaygroundPage: React.FC = () => { - const [code, setCode] = useState('console.log("Hello, ExecuteJS!");'); +const getInitialCode = (): string => { + try { + const executionStorage = localStorage.getItem('executejs-execution-storage'); + + if (executionStorage) { + const parsed = JSON.parse(executionStorage); + const code = parsed?.state?.result?.code; + + if (code) { + console.log('result from executionStorage:', code); + + return code; + } + } + } catch (error) { + console.error('error from executionStorage:', error); + } + + return 'console.log("Hello, ExecuteJS!");'; +}; + +export const EditorPage: React.FC = () => { + // FIXME: tab이 여러개 생기거나 global store로 상태가 이동되면 수정되어야함 + const [code, setCode] = useState(getInitialCode); const { result: executionResult, isExecuting, From 5acb747edeaf2485581982ddad3322316c5c3f1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=A5=EC=88=98=20=5BFrontend=5D?= Date: Tue, 28 Oct 2025 18:06:17 +0900 Subject: [PATCH 3/4] fix: format --- apps/executeJS/src/features/execute-code/model.ts | 4 ++-- apps/executeJS/src/pages/playground/playground-page.tsx | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/executeJS/src/features/execute-code/model.ts b/apps/executeJS/src/features/execute-code/model.ts index 7d80cea..bbace0a 100644 --- a/apps/executeJS/src/features/execute-code/model.ts +++ b/apps/executeJS/src/features/execute-code/model.ts @@ -71,10 +71,10 @@ export const useExecutionStore = create()( console.error('hydration failed:', error); // persist 실패 시 localStorage 정리 localStorage.removeItem('executejs-execution-storage'); - + return; } - + if (state) { console.log('hydration success'); // 앱 재시작 시 실행 중이었던 상태를 초기화 diff --git a/apps/executeJS/src/pages/playground/playground-page.tsx b/apps/executeJS/src/pages/playground/playground-page.tsx index 0de3049..ddc6cf6 100644 --- a/apps/executeJS/src/pages/playground/playground-page.tsx +++ b/apps/executeJS/src/pages/playground/playground-page.tsx @@ -7,7 +7,9 @@ import { PlayIcon, StopIcon } from '@radix-ui/react-icons'; const getInitialCode = (): string => { try { - const executionStorage = localStorage.getItem('executejs-execution-storage'); + const executionStorage = localStorage.getItem( + 'executejs-execution-storage' + ); if (executionStorage) { const parsed = JSON.parse(executionStorage); @@ -22,7 +24,7 @@ const getInitialCode = (): string => { } catch (error) { console.error('error from executionStorage:', error); } - + return 'console.log("Hello, ExecuteJS!");'; }; From 95671732fb6e5c34667918c0b672d953ab72a59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=ED=9D=A5=EC=88=98=20=5BFrontend=5D?= Date: Wed, 29 Oct 2025 10:31:13 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/executeJS/src/pages/playground/playground-page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/executeJS/src/pages/playground/playground-page.tsx b/apps/executeJS/src/pages/playground/playground-page.tsx index ddc6cf6..9ea463d 100644 --- a/apps/executeJS/src/pages/playground/playground-page.tsx +++ b/apps/executeJS/src/pages/playground/playground-page.tsx @@ -28,7 +28,7 @@ const getInitialCode = (): string => { return 'console.log("Hello, ExecuteJS!");'; }; -export const EditorPage: React.FC = () => { +export const PlaygroundPage: React.FC = () => { // FIXME: tab이 여러개 생기거나 global store로 상태가 이동되면 수정되어야함 const [code, setCode] = useState(getInitialCode); const {