import * as Endpoints from ">able/api.tsx"; type EndpointOptions = Record; type EndpointHandler = (options:EndpointOptions)=>unknown; export function Call(functionName:string, options:EndpointOptions) { try { // @ts-ignore we're catchig this anyway const results = Endpoints[functionName](options); return new Response(JSON.stringify(results)); } catch(e) { return false; } } function proxy(functionName:string) { return async( ...args:string[])=> { const resp = await fetch(`/api/${functionName}/${args.join("/")}`); const json = await resp.json(); return json; } } const parts:string[] = []; for(const member in Endpoints) { member != "default" && parts.push(`export const ${member} = ${proxy.name}("${member}")`); } export const Spoof = `${proxy.toString()} ${parts.join("\n")}; `;