From 0946f889d6f71de7c3b05a789430c137ce36539e Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 10:48:56 +0100 Subject: [PATCH 01/14] fixies --- packages/core/src/index.js | 4 ++++ packages/core/src/runtime/vnode.js | 15 +++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 6c80ef4e..c4b48b7b 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -59,6 +59,7 @@ function replaceComponent(OldType, NewType, resetHookState) { vnode.type = NewType; if (vnode[VNODE_COMPONENT]) { + let oldHooks = vnode[VNODE_COMPONENT][COMPONENT_HOOKS]; vnode[VNODE_COMPONENT].constructor = vnode.type; try { @@ -98,6 +99,9 @@ function replaceComponent(OldType, NewType, resetHookState) { vnode[VNODE_COMPONENT].constructor = NewType; } + vnode[VNODE_COMPONENT].__v = vnode; + vnode[VNODE_COMPONENT][COMPONENT_HOOKS] = oldHooks; + if (resetHookState) { if ( vnode[VNODE_COMPONENT][COMPONENT_HOOKS] && diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index 01c77d51..e86a8b13 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -31,13 +31,16 @@ options.vnode = vnode => { } vnode.type = foundType; - if ( - vnode[VNODE_COMPONENT] && - 'prototype' in vnode.type && - vnode.type.prototype.render - ) { - vnode[VNODE_COMPONENT].constructor = vnode.type; + if (vnode[VNODE_COMPONENT]) { + vnode[VNODE_COMPONENT].__v = vnode; + if ( + 'prototype' in vnode.type && + vnode.type.prototype.render + ) { + vnode[VNODE_COMPONENT].constructor = vnode.type; + } } + } if (oldVnode) oldVnode(vnode); From 5d5fa8ffcfc6e0f4419905880c3a0b15814442bb Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 10:57:06 +0100 Subject: [PATCH 02/14] temp pin version --- packages/core/src/runtime/vnode.js | 2 -- test/fixture/vite-preact-compat/package.json | 2 +- test/fixture/vite-signals/package.json | 2 +- test/fixture/vite/package.json | 2 +- test/fixture/vite/src/styles.js | 2 +- test/fixture/vite/src/useCounter.js | 2 +- 6 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index e86a8b13..fd40e74b 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -32,7 +32,6 @@ options.vnode = vnode => { vnode.type = foundType; if (vnode[VNODE_COMPONENT]) { - vnode[VNODE_COMPONENT].__v = vnode; if ( 'prototype' in vnode.type && vnode.type.prototype.render @@ -40,7 +39,6 @@ options.vnode = vnode => { vnode[VNODE_COMPONENT].constructor = vnode.type; } } - } if (oldVnode) oldVnode(vnode); diff --git a/test/fixture/vite-preact-compat/package.json b/test/fixture/vite-preact-compat/package.json index 2b57936b..84cdae82 100644 --- a/test/fixture/vite-preact-compat/package.json +++ b/test/fixture/vite-preact-compat/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "^10.19.0" + "preact": "10.18.2" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite-signals/package.json b/test/fixture/vite-signals/package.json index cf535667..4ed183c2 100644 --- a/test/fixture/vite-signals/package.json +++ b/test/fixture/vite-signals/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "@preact/signals": "^1.1.2", - "preact": "^10.19.0" + "preact": "10.18.2" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite/package.json b/test/fixture/vite/package.json index 2b57936b..84cdae82 100644 --- a/test/fixture/vite/package.json +++ b/test/fixture/vite/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "^10.19.0" + "preact": "10.18.2" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite/src/styles.js b/test/fixture/vite/src/styles.js index 424afca3..6f9c0dc7 100644 --- a/test/fixture/vite/src/styles.js +++ b/test/fixture/vite/src/styles.js @@ -1,5 +1,5 @@ import { styled } from 'goober'; export const Style = styled('div')` - background-color: #000; + background-color: #fff; `; diff --git a/test/fixture/vite/src/useCounter.js b/test/fixture/vite/src/useCounter.js index 8ccc2dc4..88a5b4f6 100644 --- a/test/fixture/vite/src/useCounter.js +++ b/test/fixture/vite/src/useCounter.js @@ -2,5 +2,5 @@ import { useState } from 'preact/hooks'; export const useCounter = () => { const [state, setState] = useState(0); - return [state, () => setState(state + 1)]; + return [state, () => setState(state + 2)]; }; From f2c0f5edf678515cdeefe2afc9754be1af9e3aad Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 10:58:56 +0100 Subject: [PATCH 03/14] add back vnode cast --- packages/core/src/runtime/vnode.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index fd40e74b..f9a274b7 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -32,6 +32,7 @@ options.vnode = vnode => { vnode.type = foundType; if (vnode[VNODE_COMPONENT]) { + vnode[VNODE_COMPONENT].__v = vnode; if ( 'prototype' in vnode.type && vnode.type.prototype.render From d4120bd314dd50dc811d7bdde06c0470b8304f73 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:02:32 +0100 Subject: [PATCH 04/14] revert --- test/fixture/vite-preact-compat/package.json | 2 +- test/fixture/vite-signals/package.json | 2 +- test/fixture/vite/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/fixture/vite-preact-compat/package.json b/test/fixture/vite-preact-compat/package.json index 84cdae82..c70535bd 100644 --- a/test/fixture/vite-preact-compat/package.json +++ b/test/fixture/vite-preact-compat/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "10.18.2" + "preact": "10.19.0" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite-signals/package.json b/test/fixture/vite-signals/package.json index 4ed183c2..e1300d7a 100644 --- a/test/fixture/vite-signals/package.json +++ b/test/fixture/vite-signals/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "@preact/signals": "^1.1.2", - "preact": "10.18.2" + "preact": "10.19.0" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite/package.json b/test/fixture/vite/package.json index 84cdae82..c70535bd 100644 --- a/test/fixture/vite/package.json +++ b/test/fixture/vite/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "10.18.2" + "preact": "10.19.0" }, "devDependencies": { "@babel/core": "^7.22.1", From b3781f2e2e3ee6db6eb60af0e55696c7e04242c3 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:18:36 +0100 Subject: [PATCH 05/14] 10.19.1 --- test/fixture/vite-preact-compat/package.json | 2 +- test/fixture/vite-signals/package.json | 2 +- test/fixture/vite/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/fixture/vite-preact-compat/package.json b/test/fixture/vite-preact-compat/package.json index c70535bd..6de944e6 100644 --- a/test/fixture/vite-preact-compat/package.json +++ b/test/fixture/vite-preact-compat/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "10.19.0" + "preact": "10.19.1" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite-signals/package.json b/test/fixture/vite-signals/package.json index e1300d7a..da961717 100644 --- a/test/fixture/vite-signals/package.json +++ b/test/fixture/vite-signals/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "@preact/signals": "^1.1.2", - "preact": "10.19.0" + "preact": "10.19.1" }, "devDependencies": { "@babel/core": "^7.22.1", diff --git a/test/fixture/vite/package.json b/test/fixture/vite/package.json index c70535bd..6de944e6 100644 --- a/test/fixture/vite/package.json +++ b/test/fixture/vite/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "10.19.0" + "preact": "10.19.1" }, "devDependencies": { "@babel/core": "^7.22.1", From 15e06b2951a03f538387d6cac07c034dd8d57e5f Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:22:28 +0100 Subject: [PATCH 06/14] correct starting values --- test/fixture/vite/src/styles.js | 2 +- test/fixture/vite/src/useCounter.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/fixture/vite/src/styles.js b/test/fixture/vite/src/styles.js index 6f9c0dc7..424afca3 100644 --- a/test/fixture/vite/src/styles.js +++ b/test/fixture/vite/src/styles.js @@ -1,5 +1,5 @@ import { styled } from 'goober'; export const Style = styled('div')` - background-color: #fff; + background-color: #000; `; diff --git a/test/fixture/vite/src/useCounter.js b/test/fixture/vite/src/useCounter.js index 88a5b4f6..8ccc2dc4 100644 --- a/test/fixture/vite/src/useCounter.js +++ b/test/fixture/vite/src/useCounter.js @@ -2,5 +2,5 @@ import { useState } from 'preact/hooks'; export const useCounter = () => { const [state, setState] = useState(0); - return [state, () => setState(state + 2)]; + return [state, () => setState(state + 1)]; }; From 87c7bb54866384d6faa3497d7f95ae0a072b7838 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:26:13 +0100 Subject: [PATCH 07/14] more tries --- packages/core/src/index.js | 4 ---- packages/vite/src/index.js | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index c4b48b7b..6c80ef4e 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -59,7 +59,6 @@ function replaceComponent(OldType, NewType, resetHookState) { vnode.type = NewType; if (vnode[VNODE_COMPONENT]) { - let oldHooks = vnode[VNODE_COMPONENT][COMPONENT_HOOKS]; vnode[VNODE_COMPONENT].constructor = vnode.type; try { @@ -99,9 +98,6 @@ function replaceComponent(OldType, NewType, resetHookState) { vnode[VNODE_COMPONENT].constructor = NewType; } - vnode[VNODE_COMPONENT].__v = vnode; - vnode[VNODE_COMPONENT][COMPONENT_HOOKS] = oldHooks; - if (resetHookState) { if ( vnode[VNODE_COMPONENT][COMPONENT_HOOKS] && diff --git a/packages/vite/src/index.js b/packages/vite/src/index.js index d7164596..ab5cbfba 100644 --- a/packages/vite/src/index.js +++ b/packages/vite/src/index.js @@ -91,6 +91,8 @@ module.exports = function prefreshPlugin(options = {}) { try { flushUpdates(); } catch (e) { + // TODO: remove debugging code + console.log(e); self.location.reload(); } }); From 6eea998cf0b6cee0dcaca4b3af7523f6f5dda1b8 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:27:34 +0100 Subject: [PATCH 08/14] more tries --- packages/core/src/index.js | 2 ++ packages/core/src/runtime/vnode.js | 14 ++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 6c80ef4e..f4b8e596 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -98,6 +98,8 @@ function replaceComponent(OldType, NewType, resetHookState) { vnode[VNODE_COMPONENT].constructor = NewType; } + vnode[VNODE_COMPONENT].__v = vnode; + if (resetHookState) { if ( vnode[VNODE_COMPONENT][COMPONENT_HOOKS] && diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index f9a274b7..01c77d51 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -31,14 +31,12 @@ options.vnode = vnode => { } vnode.type = foundType; - if (vnode[VNODE_COMPONENT]) { - vnode[VNODE_COMPONENT].__v = vnode; - if ( - 'prototype' in vnode.type && - vnode.type.prototype.render - ) { - vnode[VNODE_COMPONENT].constructor = vnode.type; - } + if ( + vnode[VNODE_COMPONENT] && + 'prototype' in vnode.type && + vnode.type.prototype.render + ) { + vnode[VNODE_COMPONENT].constructor = vnode.type; } } From e6a3d0c6bac86dd2fae68523256fee1cb8a41f74 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:33:24 +0100 Subject: [PATCH 09/14] try removing mapping logic --- packages/core/src/runtime/vnode.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index 01c77d51..eaf0f24f 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -20,24 +20,7 @@ options.vnode = vnode => { vnodes.push(vnode); } - const foundType = getMappedVnode(vnode.type); - if (foundType !== vnode.type) { - const vnodes = vnodesForComponent.get(foundType); - if (!vnodes) { - vnodesForComponent.set(foundType, [vnode]); - } else { - vnodes.push(vnode); - } - } - vnode.type = foundType; - if ( - vnode[VNODE_COMPONENT] && - 'prototype' in vnode.type && - vnode.type.prototype.render - ) { - vnode[VNODE_COMPONENT].constructor = vnode.type; - } } if (oldVnode) oldVnode(vnode); From 61ff6150958a29a961c0ca71a11b72b16fc55e4c Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:38:41 +0100 Subject: [PATCH 10/14] revert --- packages/core/src/runtime/vnode.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index eaf0f24f..01c77d51 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -20,7 +20,24 @@ options.vnode = vnode => { vnodes.push(vnode); } + const foundType = getMappedVnode(vnode.type); + if (foundType !== vnode.type) { + const vnodes = vnodesForComponent.get(foundType); + if (!vnodes) { + vnodesForComponent.set(foundType, [vnode]); + } else { + vnodes.push(vnode); + } + } + vnode.type = foundType; + if ( + vnode[VNODE_COMPONENT] && + 'prototype' in vnode.type && + vnode.type.prototype.render + ) { + vnode[VNODE_COMPONENT].constructor = vnode.type; + } } if (oldVnode) oldVnode(vnode); From 01fd0c0e9873917e30409cbe73329e1ae6027066 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 11:52:20 +0100 Subject: [PATCH 11/14] try once more --- packages/core/src/runtime/vnode.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/runtime/vnode.js b/packages/core/src/runtime/vnode.js index 01c77d51..83212137 100644 --- a/packages/core/src/runtime/vnode.js +++ b/packages/core/src/runtime/vnode.js @@ -30,13 +30,13 @@ options.vnode = vnode => { } } - vnode.type = foundType; + // vnode.type = foundType; if ( vnode[VNODE_COMPONENT] && 'prototype' in vnode.type && vnode.type.prototype.render ) { - vnode[VNODE_COMPONENT].constructor = vnode.type; + vnode[VNODE_COMPONENT].constructor = foundType; } } From 2a2bff06a185c45ed7430907d34a7268ef8588ee Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 15:45:29 +0100 Subject: [PATCH 12/14] try with 10.18.2 to see whether the context bug is related to the new child diffing --- test/fixture/vite/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixture/vite/package.json b/test/fixture/vite/package.json index 6de944e6..84cdae82 100644 --- a/test/fixture/vite/package.json +++ b/test/fixture/vite/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "10.19.1" + "preact": "10.18.2" }, "devDependencies": { "@babel/core": "^7.22.1", From 827b4ac70419da13ec015bcac18d21811a2b641c Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 15:46:14 +0100 Subject: [PATCH 13/14] try with 10.18.1 --- test/fixture/vite/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixture/vite/package.json b/test/fixture/vite/package.json index 84cdae82..b1416110 100644 --- a/test/fixture/vite/package.json +++ b/test/fixture/vite/package.json @@ -4,7 +4,7 @@ }, "dependencies": { "goober": "^2.0.36", - "preact": "10.18.2" + "preact": "10.18.1" }, "devDependencies": { "@babel/core": "^7.22.1", From 659bee94a4bd66fbc571dbd3caaf1002064090e6 Mon Sep 17 00:00:00 2001 From: Jovi De Croock Date: Sat, 11 Nov 2023 15:51:35 +0100 Subject: [PATCH 14/14] revert --- packages/core/src/index.js | 2 ++ packages/vite/src/index.js | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/index.js b/packages/core/src/index.js index f4b8e596..9ada47ea 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -98,7 +98,9 @@ function replaceComponent(OldType, NewType, resetHookState) { vnode[VNODE_COMPONENT].constructor = NewType; } + vnode.type = NewType vnode[VNODE_COMPONENT].__v = vnode; + vnode[VNODE_COMPONENT].__v.type = NewType; if (resetHookState) { if ( diff --git a/packages/vite/src/index.js b/packages/vite/src/index.js index ab5cbfba..d7164596 100644 --- a/packages/vite/src/index.js +++ b/packages/vite/src/index.js @@ -91,8 +91,6 @@ module.exports = function prefreshPlugin(options = {}) { try { flushUpdates(); } catch (e) { - // TODO: remove debugging code - console.log(e); self.location.reload(); } });