mirror of
https://github.com/cloudflare/wrangler-action.git
synced 2024-11-22 18:13:24 +01:00
9e7e2ec6db
- Support `apiToken` as an authentication method - Deprecates `apiKey` and `email`, making them optional parameters and encouraging `apiToken` usage in build logs - Support `wranglerVersion` for installing a specific Wrangler version for your build - Per #7, support for `workingDirectory` to run `wrangler-action` in a specific directory in your repo - Adds a test Workers project under the `test` directory. This is used in the repo's new set of workflows (see below) - Adds a GitHub Action workflow that: - Lints `entrypoint.sh` to ensure that the shell script looks correct - Runs the action with various config options to ensure future pushes don't introduce regressions
80 lines
No EOL
2.2 KiB
JavaScript
80 lines
No EOL
2.2 KiB
JavaScript
import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler'
|
|
|
|
/**
|
|
* The DEBUG flag will do two things that help during development:
|
|
* 1. we will skip caching on the edge, which makes it easier to
|
|
* debug.
|
|
* 2. we will return an error message on exception in your Response rather
|
|
* than the default 404.html page.
|
|
*/
|
|
const DEBUG = false
|
|
|
|
addEventListener('fetch', event => {
|
|
try {
|
|
event.respondWith(handleEvent(event))
|
|
} catch (e) {
|
|
if (DEBUG) {
|
|
return event.respondWith(
|
|
new Response(e.message || e.toString(), {
|
|
status: 500,
|
|
}),
|
|
)
|
|
}
|
|
event.respondWith(new Response('Internal Error', { status: 500 }))
|
|
}
|
|
})
|
|
|
|
async function handleEvent(event) {
|
|
const url = new URL(event.request.url)
|
|
let options = {}
|
|
|
|
/**
|
|
* You can add custom logic to how we fetch your assets
|
|
* by configuring the function `mapRequestToAsset`
|
|
*/
|
|
// options.mapRequestToAsset = handlePrefix(/^\/docs/)
|
|
|
|
try {
|
|
if (DEBUG) {
|
|
// customize caching
|
|
options.cacheControl = {
|
|
bypassCache: true,
|
|
}
|
|
}
|
|
return await getAssetFromKV(event, options)
|
|
} catch (e) {
|
|
// if an error is thrown try to serve the asset at 404.html
|
|
if (!DEBUG) {
|
|
try {
|
|
let notFoundResponse = await getAssetFromKV(event, {
|
|
mapRequestToAsset: req => new Request(`${new URL(req.url).origin}/404.html`, req),
|
|
})
|
|
|
|
return new Response(notFoundResponse.body, { ...notFoundResponse, status: 404 })
|
|
} catch (e) {}
|
|
}
|
|
|
|
return new Response(e.message || e.toString(), { status: 500 })
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Here's one example of how to modify a request to
|
|
* remove a specific prefix, in this case `/docs` from
|
|
* the url. This can be useful if you are deploying to a
|
|
* route on a zone, or if you only want your static content
|
|
* to exist at a specific path.
|
|
*/
|
|
function handlePrefix(prefix) {
|
|
return request => {
|
|
// compute the default (e.g. / -> index.html)
|
|
let defaultAssetKey = mapRequestToAsset(request)
|
|
let url = new URL(defaultAssetKey.url)
|
|
|
|
// strip the prefix from the path for lookup
|
|
url.pathname = url.pathname.replace(prefix, '/')
|
|
|
|
// inherit all other props from the default request
|
|
return new Request(url.toString(), defaultAssetKey)
|
|
}
|
|
} |