dev server proxy
This commit is contained in:
parent
b50cae600a
commit
c3f6e45a99
6
dist/bundle_entry.js
vendored
6
dist/bundle_entry.js
vendored
File diff suppressed because one or more lines are too long
1
dist/hmr-WDOBNTDQ.js
vendored
1
dist/hmr-WDOBNTDQ.js
vendored
@ -1 +0,0 @@
|
|||||||
var g=0,c={};function d(){for(let e in c)sessionStorage.setItem(e,c[e]);c={},g=0}function f(e,t){c[e]=t,g||(g=setTimeout(d,500)),console.log("SAVE",e,t)}function h(e){let t=sessionStorage.getItem(e);return console.log("LOAD",e,t),t}var S,u=0;function v(e){u=0,S=e}function m(){return S?S+"_"+u+++"_":""}var I=globalThis.van.state;globalThis.van.state=(e,t="")=>{let n=typeof e,o=r=>r,a=r=>r?.toString()||null;switch(n){case"boolean":o=r=>r==="true";break;case"number":o=parseFloat;break;case"object":o=JSON.parse,a=JSON.stringify;break}let l="HMR_"+m()+t,s=h(l),i=I(s?o(s):e);return van.derive(()=>f(l,a(i.val))),i};var T=globalThis.vanX.reactive;globalThis.vanX={...globalThis.VanX,reactive:(e,t)=>{v(t);let n=T(e);return v(),n}};new WebSocket("ws://"+window.location.host+"/ws").addEventListener("message",e=>e.data==="reload"&&window.location.reload());vanX.Store=(e,t)=>{let n=JSON.stringify(e),o=localStorage.getItem(t+"check");localStorage.setItem(t+"check",n);let a;if(n==o){let s=localStorage.getItem(t);try{a=JSON.parse(s)||e}catch{a=e}}else a=e;let l=vanX.reactive(a);return van.derive(()=>localStorage.setItem(t,JSON.stringify(vanX.compact(l)))),l};
|
|
@ -8,6 +8,6 @@ export const HTML = index.replace(
|
|||||||
`</head>`,
|
`</head>`,
|
||||||
`
|
`
|
||||||
<style>*{margin:0;padding:0;box-sizing:border-box;}html, body{height:100%;width:100%;font-family:Arial, sans-serif;line-height:1.6;}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}img, video{max-width:100%;height:auto;}a{text-decoration:none;color:inherit;}ul, ol{list-style:none;}button, input, textarea{font-family:inherit;font-size:inherit;line-height:inherit;border:none;background:none;padding:0;margin:0;outline:none;}table{border-collapse:collapse;width:100%;}</style>
|
<style>*{margin:0;padding:0;box-sizing:border-box;}html, body{height:100%;width:100%;font-family:Arial, sans-serif;line-height:1.6;}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}img, video{max-width:100%;height:auto;}a{text-decoration:none;color:inherit;}ul, ol{list-style:none;}button, input, textarea{font-family:inherit;font-size:inherit;line-height:inherit;border:none;background:none;padding:0;margin:0;outline:none;}table{border-collapse:collapse;width:100%;}</style>
|
||||||
<script type="module" src="${Root+"dist/bundle_entry.js?hmr&map"}"></script>
|
<script type="module" src="/proxy/dist/bundle_entry.js?hmr&map"}"></script>
|
||||||
</head>`);
|
</head>`);
|
||||||
|
|
||||||
|
@ -14,7 +14,8 @@ vanX.Store=(e,t)=>{const a=localStorage.getItem(t),r=vanX.reactive(a?JSON.parse(
|
|||||||
|
|
||||||
if(args.has("hmr"))
|
if(args.has("hmr"))
|
||||||
{
|
{
|
||||||
await import("../src/hmr.js");
|
const path = "/proxy/"+"src/hmr.js";
|
||||||
|
await import(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
const root = args.get("root")||"/";
|
const root = args.get("root")||"/";
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
import { contentType } from "jsr:@std/media-types";
|
import { contentType } from "jsr:@std/media-types";
|
||||||
import {HTML} from "./assemble_files.ts";
|
import {HTML, Root} from "./assemble_files.ts";
|
||||||
|
|
||||||
// Parse the port from the command-line arguments, defaulting to 8000
|
// Parse the port from the command-line arguments, defaulting to 8000
|
||||||
const port = parseInt(Deno.args[0] || "8000", 10);
|
const port = parseInt(Deno.args[0] || "8000", 10);
|
||||||
const sockets: WebSocket[] = [];
|
const sockets: WebSocket[] = [];
|
||||||
|
|
||||||
let html = HTML;
|
|
||||||
|
|
||||||
function extension(path: string): string {
|
function extension(path: string): string {
|
||||||
// Remove trailing slash if it exists
|
// Remove trailing slash if it exists
|
||||||
const normalizedPath = path.endsWith("/") ? path.slice(0, -1) : path;
|
const normalizedPath = path.endsWith("/") ? path.slice(0, -1) : path;
|
||||||
@ -18,32 +16,48 @@ function extension(path: string): string {
|
|||||||
|
|
||||||
// Start the HTTP server using Deno.serve
|
// Start the HTTP server using Deno.serve
|
||||||
Deno.serve({ port }, async (req: Request) => {
|
Deno.serve({ port }, async (req: Request) => {
|
||||||
const url = new URL(req.url);
|
const path = new URL(req.url).pathname;
|
||||||
|
|
||||||
// Handle WebSocket connections
|
// Handle WebSocket connections
|
||||||
if (url.pathname === "/ws") {
|
if (path === "/ws") {
|
||||||
const { socket, response } = Deno.upgradeWebSocket(req);
|
const { socket, response } = Deno.upgradeWebSocket(req);
|
||||||
sockets.push(socket);
|
sockets.push(socket);
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Serve static files or the predefined HTML for non-file routes
|
// Serve static files or the predefined HTML for non-file routes
|
||||||
const path = new URL(req.url).pathname;
|
|
||||||
const ext = extension(path);
|
const ext = extension(path);
|
||||||
|
|
||||||
// Serve the predefined HTML for non-file routes
|
// Serve the predefined HTML for non-file routes
|
||||||
if (!ext) {
|
if (!ext) {
|
||||||
return new Response(html, {
|
return new Response(HTML, {
|
||||||
headers: { "Content-Type": "text/html" },
|
headers: { "Content-Type": "text/html" },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
const file = await Deno.open("." + path, { read: true });
|
|
||||||
return new Response(file.readable, {
|
try
|
||||||
|
{
|
||||||
|
const proxyPrefix = "/proxy/";
|
||||||
|
let streamable;
|
||||||
|
if(path.startsWith(proxyPrefix))
|
||||||
|
{
|
||||||
|
const file = await fetch(Root + path.slice(proxyPrefix.length));
|
||||||
|
streamable = file.body;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const file = await Deno.open("." + path, { read: true });
|
||||||
|
streamable = file.readable;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Response(streamable, {
|
||||||
headers: { "Content-Type": contentType(ext) || "application/javascript" },
|
headers: { "Content-Type": contentType(ext) || "application/javascript" },
|
||||||
});
|
});
|
||||||
} catch (err) {
|
}
|
||||||
|
catch (err)
|
||||||
|
{
|
||||||
if (err instanceof Deno.errors.NotFound) {
|
if (err instanceof Deno.errors.NotFound) {
|
||||||
return new Response("File not found", { status: 404 });
|
return new Response("File not found", { status: 404 });
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user