8 | ((acc: U, next: T, index: number, values: T[]) => MaybePromise<U>);
9
10export async function reduceAsync<U, T>(
11 values: T[],
12 reducer: (acc: T, next: T, index: number, values: T[]) => MaybePromise<T>,
13): Promise<T>;
14export async function reduceAsync<U, T>(
15 values: T[],
16 reducer: (acc: T, next: T, index: number, values: T[]) => MaybePromise<T>,
17 initialValue: T,
18): Promise<T>;
19export async function reduceAsync<U, T>(
20 values: T[],
21 reducer: (acc: U, next: T, index: number, values: T[]) => MaybePromise<U>,
23): Promise<U>;
24
25export async function reduceAsync<U, T>(
26 values: T[],
27 reducer: AsyncReducer<U, T>,
7- [ ] sync sqlite between accounts
8- [x] provide read only query access to sqlite: [@postpostscript/sqlitePublic](https://val.town/v/postpostscript/sqlitePublic)
9- [x] `backup` function that backs up everything on your account (still queryable through @postpostscript/sqliteUniverse): [@postpostscript/sqliteBackup](https://val.town/v/postpostscript/sqliteBackup)
10- [ ] authenticated poll
11- [ ] sign data left on other account to prevent impersonation
3import { useEffect, useState } from "https://esm.sh/react";
4
5export default function Component() {
6 const [text, setText] = useState("from server");
7
12};
13
14export function createRoute(handler: Handler) {
15 return async (ctx: Context) => {
16 if (typeof handler == "object") {
15export type Action = (req: Request, ctx: Context) => Response | Promise<Response>;
16
17export function handler(Component, action?: Action) {
18 return async (c) => {
19 if (action) {
1export type ShaAlgorithm = "SHA-256" | "SHA-512";
2
3export async function sha(
4 input: string | BufferSource | AsyncIterable<BufferSource> | Iterable<BufferSource>,
5 algo: ShaAlgorithm = "SHA-256",
8const reUserFeed = /^\/(?<username>~[a-z0-9-_]+)\.(?<format>atom|rss)$/;
9
10export default async function(req: Request): Promise<Response> {
11 const { pathname } = new URL(req.url);
12 const match = pathname.match(reUserFeed);
49}
50
51async function grabPosts(profileURL: string | URL) {
52 const html = await ky.get(profileURL).text();
53 const doc = new DOMParser().parseFromString(html, "text/html");
23}
24
25export function testContext<TOptions extends TestContextOptions>(options: TOptions) {
26 const tests: Test<TOptions>[] = [];
27
2import { updateValByName } from "https://esm.town/v/nbbaier/updateValByName";
3
4export async function createValFromCljs(name: string, cljs: string) {
5 return updateValByName({
6 token: Deno.env.get("valtown"),
4globalThis.squint_core = squint_core;
5
6export function compileCljsToES6(cljs: string) {
7 return compileString(cljs, { repl: true, "elide-exports": true }).replace(
8 "squint-cljs",