MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 83 lines 2.4 kB view raw
1import meow from './meow.txt'; 2import { join } from 'ant:path'; 3import { html } from './html'; 4import { readFile } from 'ant:fs'; 5import { createRouter, addRoute, findRoute } from '../rou3'; 6 7const router = createRouter(); 8 9addRoute(router, 'GET', '/', () => { 10 return new Response(`Welcome to Ant ${Ant.version}!`); 11}); 12 13addRoute(router, 'GET', '/meow', req => { 14 const userAgent = req.headers.get('User-Agent'); 15 return new Response(`${meow}\n\n${userAgent}`, { 16 headers: { 'X-Ant': 'meow' } 17 }); 18}); 19 20addRoute(router, 'GET', '/echo', async () => { 21 const res = await fetch('http://localhost:8000/meow'); 22 return new Response(await res.text(), { 23 headers: { 'X-Ant': 'meow' } 24 }); 25}); 26 27addRoute(router, 'GET', '/fs/meow', async () => { 28 const file = await readFile(join(import.meta.dirname, 'meow.txt')); 29 return new Response(file || 'none'); 30}); 31 32addRoute(router, 'GET', '/hello', () => { 33 return new Response('Hello, World!'); 34}); 35 36addRoute(router, 'GET', '/status', async () => { 37 await new Promise(resolve => setTimeout(resolve, 1000)); 38 const result = await Promise.resolve('Hello'); 39 return new Response(`server is responding with ${result}`); 40}); 41 42addRoute(router, 'POST', '/users/:id', (_req, params) => { 43 return new Response(`User ID: ${params.id}`); 44}); 45 46addRoute(router, 'GET', '/users/:id/posts', (_req, params) => { 47 return new Response(`Posts for user: ${params.id}`); 48}); 49 50addRoute(router, 'GET', '/api/v1/users', () => { 51 return Response.json({ users: [] }); 52}); 53 54addRoute(router, 'GET', '/zen', async () => { 55 const response = await fetch('https://api.github.com/zen'); 56 return new Response(await response.text()); 57}); 58 59addRoute(router, 'GET', '/api/v2/demo', async () => { 60 const data = await fetch('https://themackabu.dev/test.json'); 61 return Response.json(await data.json()); 62}); 63 64addRoute(router, 'GET', '/files/**:path', (_req, params) => { 65 return new Response(html`<div>${params.path}</div>`, { 66 headers: { 'Content-Type': 'text/html' } 67 }); 68}); 69 70console.log('started on http://localhost:8000'); 71 72export default { 73 port: 8000, 74 fetch(req) { 75 const url = new URL(req.url); 76 77 console.log('request:', req.method, url.pathname); 78 const result = findRoute(router, req.method, url.pathname); 79 80 if (result?.data) return result.data(req, result.params); 81 return new Response('not found: ' + url.pathname, { status: 404 }); 82 } 83};