Compare commits

..

No commits in common. "214667d85d1c604c16904a738d3f5c18d385b1db" and "93d953877ed3145f20e0f1373c09bb481bfebe74" have entirely different histories.

7 changed files with 46 additions and 35 deletions

2
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,2 @@
{
}

View File

@ -1,17 +1,16 @@
import React from "react"; import React from "react";
function App(){ export function App(){
const [countGet, countSet] = React.useState(2); const [countGet, countSet] = React.useState(2);
return <> return <>
<p style={{padding:"2rem", background:"black", color:"white"}}>test paragraph</p> <p style={{padding:"2rem", background:"red", color:"white"}}>test paragraph</p>
<button onClick={()=>{countSet(countGet+1)}}>{countGet}</button> <button onClick={()=>{countSet(countGet+1)}}>{countGet}</button>
</> </>
} }
const Other =()=> export const Other =()=>{
{
return <p>other app component</p> return <p>other app component</p>
} }

View File

@ -10,7 +10,10 @@
] ]
}, },
"imports": { "imports": {
"react":"npm:preact/compat", "react":"https://esm.sh/react@19.2.0",
"react-original":"npm:preact/compat" "react/":"https://esm.sh/react@19.2.0/",
"react-dom/":"https://esm.sh/react-dom@19.2.0/",
"react-original": "https://esm.sh/react@19.2.0"
} }
} }

View File

@ -1,22 +1,25 @@
{ {
"version": "5", "version": "5",
"specifiers": { "specifiers": {
"jsr:@std/media-types@*": "1.1.0", "jsr:@std/media-types@*": "1.1.0"
"npm:preact@*": "10.27.2"
}, },
"jsr": { "jsr": {
"@std/media-types@1.1.0": { "@std/media-types@1.1.0": {
"integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4"
} }
}, },
"npm": { "redirects": {
"preact@10.27.2": { "https://esm.sh/scheduler@^0.27.0?target=denonext": "https://esm.sh/scheduler@0.27.0?target=denonext"
"integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg=="
}
}, },
"workspace": { "remote": {
"dependencies": [ "https://esm.sh/react-dom@19.2.0/client": "489f23e19c36110c4d6361c09cd969e304665799d974ddc90ea36d9a7346e249",
"npm:preact@*" "https://esm.sh/react-dom@19.2.0/denonext/client.mjs": "d12f88ffe04230ba1e9722c97157d86b8e287e71911de06488187abbdd216726",
] "https://esm.sh/react-dom@19.2.0/denonext/react-dom.mjs": "d7bae53f5407fc0f29e04fd1866deb4a17e4e0df5ede1cdc50c791fbe21c3b06",
"https://esm.sh/react@19.2.0": "c69a4f37d5f2e04b5088c1fe6bc24f6bf0728704544f902b553d0852a7fdfae0",
"https://esm.sh/react@19.2.0/denonext/jsx-runtime.mjs": "75cd15682ab2ac7ffa971367359974541bbcfc8af7217c3fdb62f2a21b9be765",
"https://esm.sh/react@19.2.0/denonext/react.mjs": "6ffb8433fe90ae15017245e8b461f5824590e5dee07568afe31bab19e10b03ae",
"https://esm.sh/react@19.2.0/jsx-runtime": "11cfe447d2aed82e4469f0b856899b053d5fe1daf059d53cbfa75c5e5b706acc",
"https://esm.sh/scheduler@0.27.0/denonext/scheduler.mjs": "b1ba1723bf253d62b0aa1c3c0603d0d025010642158b0e746ae1fd6f7500deeb",
"https://esm.sh/scheduler@0.27.0?target=denonext": "d5e7a8b3ddf1c77fdd56083413b9ed29648e017b1000b85b3d3059a226627742"
} }
} }

View File

@ -1,4 +1,6 @@
import * as ReactParts from "react-original"; import * as ReactOriginal from "react-original";
const ReactParts = ReactOriginal.default ? ReactOriginal.default : ReactOriginal;
/* /*
@ -172,6 +174,5 @@ const ProxyReducer =(inReducer:(inState:Storelike, inAction:string)=>Storelike,
}; };
export * from "react-original"; export * from "react-original";
const Fragment = ReactParts.Fragment; export {ProxyCreate as createElement, ProxyState as useState, ProxyReducer as useReducer };
export {ProxyCreate as createElement, ProxyCreate as jsx, ProxyCreate as jsxs, Fragment, ProxyState as useState, ProxyReducer as useReducer }; export default {...ReactParts, createElement:ProxyCreate, useState:ProxyState, useReducer:ProxyReducer};
export default {...ReactParts, createElement:ProxyCreate, jsx:ProxyCreate, jsxs:ProxyCreate, Fragment, useState:ProxyState, useReducer:ProxyReducer};

View File

@ -5,12 +5,11 @@
<title>Document</title> <title>Document</title>
</head> </head>
<body> <body>
<div id="root"></div>
<script type="module"> <script type="module">
import Compat from "react-original"; import ReactDOM from "react-dom/client";
import React from "react"; import React from "react";
import App from "/app.tsx"; import App from "/app.tsx";
Compat.render(React.createElement(()=>React.createElement(App)), document.querySelector("#root")) ReactDOM.createRoot(document.body).render(React.createElement(App));
</script> </script>
</body> </body>
</html> </html>

View File

@ -14,15 +14,18 @@ const extractExtension =(path:string)=>
const RootRunning = new URL(`file://${Deno.cwd()}`).toString(); const RootRunning = new URL(`file://${Deno.cwd()}`).toString();
const RootSiblings = import.meta.resolve("./"); const RootSiblings = import.meta.resolve("./");
console.log(RootRunning);
console.log(RootSiblings);
const bakeConfigPackage:Deno.bundle.Options = const bakeConfigPackage:Deno.bundle.Options =
{ {
entrypoints:[""], entrypoints:[""],
platform: "browser", platform: "browser",
format:"esm", format:"esm",
write: false, write: false,
minify: false, minify: true,
} }
const bakeConfigLocal:Deno.bundle.Options = {...bakeConfigPackage, sourcemap:"inline", inlineImports:false }; const bakeConfigLocal:Deno.bundle.Options = {...bakeConfigPackage, minify:false, sourcemap:"inline", inlineImports:false };
async function BakeForce(path:string, type?:"package") async function BakeForce(path:string, type?:"package")
{ {
// If already baking, return the in-flight promise. (Caller may also call BakeCheck which handles this.) // If already baking, return the in-flight promise. (Caller may also call BakeCheck which handles this.)
@ -82,6 +85,7 @@ type CachedTranspile = [file:string, profile:string]
const BakeCache:Record<string, CachedTranspile | Promise<CachedTranspile|undefined> | undefined> = {} const BakeCache:Record<string, CachedTranspile | Promise<CachedTranspile|undefined> | undefined> = {}
const denoBody = await fetch(RootRunning+"/deno.json").then(resp=>resp.json()); const denoBody = await fetch(RootRunning+"/deno.json").then(resp=>resp.json());
for(const key in denoBody.imports) for(const key in denoBody.imports)
{ {
const value = denoBody.imports[key]; const value = denoBody.imports[key];
@ -90,14 +94,13 @@ for(const key in denoBody.imports)
denoBody.imports[key] = "/>/"+value; denoBody.imports[key] = "/>/"+value;
} }
} }
const react = denoBody.compilerOptions.jsxImportSource;
denoBody.imports["react-original"] = denoBody.imports[react];
denoBody.imports[react] = "/^/hmr/hmr-react.tsx";
denoBody.imports[react+"/jsx-runtime"] = "/^/hmr/hmr-react.tsx";
denoBody.imports["react-original"] = denoBody.imports[denoBody.compilerOptions.jsxImportSource];
denoBody.imports["react"] = "/^/hmr/hmr-react.tsx";
console.log(denoBody.imports); console.log(denoBody.imports);
const importMap = `<script type="importmap">{"imports":${JSON.stringify(denoBody.imports, null, 2)}}</script>`;
const importMap = `<script type="importmap">{"imports":${JSON.stringify(denoBody.imports)}}</script>`;
let htmlPageBody = await fetch(RootRunning+"/index.html").then(resp=>resp.text()); let htmlPageBody = await fetch(RootRunning+"/index.html").then(resp=>resp.text());
htmlPageBody = htmlPageBody.replace("<head>", "<head>"+importMap); htmlPageBody = htmlPageBody.replace("<head>", "<head>"+importMap);
@ -160,7 +163,6 @@ Deno.serve(async(req:Request)=>
if(keysExtension.includes(extension)) if(keysExtension.includes(extension))
{ {
const transpiled = await BakeCheck(url.pathname); const transpiled = await BakeCheck(url.pathname);
//return JSResponse(transpiled[0]);
return JSResponse(transpiled[url.searchParams.has(keyReload) ? 0 : 1]); return JSResponse(transpiled[url.searchParams.has(keyReload) ? 0 : 1]);
} }
@ -172,6 +174,8 @@ Deno.serve(async(req:Request)=>
return new Response(); return new Response();
}); });
const SocketsLive:Set<WebSocket> = new Set(); const SocketsLive:Set<WebSocket> = new Set();
const SocketsSend =(inData:string)=> const SocketsSend =(inData:string)=>
{ {