esbuild-wasm-bundler/introspect.ts

80 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-06-07 16:54:12 -04:00
import { parse as JSONC } from "https://deno.land/x/jsonct@v0.1.0/mod.ts";
2024-06-12 14:48:53 -04:00
type JsonLike = { [key: string]: string | string[] | JsonLike; };
2024-06-10 16:23:31 -04:00
2024-06-12 17:05:41 -04:00
/** A `file://` url version of Deno.cwd() (contains trailing slash) */
2024-07-05 08:54:39 -04:00
export const Root:string = new URL(`file://${Deno.cwd().replaceAll("\\", "/")}`).toString() + "/";
export default async function HuntConfig(directory=Root):Promise<{
imports: JsonLike;
compilerOptions: JsonLike;
}>
2024-06-07 16:54:12 -04:00
{
let path:string, json:JsonLike|undefined;
2024-06-14 17:07:50 -04:00
console.log("searchig in directory", directory)
2024-06-07 16:54:12 -04:00
const loadJSON =async(inPath:string)=>{
try{
2024-06-14 17:07:50 -04:00
const path = new URL(inPath, directory);
console.log("looking at", path.href);
const resp = await fetch(path);
if(inPath.endsWith("./.jsonc"))
2024-06-07 16:54:12 -04:00
{
const text = await resp.text();
json = JSONC(text) as JsonLike;
}
else
{
json = await resp.json();
}
return json;
}
catch(_e)
{
return {};
}
}
try// look for `deno.json`
{
2024-06-14 17:07:50 -04:00
json = await loadJSON("./deno.json");
2024-06-07 16:54:12 -04:00
}
catch(_e)
{
try // look for `deno.jsonc`
{
2024-06-14 17:07:50 -04:00
json = await loadJSON("./deno.jsonc");
2024-06-07 16:54:12 -04:00
}
catch(_e)
{
try // look in the vscode plugin settings
{
2024-06-14 17:07:50 -04:00
json = await loadJSON("./.vscode/settings.json")
2024-06-07 16:54:12 -04:00
path = json ? json["deno.config"] as string : "";
json = undefined;
if(path)
{
json = await loadJSON(path)
}
}
catch(_e)
{
// cant find a config using the vscode plugin
}
}
}
if(!json)
{
json = {};
}
path = json.importMap as string;
if(!json.imports && path)
{
2024-06-12 14:48:53 -04:00
json.imports = await loadJSON(path) as JsonLike;
2024-06-07 16:54:12 -04:00
}
2024-06-12 14:48:53 -04:00
return json as {imports:JsonLike, compilerOptions:JsonLike};
2024-06-07 16:54:12 -04:00
}