starting to remove spoof path
This commit is contained in:
parent
e5176e0eee
commit
66b148d7f5
@ -4,6 +4,7 @@ import * as SWCW from "https://esm.sh/@swc/wasm-web@1.3.62";
|
|||||||
|
|
||||||
type DenoConfig = {imports:Record<string, string>};
|
type DenoConfig = {imports:Record<string, string>};
|
||||||
const ImportMap:DenoConfig = {imports:{}};
|
const ImportMap:DenoConfig = {imports:{}};
|
||||||
|
let ImportMapOriginal = {};
|
||||||
const ImportMapReload =async()=>
|
const ImportMapReload =async()=>
|
||||||
{
|
{
|
||||||
let json:DenoConfig;
|
let json:DenoConfig;
|
||||||
@ -14,6 +15,7 @@ const ImportMapReload =async()=>
|
|||||||
json = await resp.json();
|
json = await resp.json();
|
||||||
if(!json?.imports)
|
if(!json?.imports)
|
||||||
{ throw new Error("imports not specified in deno.json") }
|
{ throw new Error("imports not specified in deno.json") }
|
||||||
|
ImportMapOriginal = json;
|
||||||
}
|
}
|
||||||
catch(e)
|
catch(e)
|
||||||
{
|
{
|
||||||
@ -29,12 +31,14 @@ const ImportMapReload =async()=>
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
const mapKey = (Configuration.Spoof.startsWith("/") ? Configuration.Spoof.substring(1) : Configuration.Spoof)+"/";
|
const mapKey = (Configuration.Spoof.startsWith("/") ? Configuration.Spoof.substring(1) : Configuration.Spoof)+"/";
|
||||||
if(!json.imports[mapKey])
|
if(!json.imports[mapKey])
|
||||||
{
|
{
|
||||||
console.log(`"${mapKey}" specifier not defined in import map`);
|
console.log(`"${mapKey}" specifier not defined in import map`);
|
||||||
}
|
}
|
||||||
json.imports[mapKey] = Configuration.Spoof+"/";
|
json.imports[mapKey] = Configuration.Spoof+"/";
|
||||||
|
*/
|
||||||
|
|
||||||
if(!json.imports["react"])
|
if(!json.imports["react"])
|
||||||
{
|
{
|
||||||
@ -47,7 +51,7 @@ const ImportMapReload =async()=>
|
|||||||
|
|
||||||
type CustomHTTPHandler = (inReq:Request, inURL:URL, inExt:string|false, inMap:{imports:Record<string, string>}, inConfig:Configuration)=>void|false|Response|Promise<Response|void|false>;
|
type CustomHTTPHandler = (inReq:Request, inURL:URL, inExt:string|false, inMap:{imports:Record<string, string>}, inConfig:Configuration)=>void|false|Response|Promise<Response|void|false>;
|
||||||
type CustomRemapper = (inImports:Record<string, string>, inConfig:Configuration)=>Record<string, string>;
|
type CustomRemapper = (inImports:Record<string, string>, inConfig:Configuration)=>Record<string, string>;
|
||||||
type Configuration = {Proxy:string, Spoof:string, Allow:string, Reset:string, SWCOp:SWCW.Options, Serve:CustomHTTPHandler, Shell:CustomHTTPHandler, Remap:CustomRemapper};
|
type Configuration = {Proxy:string, Spoof:string, Allow:string, Reset:string, SWCOp:SWCW.Options, Serve:CustomHTTPHandler, Shell:CustomHTTPHandler, Remap:CustomRemapper};
|
||||||
type ConfigurationArgs = {Proxy?:string, Spoof?:string, Allow?:string, Reset?:string, SWCOp?:SWCW.Options, Serve?:CustomHTTPHandler, Shell?:CustomHTTPHandler, Remap?:CustomRemapper};
|
type ConfigurationArgs = {Proxy?:string, Spoof?:string, Allow?:string, Reset?:string, SWCOp?:SWCW.Options, Serve?:CustomHTTPHandler, Shell?:CustomHTTPHandler, Remap?:CustomRemapper};
|
||||||
let Configuration:Configuration =
|
let Configuration:Configuration =
|
||||||
{
|
{
|
||||||
@ -59,9 +63,11 @@ let Configuration:Configuration =
|
|||||||
{
|
{
|
||||||
if( inReq.headers.get("user-agent")?.startsWith("Deno") || inURL.searchParams.get("deno") )
|
if( inReq.headers.get("user-agent")?.startsWith("Deno") || inURL.searchParams.get("deno") )
|
||||||
{
|
{
|
||||||
const file = await fetch(inConfig.Proxy + inURL.pathname);
|
if(inExt && Extension(inExt))
|
||||||
const text = await file.text();
|
{
|
||||||
return new Response(Transpile.Patch(text, "deno-"+inURL.pathname, inMap), {headers:{"content-type":"application/javascript"}} );
|
const text = await Transpile.Patch(inConfig.Proxy + inURL.pathname, "deno-"+inURL.pathname, inMap);
|
||||||
|
return new Response(text, {headers:{"content-type":"application/javascript"}} );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Remap: (inImports, inConfig)=>
|
Remap: (inImports, inConfig)=>
|
||||||
@ -141,16 +147,15 @@ export const Transpile =
|
|||||||
/**
|
/**
|
||||||
* Converts dynamic module imports in to static, also can resolve paths with an import map
|
* Converts dynamic module imports in to static, also can resolve paths with an import map
|
||||||
*/
|
*/
|
||||||
Patch(inText:string, inKey:string|false = false, inMap?:DenoConfig)
|
async Patch(inPath:string, inKey:string, inMap?:DenoConfig)
|
||||||
{
|
{
|
||||||
|
const file = await fetch(inPath);
|
||||||
|
const text = await file.text();
|
||||||
|
|
||||||
if(inKey)
|
const check = this.Cache.get(inKey);
|
||||||
|
if(check)
|
||||||
{
|
{
|
||||||
const check = this.Cache.get(inKey);
|
return check;
|
||||||
if(check)
|
|
||||||
{
|
|
||||||
return check;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const remap = inMap ? (inPath:string)=>
|
const remap = inMap ? (inPath:string)=>
|
||||||
@ -181,11 +186,11 @@ export const Transpile =
|
|||||||
}
|
}
|
||||||
: (inPath:string)=>inPath;
|
: (inPath:string)=>inPath;
|
||||||
let match, regex;
|
let match, regex;
|
||||||
let convertedBody = inText;
|
let convertedBody = text;
|
||||||
|
|
||||||
// remap static imports
|
// remap static imports
|
||||||
regex = /from\s+(['"`])(.*?)\1/g;
|
regex = /from\s+(['"`])(.*?)\1/g;
|
||||||
while ((match = regex.exec(inText)))
|
while ((match = regex.exec(text)))
|
||||||
{
|
{
|
||||||
const importStatement = match[0];
|
const importStatement = match[0];
|
||||||
const importPath = match[2];
|
const importPath = match[2];
|
||||||
@ -195,7 +200,7 @@ export const Transpile =
|
|||||||
// convert dynamic imports into static (to work around deno deploy)
|
// convert dynamic imports into static (to work around deno deploy)
|
||||||
const staticImports = [];
|
const staticImports = [];
|
||||||
regex = /(?<![\w.])import\(([^)]+)(?!import\b)\)/g;
|
regex = /(?<![\w.])import\(([^)]+)(?!import\b)\)/g;
|
||||||
while ((match = regex.exec(inText)))
|
while ((match = regex.exec(text)))
|
||||||
{
|
{
|
||||||
const importStatement = match[0];
|
const importStatement = match[0];
|
||||||
const importPath = remap(match[1].substring(1, match[1].length-1));
|
const importPath = remap(match[1].substring(1, match[1].length-1));
|
||||||
@ -209,7 +214,7 @@ export const Transpile =
|
|||||||
inKey && this.Cache.set(inKey, convertedBody);
|
inKey && this.Cache.set(inKey, convertedBody);
|
||||||
return convertedBody;
|
return convertedBody;
|
||||||
},
|
},
|
||||||
Fetch: async function(inPath:string, inKey:string, inCheckCache=true)
|
async Fetch(inPath:string, inKey:string, inCheckCache=true)
|
||||||
{
|
{
|
||||||
const check = this.Cache.get(inPath);
|
const check = this.Cache.get(inPath);
|
||||||
if(check && inCheckCache)
|
if(check && inCheckCache)
|
||||||
|
56
things.md
Normal file
56
things.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# Outpost
|
||||||
|
|
||||||
|
## Deno Deploy
|
||||||
|
```
|
||||||
|
accept: */*
|
||||||
|
accept-encoding: gzip, br
|
||||||
|
accept-language: *
|
||||||
|
cdn-loop: deno;s=deno;d=ah40t9m8n54g
|
||||||
|
host: bad-goat-66.deno.dev
|
||||||
|
user-agent: Deno/1.34.1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deno
|
||||||
|
```
|
||||||
|
accept: */*
|
||||||
|
accept-encoding: gzip, br
|
||||||
|
accept-language: *
|
||||||
|
host: bad-goat-66.deno.dev
|
||||||
|
user-agent: Deno/1.34.3
|
||||||
|
```
|
||||||
|
|
||||||
|
## Edge
|
||||||
|
```
|
||||||
|
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
|
||||||
|
accept-encoding: gzip, deflate, br
|
||||||
|
accept-language: en-US,en;q=0.9
|
||||||
|
host: bad-goat-66.deno.dev
|
||||||
|
referer: https://dash.deno.com/
|
||||||
|
sec-ch-ua: "Microsoft Edge";v="117", "Not;A=Brand";v="8", "Chromium";v="117"
|
||||||
|
sec-ch-ua-mobile: ?0
|
||||||
|
sec-ch-ua-platform: "Windows"
|
||||||
|
sec-fetch-dest: iframe
|
||||||
|
sec-fetch-mode: navigate
|
||||||
|
sec-fetch-site: cross-site
|
||||||
|
upgrade-insecure-requests: 1
|
||||||
|
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Firefox
|
||||||
|
```
|
||||||
|
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
|
||||||
|
accept-encoding: gzip, deflate, br
|
||||||
|
accept-language: en-US,en;q=0.5
|
||||||
|
host: bad-goat-66.deno.dev
|
||||||
|
sec-fetch-dest: document
|
||||||
|
sec-fetch-mode: navigate
|
||||||
|
sec-fetch-site: cross-site
|
||||||
|
te: trailers
|
||||||
|
upgrade-insecure-requests: 1
|
||||||
|
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
|
||||||
|
```
|
||||||
|
|
||||||
|
When a requet comes in:
|
||||||
|
- if its for a transpile-able document:
|
||||||
|
- if its a request from deno:
|
||||||
|
-
|
Loading…
Reference in New Issue
Block a user