esbuild-wasm-bundler/introspect.ts

66 lines
2.1 KiB
TypeScript
Raw Normal View History

2024-08-13 10:25:16 -04:00
import { parse as JSONC } from "jsr:@std/jsonc";
2024-06-07 16:54:12 -04:00
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;
2024-08-13 10:25:16 -04:00
} else {
json = await resp.json() as JsonLike
2024-06-07 16:54:12 -04:00
}
2024-08-13 10:25:16 -04:00
return json;
} catch (e) {
console.error(`Error loading JSON from ${inPath}:`, e.message);
return undefined;
2024-06-07 16:54:12 -04:00
}
2024-08-13 10:25:16 -04:00
};
2024-06-07 16:54:12 -04:00
2024-08-13 10:25:16 -04:00
try {
2024-06-14 17:07:50 -04:00
json = await loadJSON("./deno.json");
2024-08-13 10:25:16 -04:00
} catch (_e) {
try {
2024-06-14 17:07:50 -04:00
json = await loadJSON("./deno.jsonc");
2024-08-13 10:25:16 -04:00
} catch (_e) {
try {
json = await loadJSON("./.vscode/settings.json");
path = json?.["deno.config"] as string || "";
2024-06-07 16:54:12 -04:00
json = undefined;
2024-08-13 10:25:16 -04:00
if (path) {
json = await loadJSON(path);
2024-06-07 16:54:12 -04:00
}
2024-08-13 10:25:16 -04:00
} catch (_e) {
console.warn("Cannot find a config in .vscode/ ");
2024-06-07 16:54:12 -04:00
}
}
}
2024-08-13 10:25:16 -04:00
if (!json) {
2024-06-07 16:54:12 -04:00
json = {};
}
2024-08-13 10:25:16 -04:00
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-08-13 10:25:16 -04:00
}
2024-06-07 16:54:12 -04:00
2024-08-13 10:25:16 -04:00
// Ensure the return type always includes imports and compilerOptions
return {
imports: json.imports || {},
compilerOptions: json.compilerOptions || {}
} as { imports: JsonLike, compilerOptions: JsonLike };
2024-06-07 16:54:12 -04:00
}