const artists = [
{ name : "Eminem" , genre : "Rap" , origin : "Detroit, MI" },
{ name : "Deftones" , genre : "Alternative Metal" , origin : "Sacramento, CA" },
{ name : "Sublime" , genre : "Ska Punk" , origin : "Long Beach, CA" }
];
export class Artist {
static findNamed ( name : string | null ) : Artist | undefined {
if ( ! name ) return undefined ;
const artist = artists . find (( x ) => x . name . toLowerCase () === name . toLowerCase ());
return artist ? new Artist ( artist . name , artist . genre , artist . origin ) : undefined ;
}
constructor (
public name : string ,
public genre : string ,
public origin : string
) {}
}
export const template = ( artist : Artist ) => `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> ${ artist . name } </title>
</head>
<body>
<h1> ${ artist . name } </h1>
<p>Genre: ${ artist . genre } </p>
<p>Origin: ${ artist . origin } </p>
</body>
</html>
` ;
export class ArtistController {
static handleRequest ( req : Request ) : Response {
const url = new URL ( req . url );
const artist = Artist . findNamed ( url . searchParams . get ( "name" ));
if ( ! artist ) {
return new Response ( "Artist not found" , { status : 404 });
}
return new Response ( template ( artist ), {
status : 200 ,
headers : {
"Content-Type" : "text/html"
}
});
}
}
Bun . serve ({
routes : {
"/artist" : ( req ) => {
return ArtistController . handleRequest ( req );
}
}
});