1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { API_URL } from "https://esm.town/v/std/API_URL?v=5";
export function getMainExport(
mod: any,
noneOkay?: boolean,
) {
if ("default" in mod) {
return mod.default;
}
// If the val has exactly one named export, we run that.
const exports = Object.keys(mod);
if (exports.length > 1) {
const error = new Error(
`Vals require a default export, or exactly one named export. This val exports: ${
exports.join(
", ",
)
}`,
);
error.name = "ImportValError";
throw error;
} else if (exports.length === 0) {
if (noneOkay) return;
const error = new Error(
"Vals require a default export, or exactly one named export. This val has none.",
);
error.name = "ImportValError";
throw error;
}
return mod[exports[0]];
}
export async function set(path: string, value: any) {
let resolveResp = await fetch(
`${API_URL}/v1/alias/${path}`,
{
headers: {
authorization: "Bearer " + Deno.env.get("valtown"),
},
},
);
if (!resolveResp.ok) {
let err = await resolveResp.text();
throw new Error("Set Error: " + err);
}
const { id } = await resolveResp.json();
let resp = await fetch(
`${API_URL}/v1/vals/${id}/versions`,
{
method: "POST",
body: JSON.stringify({
code: `// set at ${new Date()}
export let ${decodeURIComponent(path.split("/")[1])} = ${JSON.stringify(await value, null, 2)};`,
}),
headers: {
"content-type": "application/json",
authorization: "Bearer " + Deno.env.get("valtown"),
},
},
);
if (!resp.ok) {
let err = await resp.text();
throw new Error("Set Error: " + err);
}
let val = await resp.json();
if (val.error) throw new Error("Set Error: " + val.error);
return val?.output?.json;
}
Val Town is a social website to write and deploy JavaScript.
Build APIs and schedule functions from your browser.
Comments
Nobody has commented on this val yet: be the first!
March 6, 2024