From 7e6377d5efb0d4165068f6fc6c40bfd6e309be3f Mon Sep 17 00:00:00 2001 From: Seth Trowbridge Date: Fri, 31 Mar 2023 06:55:54 -0400 Subject: [PATCH] more progress --- deno.json | 7 +++++-- deno.map.json | 5 ----- lib/hmr.tsx | 19 +++++++++++++------ runner.tsx | 7 ------- server.tsx | 17 +++++++++++++---- test.tsx | 1 - 6 files changed, 31 insertions(+), 25 deletions(-) delete mode 100644 deno.map.json delete mode 100644 runner.tsx delete mode 100644 test.tsx diff --git a/deno.json b/deno.json index 609c53c..2e7b733 100644 --- a/deno.json +++ b/deno.json @@ -2,10 +2,13 @@ "compilerOptions": {"lib": [ "deno.window", "DOM" ]}, - "importMap": "deno.map.json", + "imports": { + "react-original": "https://esm.sh/react@18.2.0" + }, "tasks": { "install": "deno install -f -A --unstable --no-lock -n eno server.tsx", - "run": "deno run -A --unstable --no-lock server.tsx" + "run": "deno run -A --unstable --no-lock server.tsx", + "host": "deno run -A --unstable https://deno.land/std@0.181.0/http/file_server.ts" } } \ No newline at end of file diff --git a/deno.map.json b/deno.map.json deleted file mode 100644 index 0d471ef..0000000 --- a/deno.map.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "imports": { - "react-original": "https://esm.sh/react@18.2.0" - } -} \ No newline at end of file diff --git a/lib/hmr.tsx b/lib/hmr.tsx index 56740bc..2aeb1fd 100644 --- a/lib/hmr.tsx +++ b/lib/hmr.tsx @@ -1,6 +1,6 @@ let reloads = 0; -const listeners = new Map(); +const listeners = new Map() as Mapvoid>>; new WebSocket("ws://"+document.location.host).addEventListener('message', (event) => { let handlers = listeners.get(event.data)??[]; @@ -11,22 +11,27 @@ new WebSocket("ws://"+document.location.host).addEventListener('message', (event return import(event.data+"?reload="+reloads) .then(updatedModule=>handler(updatedModule)); }) - ).then(HMR.update); + ).then(()=>HMR.update()); }); -export const HMR = { +export const FileListen =(inPath:string, inHandler:()=>void)=> +{ + const members = listeners.get(inPath)??[]; + members.push(inHandler); + listeners.set(inPath, members); +}; + +const HMR = { registered: new Map() as Mapvoid>, states: new Map(), statesOld: new Map(), - reloads: 0, - wireframe: false, + wireframe: true, onChange(key:string, value:()=>void):void { this.registered.set(key, value); }, update() { - this.reloads++; this.registered.forEach(handler=>handler()); this.registered.clear(); this.statesOld = this.states; @@ -50,6 +55,8 @@ export const HMR = { } }; +export {HMR}; + export const MapAt =(inMap, inIndex)=> { let index = 0; diff --git a/runner.tsx b/runner.tsx deleted file mode 100644 index f6b7cfa..0000000 --- a/runner.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import * as FS from "https://deno.land/std@0.144.0/fs/mod.ts"; - -console.log(Deno.args, import.meta.url); -/* -await Deno.mkdir("deep"); -await Deno.create(`deep/file.txt`, "sup"); -*/ \ No newline at end of file diff --git a/server.tsx b/server.tsx index 0a4ecac..439de73 100644 --- a/server.tsx +++ b/server.tsx @@ -103,6 +103,7 @@ try { ImportObject.imports["react-original"] = importReact; ImportObject.imports["react"] = "/lib/react.tsx"; + ImportObject.imports["hmr"] = "/lib/hmr.tsx"; ImportString = JSON.stringify(ImportObject); } else @@ -147,9 +148,13 @@ const Index = ` ShadowDOM.append(ShadowCSS); ShadowDOM.append(ShadowDiv); - import App from "./app.tsx"; App(ShadowDiv, Configure); TW.observe(TW.twind(Configure, TW.cssom(ShadowCSS)), ShadowDiv); + + import App from "./app.tsx"; + import React from "react"; + React.render(React.createElement(App), ShadowDiv); + @@ -212,13 +217,17 @@ Deno.serve({ port: 3000 }, async(_req:Request) => const members = []; for( const key in imp ) { members.push(key); } body = -`import * as Import from "${url.pathname}?reload=0"; -${ members.map(m=>`let proxy_${m} = Import.${m}; export { proxy_${m} as ${m} };`).join(" ") } +` +import {FileListen} from "hmr"; +import * as Import from "${url.pathname}?reload=0"; +${ members.map(m=>`let proxy_${m} = Import.${m}; +export { proxy_${m} as ${m} }; +`).join(" ") } const reloadHandler = (updatedModule)=> { ${ members.map(m=>`proxy_${m} = updatedModule.${m};`).join("\n") } }; -window.HMR("${url.pathname}", reloadHandler);`; +FileListen("${url.pathname}", reloadHandler);`; } else diff --git a/test.tsx b/test.tsx deleted file mode 100644 index e43494b..0000000 --- a/test.tsx +++ /dev/null @@ -1 +0,0 @@ -export const test = "true"; \ No newline at end of file