2import type { MaybePromise } from "https://esm.town/v/postpostscript/typeUtils";
3
4export function hybridTaggedTemplateMethod<
5 TResultTransformed,
6 TStringTransformed,
44}
45
46export function hybridTaggedTemplateMethodAsync<
47 TResultTransformed,
48 TStringTransformed,
1import { fetch } from "https://esm.town/v/std/fetch";
2
3export async function fetchTweet(url) {
4 const tweetId = url.match(/(\d{19})/)[1];
5 const token = getToken(tweetId);
16
17// @see: https://github.com/vercel/react-tweet/blob/a292ca7/packages/react-tweet/src/api/fetch-tweet.ts#L27-L31
18function getToken(id: string) {
19 return ((Number(id) / 1e15) * Math.PI)
20 .toString(6 ** 2)
7import { html, htmlResponseAsync } from "https://esm.town/v/postpostscript/htmlAsync";
8
9export default function(req: Request) {
10 return htmlResponseAsync`
11 ${(async () => {
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");