hmr reload paths fixed
This commit is contained in:
parent
dfa3877013
commit
d925b8d75e
2
app.tsx
2
app.tsx
@ -6,7 +6,7 @@ function App(){
|
||||
const [countGet, countSet] = React.useState(2);
|
||||
|
||||
return <>
|
||||
<p style={{padding:"2rem", background:"black", color:"white"}}>test paragraph</p>
|
||||
<p style={{padding:"2rem", background:"tomato", color:"white"}}>test paragraph</p>
|
||||
<button onClick={()=>{countSet(countGet+1)}}>{countGet}</button>
|
||||
</>
|
||||
}
|
||||
|
||||
@ -22,7 +22,8 @@ function connect() {
|
||||
});
|
||||
socket.addEventListener("message", async (ev) => {
|
||||
try {
|
||||
const reloadPath = location.origin + ev.data + "?reload=" + Math.random();
|
||||
const filePath = ev.data.startsWith(".") ? ev.data.slice(1) : ev.data;
|
||||
const reloadPath = location.origin + filePath + "?reload=" + Math.random();
|
||||
console.log("realod called", ev.data, reloadPath);
|
||||
const reImport = await import(reloadPath);
|
||||
FileListeners.get(ev.data)?.forEach(h => h(reImport));
|
||||
|
||||
@ -114,12 +114,12 @@ export const ModuleShape =(inText:string)=>
|
||||
return[local, foreign] as [local:string[], foreign:string[]];
|
||||
};
|
||||
|
||||
export const ModuleProxy =(inText:string, inPath:string, reactProxy:string)=>
|
||||
export const ModuleProxy =(inText:string, inPath:string, reactProxy:string, reloadKey:string)=>
|
||||
{
|
||||
const [local, foreign] = ModuleShape(inText);
|
||||
return `
|
||||
import {FileListen} from "${reactProxy}";
|
||||
import * as Import from "${inPath}?reload=${new Date().getTime()}";
|
||||
import * as Import from "${inPath}?${reloadKey}=${new Date().getTime()}";
|
||||
${ local.map(m=>`let proxy_${m} = Import.${m}; export { proxy_${m} as ${m} };`).join("\n") }
|
||||
FileListen("${inPath}", (updatedModule)=>
|
||||
{
|
||||
|
||||
11
server.ts
11
server.ts
@ -3,7 +3,7 @@ import { ModuleProxy } from "./hmr/hmr-static.tsx";
|
||||
|
||||
const keyBundle = "=>";
|
||||
const keyTranspile = "->";
|
||||
const keyReload = "reload";
|
||||
const keyReload = "hmr:id";
|
||||
const keysExtension = ["ts", "tsx"];
|
||||
const extractExtension =(path:string)=>
|
||||
{
|
||||
@ -59,7 +59,7 @@ async function BakeForce(options:FullBakeConfig)
|
||||
{
|
||||
const body = result.outputFiles.map(file=>file.text()).join("\n");
|
||||
const listenerImport = `/${keyTranspile}/${import.meta.resolve("./hmr/hmr-listen.tsx")}`;
|
||||
const save:CachedTranspile = [body, type ? "" : ModuleProxy(body, path, listenerImport)];
|
||||
const save:CachedTranspile = [body, type ? "" : ModuleProxy(body, path, listenerImport, keyReload)];
|
||||
BakeCache[key] = save; // replace promise with resolved value
|
||||
return save;
|
||||
}
|
||||
@ -183,13 +183,16 @@ Deno.serve(async(req:Request)=>
|
||||
if(parts[0] == keyTranspile)
|
||||
{
|
||||
console.log("TRANSPILE", parts);
|
||||
const transpiled = await BakeCheck({path:parts.slice(1).join("/"), bundle:false});
|
||||
const transpiled = await BakeCheck({
|
||||
path:parts.slice(1).join("/"),
|
||||
bundle:false
|
||||
});
|
||||
return JSResponse(transpiled[0]);
|
||||
}
|
||||
if(keysExtension.includes(extension))
|
||||
{
|
||||
console.log("REGULAR", parts);
|
||||
const transpiled = await BakeCheck({path:"."+url.pathname, bundle:false});
|
||||
const transpiled = await BakeCheck({path:"./"+parts.join("/"), bundle:false});
|
||||
//return JSResponse(transpiled[0]);
|
||||
return JSResponse(transpiled[url.searchParams.has(keyReload) ? 0 : 1]);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user