Setup something simple and straight-forward

This commit is contained in:
Taevas 2023-05-07 02:13:48 +02:00
parent 079f25673b
commit 5ec7cd193e
7 changed files with 85 additions and 4 deletions

3
.gitignore vendored
View file

@ -1,2 +1,5 @@
.DS_Store .DS_Store
node_modules node_modules
# Local Netlify folder
.netlify

11
netlify.toml Normal file
View file

@ -0,0 +1,11 @@
[build]
publish = "public"
command = "echo No build command"
node_bundler = "esbuild"
[dev]
publish = "public"
node_bundler = "esbuild"
[functions]
node_bundler = "esbuild"

View file

@ -0,0 +1,33 @@
import { Handler } from '@netlify/functions'
import { api } from "./shared/api"
const handler: Handler = async (event, context) => {
console.log(event)
let lastfm = await api<{
recenttracks: {
track: {
artist: {
"#text": string
},
image: {
size: string,
"#text": string
}[]
album: {
"#text": string
},
name: string,
"@attr"?: {
nowplaying?: string
}
}[]
}
}>
(`http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=TTTaevas&api_key=${process.env["API_LASTFM"]}&format=json&limit=1`)
return {
statusCode: 200,
body: JSON.stringify(lastfm.recenttracks.track[0])
}
}
export { handler }

View file

@ -0,0 +1,10 @@
// Standard variation
export async function api<T>(url: string): Promise<T> {
return fetch(url)
.then(response => {
if (!response.ok) {
throw new Error(response.statusText)
}
return response.json() as Promise<T>
})
}

5
package.json Normal file
View file

@ -0,0 +1,5 @@
{
"dependencies": {
"@netlify/functions": "^1.4.0"
}
}

View file

@ -4,10 +4,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Jamstack Explorers - Up and Running with Serverless Functions</title> <title>Simple last.fm thingie</title>
</head> </head>
<body> <body>
<h1>Up and Running with Serverless Functions</h1> <h1>Simple last.fm thingie</h1>
<button id="fetch-btn">Fetch</button> <button id="fetch-btn">Fetch</button>
<p id="response-output">Response Placeholder</p> <p id="response-output">Response Placeholder</p>
@ -16,8 +16,12 @@
const fetchBtn = document.getElementById('fetch-btn') const fetchBtn = document.getElementById('fetch-btn')
const responseText = document.getElementById('response-output') const responseText = document.getElementById('response-output')
fetchBtn.addEventListener('click', () => { fetchBtn.addEventListener('click', async () => {
responseText.innerText = 'Static Text Replacement' const response = await fetch('/.netlify/functions/hello-world')
.then(response => response.json()
)
responseText.innerText = JSON.stringify(response)
}) })
}) })
</script> </script>

15
yarn.lock Normal file
View file

@ -0,0 +1,15 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@netlify/functions@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@netlify/functions/-/functions-1.4.0.tgz#027a2e5d54df5519ccbd14cf450231e97bbbf93a"
integrity sha512-gy7ULTIRroc2/jyFVGx1djCmmBMVisIwrvkqggq5B6iDcInRSy2Tpkm+V5C63hKJVkNRskKWtLQKm9ecCaQTjA==
dependencies:
is-promise "^4.0.0"
is-promise@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3"
integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==