1# Reload in new tabs when your vals change
2
3When you're working on an HTML HTTP val in a new tab, it's annoying to have to manually reload the tab on every save. In the Val Town editor, you can hit cmd+enter, but there's nothing like that for a val in a new tab because Val Town doesn't control that new tab (like we control the iframe in the browser preview). However, you control that HTML via the fetch handler you're writing, so you can add a script that polls the Val Town API for the current version number of your val, and reload itself if it detects a new version. This val has a collection of helpers to help you do just that.
4
5## Usage
4async function fetchRandomJoke() {
5 const response = await fetch(
6 "https://official-joke-api.appspot.com/random_joke",
7 );
8 return response.json();
33 const locationCode = locationMap[location];
34 const octopusDataUrl =
35 `https://api.octopus.energy/v1/products/AGILE-BB-23-12-06/electricity-tariffs/E-1R-AGILE-BB-23-12-06-${locationCode}/standard-unit-rates/`;
36 const data = await fetch(octopusDataUrl);
37 let { results: results, next: next } = await data.json();
1import { fetch } from "https://esm.town/v/std/fetch";
2
3export async function postHogAPICapture({ key, event, properties, distinct_id }: {
4 key: string;
5 event: string;
8}) {
9 const body = {
10 "api_key": key,
11 "event": event,
12 "properties": properties,
102 <li className="pb-2 sm:pb-1">
103 <span className={dateClass}>2013 Jun -</span>Software Engineer @{" "}
104 <Link href="http://firstround.com/">First Round Capital</Link>
105 </li>
106 <li className="pb-2 sm:pb-1">
1# Echo incoming request as JSON
2See https://developer.mozilla.org/en-US/docs/Web/API/Request
3
4
1const baseURL = `https://www.val.town/api/trpc`;
2
3export const trpc = {
1# trpc
2
3 Access private Val Town apis.
4
5> ⚠️ trpc endpoints can change at any time
53 const builder = recast.types.builders;
54
55 let tapImportIdentifier = "t";
56 const testUtils = [
57 "describe",
88 const specifier = path.node.specifiers[0];
89 if (specifier && specifier.local) {
90 tapImportIdentifier = specifier.local.name.toString();
91 }
92 return false;
96 recast.visit(ast, {
97 visitExpressionStatement(path) {
98 removeMochaGlobal(path as NodePath, tapImportIdentifier, {
99 asserts,
100 });
127function removeMochaGlobal(
128 path: NodePath,
129 tapImportIdentifier: string,
130 { asserts }: { asserts: typeof recast.types.namedTypes },
131) {
144
145 const calleeName = path.node.expression.callee.object.name;
146 if (calleeName !== tapImportIdentifier) {
147 return false;
148 }
1null
2
3Migrated from folder: Archive/vtOpenAPI